ihevc_buf_mgr_init:
   76|  1.97k|{
   77|  1.97k|    WORD32 id;
   78|       |
   79|  1.97k|    ps_buf_mgr->u4_max_buf_cnt = BUF_MGR_MAX_CNT;
  ------------------
  |  |   37|  1.97k|#define BUF_MGR_MAX_CNT 64
  ------------------
   80|  1.97k|    ps_buf_mgr->u4_active_buf_cnt = 0;
   81|       |
   82|   128k|    for(id = 0; id < BUF_MGR_MAX_CNT; id++)
  ------------------
  |  |   37|   128k|#define BUF_MGR_MAX_CNT 64
  ------------------
  |  Branch (82:17): [True: 126k, False: 1.97k]
  ------------------
   83|   126k|    {
   84|   126k|        ps_buf_mgr->au4_status[id] = 0;
   85|   126k|        ps_buf_mgr->apv_ptr[id] = NULL;
   86|   126k|    }
   87|  1.97k|}
ihevc_buf_mgr_add:
  117|  8.99k|{
  118|       |
  119|       |    /* Check if buffer ID is within allowed range */
  120|  8.99k|    if(buf_id >= (WORD32)ps_buf_mgr->u4_max_buf_cnt)
  ------------------
  |  Branch (120:8): [True: 0, False: 8.99k]
  ------------------
  121|      0|    {
  122|      0|        return (-1);
  123|      0|    }
  124|       |
  125|       |    /* Check if the current ID is being used to hold some other buffer */
  126|  8.99k|    if((ps_buf_mgr->apv_ptr[buf_id] != NULL) &&
  ------------------
  |  Branch (126:8): [True: 1.16k, False: 7.83k]
  ------------------
  127|  8.99k|       (ps_buf_mgr->apv_ptr[buf_id] != pv_ptr))
  ------------------
  |  Branch (127:8): [True: 0, False: 1.16k]
  ------------------
  128|      0|    {
  129|      0|        return (-1);
  130|      0|    }
  131|  8.99k|    ps_buf_mgr->apv_ptr[buf_id] = pv_ptr;
  132|       |
  133|  8.99k|    return 0;
  134|  8.99k|}
ihevc_buf_mgr_get_next_free:
  163|  10.7k|{
  164|  10.7k|    WORD32 id;
  165|  10.7k|    void *pv_ret_ptr;
  166|       |
  167|  10.7k|    pv_ret_ptr = NULL;
  168|  17.9k|    for(id = 0; id < (WORD32)ps_buf_mgr->u4_max_buf_cnt; id++)
  ------------------
  |  Branch (168:17): [True: 17.9k, False: 35]
  ------------------
  169|  17.9k|    {
  170|  17.9k|        ASSERT(ps_buf_mgr->au4_status[id] != 2);
  ------------------
  |  |   55|  17.9k|#define ASSERT(x) assert((x))
  ------------------
  171|       |
  172|       |        /* Check if the buffer is non-null and status is zero */
  173|  17.9k|        if((ps_buf_mgr->au4_status[id] == 0) && (ps_buf_mgr->apv_ptr[id]))
  ------------------
  |  Branch (173:12): [True: 12.9k, False: 5.01k]
  |  Branch (173:49): [True: 10.7k, False: 2.17k]
  ------------------
  174|  10.7k|        {
  175|  10.7k|            *pi4_buf_id = id;
  176|       |            /* DEC is set to 1 */
  177|  10.7k|            ps_buf_mgr->au4_status[id] = 1;
  178|  10.7k|            pv_ret_ptr = ps_buf_mgr->apv_ptr[id];
  179|  10.7k|            break;
  180|  10.7k|        }
  181|  17.9k|    }
  182|       |
  183|  10.7k|    return pv_ret_ptr;
  184|  10.7k|}
ihevc_buf_mgr_release:
  257|  13.5k|{
  258|       |    /* If the given id is pointing to an id which is not yet added */
  259|  13.5k|    if(buf_id >= (WORD32)ps_buf_mgr->u4_max_buf_cnt)
  ------------------
  |  Branch (259:8): [True: 0, False: 13.5k]
  ------------------
  260|      0|    {
  261|      0|        return (-1);
  262|      0|    }
  263|       |
  264|  13.5k|    ps_buf_mgr->au4_status[buf_id] &= ~mask;
  265|  13.5k|    ASSERT(ps_buf_mgr->au4_status[buf_id] != 2);
  ------------------
  |  |   55|  13.5k|#define ASSERT(x) assert((x))
  ------------------
  266|       |
  267|       |    /* If both the REF and DISP are zero, DEC is set to zero */
  268|  13.5k|    if(ps_buf_mgr->au4_status[buf_id] == 1)
  ------------------
  |  Branch (268:8): [True: 8.39k, False: 5.16k]
  ------------------
  269|  8.39k|    {
  270|  8.39k|        ps_buf_mgr->au4_status[buf_id] = 0;
  271|  8.39k|    }
  272|       |
  273|  13.5k|    return 0;
  274|  13.5k|}
ihevc_buf_mgr_set_status:
  309|  16.0k|{
  310|  16.0k|    if(buf_id >= (WORD32)ps_buf_mgr->u4_max_buf_cnt)
  ------------------
  |  Branch (310:8): [True: 0, False: 16.0k]
  ------------------
  311|      0|    {
  312|      0|        return (-1);
  313|      0|    }
  314|       |
  315|       |
  316|  16.0k|    if((ps_buf_mgr->au4_status[buf_id] & mask) != 0)
  ------------------
  |  Branch (316:8): [True: 0, False: 16.0k]
  ------------------
  317|      0|    {
  318|      0|        return (-1);
  319|      0|    }
  320|       |
  321|  16.0k|    ps_buf_mgr->au4_status[buf_id] |= mask;
  322|  16.0k|    ASSERT(ps_buf_mgr->au4_status[buf_id] != 2);
  ------------------
  |  |   55|  16.0k|#define ASSERT(x) assert((x))
  ------------------
  323|  16.0k|    return 0;
  324|  16.0k|}

ihevc_intra_pred_chroma_ref_substitution:
  133|  3.42M|{
  134|  3.42M|    UWORD8 pu1_ref_u, pu1_ref_v;
  135|  3.42M|    WORD32 dc_val, i, j;
  136|  3.42M|    WORD32 total_samples = (4 * nt) + 1;
  137|  3.42M|    WORD32 get_bits;
  138|  3.42M|    WORD32 next;
  139|  3.42M|    WORD32 bot_left, left, top, tp_right, tp_left;
  140|  3.42M|    WORD32 idx, nbr_id_from_bl, frwd_nbr_flag;
  141|  3.42M|    WORD32 a_nbr_flag[5];
  142|  3.42M|    UNUSED(dst_strd);
  ------------------
  |  |   38|  3.42M|#define UNUSED(x) ((void)(x))
  ------------------
  143|       |    /* Neighbor Flag Structure*/
  144|       |    /* WORD32 nbr_flags MSB-->LSB   TOP LEFT | TOP-RIGHT |  TOP   | LEFT    | BOTTOM LEFT*/
  145|       |    /*                              (1 bit)     (4 bits)  (4 bits) (4 bits)  (4 bits)  */
  146|       |
  147|  3.42M|    if(nbr_flags == 0)
  ------------------
  |  Branch (147:8): [True: 4.46k, False: 3.41M]
  ------------------
  148|  4.46k|    {
  149|       |/* If no neighbor flags are present, fill the neighbor samples with DC value */
  150|       |        /*dc_val = 1 << (BIT_DEPTH - 1);*/
  151|  4.46k|        dc_val = 1 << (8 - 1);
  152|   390k|        for(i = 0; i < (2 * total_samples); i++)
  ------------------
  |  Branch (152:20): [True: 385k, False: 4.46k]
  ------------------
  153|   385k|        {
  154|   385k|            pu1_dst[i] = dc_val;
  155|   385k|        }
  156|  4.46k|    }
  157|  3.41M|    else
  158|  3.41M|    {
  159|       |        /* Else fill the corresponding samples */
  160|       |
  161|       |        /* Check for the neighbors availibility */
  162|  3.41M|        tp_left     = (nbr_flags & 0x10000);
  163|  3.41M|        tp_right    = (nbr_flags & 0x0f000);
  164|  3.41M|        top         = (nbr_flags & 0x00f00);
  165|  3.41M|        left        = (nbr_flags & 0x000f0);
  166|  3.41M|        bot_left    = (nbr_flags & 0x0000f);
  167|       |
  168|       |        /* Fill nbrs depending on avalibility */
  169|       |        /* Top -Left nbrs  */
  170|  3.41M|        if(0 != tp_left)
  ------------------
  |  Branch (170:12): [True: 3.18M, False: 232k]
  ------------------
  171|  3.18M|        {
  172|  3.18M|            pu1_dst[(4 * nt)] = *pu1_top_left; // U top-left sample
  173|  3.18M|            pu1_dst[(4 * nt) + 1] = *(pu1_top_left + 1); // V top-left sample
  174|  3.18M|        }
  175|       |        /* Left nbrs  */
  176|  3.41M|        if(0 != left)
  ------------------
  |  Branch (176:12): [True: 3.38M, False: 33.2k]
  ------------------
  177|  3.38M|        {
  178|  32.6M|            for(i = 0, j = 0; i < (2 * nt); i += 2)
  ------------------
  |  Branch (178:31): [True: 29.2M, False: 3.38M]
  ------------------
  179|  29.2M|            {
  180|  29.2M|                pu1_dst[(4 * nt) - 2 - i] = pu1_left[j * src_strd]; // U left samples
  181|  29.2M|                pu1_dst[(4 * nt) - 1 - i] = pu1_left[(j * src_strd) + 1]; // V left samples
  182|  29.2M|                j++;
  183|  29.2M|            }
  184|  3.38M|        }
  185|       |        /* Bottom - Left nbrs  */
  186|  3.41M|        if(0 != bot_left)
  ------------------
  |  Branch (186:12): [True: 1.02M, False: 2.38M]
  ------------------
  187|  1.02M|        {
  188|  9.43M|            for(i = (2 * nt), j = nt; i < (4 * nt); i += 2)
  ------------------
  |  Branch (188:39): [True: 8.40M, False: 1.02M]
  ------------------
  189|  8.40M|            {
  190|  8.40M|                pu1_dst[(4 * nt) - 2 - i] = pu1_left[j * src_strd]; // U left samples
  191|  8.40M|                pu1_dst[(4 * nt) - 1 - i] = pu1_left[(j * src_strd) + 1]; // V left samples
  192|  8.40M|                j++;
  193|  8.40M|            }
  194|  1.02M|        }
  195|       |        /* Top nbrs  */
  196|  3.41M|        if(0 != top)
  ------------------
  |  Branch (196:12): [True: 3.21M, False: 203k]
  ------------------
  197|  3.21M|        {
  198|  3.21M|            ihevc_memcpy_mul_8(&pu1_dst[(4 * nt) + 2], pu1_top, 2 * nt);
  199|       |            // U-V interleaved Top-top right samples
  200|  3.21M|        }
  201|       |
  202|       |        /* Top - Right nbrs  */
  203|  3.41M|        if(0 != tp_right)
  ------------------
  |  Branch (203:12): [True: 2.17M, False: 1.24M]
  ------------------
  204|  2.17M|        {
  205|  2.17M|            ihevc_memcpy_mul_8(&pu1_dst[(4 * nt) + 2 + 2 * nt], pu1_top + 2 * nt, 2 * nt);
  206|       |            // U-V interleaved Top-top right samples
  207|  2.17M|        }
  208|       |
  209|  3.41M|        if(nt == 4)
  ------------------
  |  Branch (209:12): [True: 1.16M, False: 2.25M]
  ------------------
  210|  1.16M|        {
  211|       |            /* 1 bit extraction for all the neighboring blocks */
  212|  1.16M|            tp_left = (nbr_flags & 0x10000) >> 16;
  213|  1.16M|            bot_left = (nbr_flags & 0x8) >> 3;
  214|  1.16M|            left = (nbr_flags & 0x80) >> 7;
  215|  1.16M|            top = (nbr_flags & 0x100) >> 8;
  216|  1.16M|            tp_right = (nbr_flags & 0x1000) >> 12;
  217|       |
  218|  1.16M|            next = 1;
  219|  1.16M|            a_nbr_flag[0] = bot_left;
  220|  1.16M|            a_nbr_flag[1] = left;
  221|  1.16M|            a_nbr_flag[2] = tp_left;
  222|  1.16M|            a_nbr_flag[3] = top;
  223|  1.16M|            a_nbr_flag[4] = tp_right;
  224|       |
  225|       |            /* If bottom -left is not available, reverse substitution process*/
  226|  1.16M|            if(bot_left == 0)
  ------------------
  |  Branch (226:16): [True: 796k, False: 365k]
  ------------------
  227|   796k|            {
  228|       |                /* Check for the 1st available sample from bottom-left*/
  229|   816k|                while(!a_nbr_flag[next])
  ------------------
  |  Branch (229:23): [True: 20.5k, False: 796k]
  ------------------
  230|  20.5k|                    next++;
  231|       |
  232|       |                /* If Left, top-left are available*/
  233|   796k|                if(next <= 2)
  ------------------
  |  Branch (233:20): [True: 785k, False: 10.2k]
  ------------------
  234|   785k|                {
  235|   785k|                    UWORD16 *pu2_dst;
  236|   785k|                    idx = (nt * next);
  237|   785k|                    pu2_dst = (UWORD16 *)&pu1_dst[2 * idx];
  238|   785k|                    ihevc_memset_16bit((UWORD16 *)pu1_dst, pu2_dst[0], idx);
  239|   785k|                }
  240|  10.2k|                else /* If top, top-right are available */
  241|  10.2k|                {
  242|  10.2k|                    UWORD16 *pu2_dst;
  243|       |                    /* Idx is changed to copy 1 pixel value for top-left ,if top-left is not available*/
  244|  10.2k|                    idx = (nt * (next - 1)) + 1;
  245|  10.2k|                    pu2_dst = (UWORD16 *)&pu1_dst[2 * idx];
  246|  10.2k|                    ihevc_memset_16bit((UWORD16 *)pu1_dst, pu2_dst[0], idx);
  247|  10.2k|                }
  248|   796k|            }
  249|       |
  250|  1.16M|            if(left == 0)
  ------------------
  |  Branch (250:16): [True: 10.3k, False: 1.15M]
  ------------------
  251|  10.3k|            {
  252|  10.3k|                UWORD16 *pu2_dst = (UWORD16 *)&pu1_dst[(2 * nt) - 2];
  253|  10.3k|                ihevc_memset_16bit((UWORD16 *)&pu1_dst[(2 * nt)], pu2_dst[0], nt);
  254|       |
  255|       |
  256|  10.3k|            }
  257|  1.16M|            if(tp_left == 0)
  ------------------
  |  Branch (257:16): [True: 42.5k, False: 1.11M]
  ------------------
  258|  42.5k|            {
  259|  42.5k|                pu1_dst[4 * nt] = pu1_dst[(4 * nt) - 2];
  260|  42.5k|                pu1_dst[(4 * nt) + 1] = pu1_dst[(4 * nt) - 1];
  261|  42.5k|            }
  262|  1.16M|            if(top == 0)
  ------------------
  |  Branch (262:16): [True: 32.4k, False: 1.12M]
  ------------------
  263|  32.4k|            {
  264|  32.4k|                UWORD16 *pu2_dst = (UWORD16 *)&pu1_dst[(4 * nt)];
  265|  32.4k|                ihevc_memset_16bit((UWORD16 *)&pu1_dst[(4 * nt) + 2], pu2_dst[0], nt);
  266|       |
  267|       |
  268|  32.4k|            }
  269|  1.16M|            if(tp_right == 0)
  ------------------
  |  Branch (269:16): [True: 420k, False: 741k]
  ------------------
  270|   420k|            {
  271|   420k|                UWORD16 *pu2_dst = (UWORD16 *)&pu1_dst[(6 * nt)];
  272|   420k|                ihevc_memset_16bit((UWORD16 *)&pu1_dst[(6 * nt) + 2], pu2_dst[0], nt);
  273|       |
  274|       |
  275|   420k|            }
  276|  1.16M|        }
  277|  2.25M|        else if(nt == 8)
  ------------------
  |  Branch (277:17): [True: 1.39M, False: 864k]
  ------------------
  278|  1.39M|        {
  279|  1.39M|            WORD32 nbr_flags_temp = 0;
  280|  1.39M|            nbr_flags_temp = ((nbr_flags & 0xC) >> 2) + ((nbr_flags & 0xC0) >> 4)
  281|  1.39M|                            + ((nbr_flags & 0x300) >> 4)
  282|  1.39M|                            + ((nbr_flags & 0x3000) >> 6)
  283|  1.39M|                            + ((nbr_flags & 0x10000) >> 8);
  284|       |
  285|       |            /* compute trailing zeors based on nbr_flag for substitution process of below left see section .*/
  286|       |            /* as each bit in nbr flags corresponds to 8 pels for bot_left, left, top and topright but 1 pel for topleft */
  287|  1.39M|            {
  288|  1.39M|                nbr_id_from_bl = look_up_trailing_zeros(nbr_flags_temp & 0XF) * 4; /* for bottom left and left */
  ------------------
  |  |   43|  1.39M|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 3.49k, False: 1.38M]
  |  |  ------------------
  ------------------
  289|  1.39M|                if(nbr_id_from_bl == 32)
  ------------------
  |  Branch (289:20): [True: 3.49k, False: 1.38M]
  ------------------
  290|  3.49k|                    nbr_id_from_bl = 16;
  291|  1.39M|                if(nbr_id_from_bl == 16)
  ------------------
  |  Branch (291:20): [True: 3.49k, False: 1.38M]
  ------------------
  292|  3.49k|                {
  293|       |                    /* for top left : 1 pel per nbr bit */
  294|  3.49k|                    if(!((nbr_flags_temp >> 8) & 0x1))
  ------------------
  |  Branch (294:24): [True: 3.49k, False: 2]
  ------------------
  295|  3.49k|                    {
  296|  3.49k|                        nbr_id_from_bl++;
  297|  3.49k|                        nbr_id_from_bl += look_up_trailing_zeros((nbr_flags_temp >> 4) & 0xF) * 4; /* top and top right;  8 pels per nbr bit */
  ------------------
  |  |   43|  3.49k|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 0, False: 3.49k]
  |  |  ------------------
  ------------------
  298|       |
  299|  3.49k|                    }
  300|  3.49k|                }
  301|       |                /* Reverse Substitution Process*/
  302|  1.39M|                if(nbr_id_from_bl)
  ------------------
  |  Branch (302:20): [True: 959k, False: 431k]
  ------------------
  303|   959k|                {
  304|       |                    /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */
  305|   959k|                    pu1_ref_u = pu1_dst[2 * nbr_id_from_bl];
  306|   959k|                    pu1_ref_v = pu1_dst[(2 * nbr_id_from_bl) + 1];
  307|  8.66M|                    for(i = 2 * (nbr_id_from_bl - 1); i >= 0; i -= 2)
  ------------------
  |  Branch (307:55): [True: 7.70M, False: 959k]
  ------------------
  308|  7.70M|                    {
  309|  7.70M|                        pu1_dst[i] = pu1_ref_u;
  310|  7.70M|                        pu1_dst[i + 1] = pu1_ref_v;
  311|  7.70M|                    }
  312|   959k|                }
  313|  1.39M|            }
  314|       |
  315|       |            /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */
  316|  11.9M|            while(nbr_id_from_bl < ((T8C_4NT)+1))
  ------------------
  |  |   83|  11.9M|#define T8C_4NT 32
  ------------------
  |  Branch (316:19): [True: 10.5M, False: 1.39M]
  ------------------
  317|  10.5M|            {
  318|       |                /* To Obtain the next unavailable idx flag after reverse neighbor substitution  */
  319|       |                /* Divide by 8 to obtain the original index */
  320|  10.5M|                frwd_nbr_flag = (nbr_id_from_bl >> 2); /*+ (nbr_id_from_bl & 0x1);*/
  321|       |
  322|       |                /* The Top-left flag is at the last bit location of nbr_flags*/
  323|  10.5M|                if(nbr_id_from_bl == (T8C_4NT / 2))
  ------------------
  |  |   83|  10.5M|#define T8C_4NT 32
  ------------------
  |  Branch (323:20): [True: 1.38M, False: 9.18M]
  ------------------
  324|  1.38M|                {
  325|  1.38M|                    get_bits = GET_BIT(nbr_flags_temp, 8);
  ------------------
  |  |   45|  1.38M|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  326|       |
  327|       |                    /* only pel substitution for TL */
  328|  1.38M|                    if(!get_bits)
  ------------------
  |  Branch (328:24): [True: 64.4k, False: 1.32M]
  ------------------
  329|  64.4k|                    {
  330|  64.4k|                        pu1_dst[2 * nbr_id_from_bl] = pu1_dst[(2 * nbr_id_from_bl) - 2];
  331|  64.4k|                        pu1_dst[(2 * nbr_id_from_bl) + 1] = pu1_dst[(2 * nbr_id_from_bl) - 1];
  332|  64.4k|                    }
  333|  1.38M|                }
  334|  9.18M|                else
  335|  9.18M|                {
  336|  9.18M|                    get_bits = GET_BIT(nbr_flags_temp, frwd_nbr_flag);
  ------------------
  |  |   45|  9.18M|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  337|  9.18M|                    if(!get_bits)
  ------------------
  |  Branch (337:24): [True: 1.16M, False: 8.01M]
  ------------------
  338|  1.16M|                    {
  339|  1.16M|                        UWORD16 *pu2_dst;
  340|       |                        /* 8 pel substitution (other than TL) */
  341|  1.16M|                        pu2_dst = (UWORD16 *)&pu1_dst[(2 * nbr_id_from_bl) - 2];
  342|  1.16M|                        ihevc_memset_16bit((UWORD16 *)(pu1_dst + (2 * nbr_id_from_bl)), pu2_dst[0], 4);
  343|  1.16M|                    }
  344|       |
  345|  9.18M|                }
  346|  10.5M|                nbr_id_from_bl += (nbr_id_from_bl == (T8C_4NT / 2)) ? 1 : 4;
  ------------------
  |  |   83|  10.5M|#define T8C_4NT 32
  ------------------
  |  Branch (346:35): [True: 1.38M, False: 9.18M]
  ------------------
  347|  10.5M|            }
  348|       |
  349|  1.39M|        }
  350|   864k|        else if(nt == 16)
  ------------------
  |  Branch (350:17): [True: 872k, False: 18.4E]
  ------------------
  351|   872k|        {
  352|       |            /* compute trailing ones based on mbr_flag for substitution process of below left see section .*/
  353|       |            /* as each bit in nbr flags corresponds to 4 pels for bot_left, left, top and topright but 1 pel for topleft */
  354|   872k|            {
  355|   872k|                nbr_id_from_bl = look_up_trailing_zeros((nbr_flags & 0XFF)) * 4; /* for bottom left and left */
  ------------------
  |  |   43|   872k|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 13.3k, False: 858k]
  |  |  ------------------
  ------------------
  356|       |
  357|   872k|                if(nbr_id_from_bl == 32)
  ------------------
  |  Branch (357:20): [True: 13.3k, False: 858k]
  ------------------
  358|  13.3k|                {
  359|       |                    /* for top left : 1 pel per nbr bit */
  360|  13.3k|                    if(!((nbr_flags >> 16) & 0x1))
  ------------------
  |  Branch (360:24): [True: 13.3k, False: 1]
  ------------------
  361|  13.3k|                    {
  362|       |                        /* top left not available */
  363|  13.3k|                        nbr_id_from_bl++;
  364|       |                        /* top and top right;  4 pels per nbr bit */
  365|  13.3k|                        nbr_id_from_bl += look_up_trailing_zeros((nbr_flags >> 8) & 0xFF) * 4;
  ------------------
  |  |   43|  13.3k|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 0, False: 13.3k]
  |  |  ------------------
  ------------------
  366|  13.3k|                    }
  367|  13.3k|                }
  368|       |                /* Reverse Substitution Process*/
  369|   872k|                if(nbr_id_from_bl)
  ------------------
  |  Branch (369:20): [True: 662k, False: 210k]
  ------------------
  370|   662k|                {
  371|       |                    /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */
  372|   662k|                    pu1_ref_u = pu1_dst[2 * nbr_id_from_bl];
  373|   662k|                    pu1_ref_v = pu1_dst[2 * nbr_id_from_bl + 1];
  374|  11.4M|                    for(i = (2 * (nbr_id_from_bl - 1)); i >= 0; i -= 2)
  ------------------
  |  Branch (374:57): [True: 10.8M, False: 662k]
  ------------------
  375|  10.8M|                    {
  376|  10.8M|                        pu1_dst[i] = pu1_ref_u;
  377|  10.8M|                        pu1_dst[i + 1] = pu1_ref_v;
  378|  10.8M|                    }
  379|   662k|                }
  380|   872k|            }
  381|       |
  382|       |            /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */
  383|  12.9M|            while(nbr_id_from_bl < ((T16C_4NT)+1))
  ------------------
  |  |   82|  12.9M|#define T16C_4NT 64
  ------------------
  |  Branch (383:19): [True: 12.1M, False: 872k]
  ------------------
  384|  12.1M|            {
  385|       |                /* To Obtain the next unavailable idx flag after reverse neighbor substitution  */
  386|       |                /* Devide by 4 to obtain the original index */
  387|  12.1M|                frwd_nbr_flag = (nbr_id_from_bl >> 2); /*+ (nbr_id_from_bl & 0x1);*/
  388|       |
  389|       |                /* The Top-left flag is at the last bit location of nbr_flags*/
  390|  12.1M|                if(nbr_id_from_bl == (T16C_4NT / 2))
  ------------------
  |  |   82|  12.1M|#define T16C_4NT 64
  ------------------
  |  Branch (390:20): [True: 862k, False: 11.2M]
  ------------------
  391|   862k|                {
  392|   862k|                    get_bits = GET_BIT(nbr_flags, 16);
  ------------------
  |  |   45|   862k|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  393|       |                    /* only pel substitution for TL */
  394|   862k|                    if(!get_bits)
  ------------------
  |  Branch (394:24): [True: 112k, False: 749k]
  ------------------
  395|   112k|                    {
  396|   112k|                        pu1_dst[2 * nbr_id_from_bl] = pu1_dst[(2 * nbr_id_from_bl) - 2];
  397|   112k|                        pu1_dst[(2 * nbr_id_from_bl) + 1] = pu1_dst[(2 * nbr_id_from_bl) - 1];
  398|   112k|                    }
  399|   862k|                }
  400|  11.2M|                else
  401|  11.2M|                {
  402|  11.2M|                    get_bits = GET_BIT(nbr_flags, frwd_nbr_flag);
  ------------------
  |  |   45|  11.2M|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  403|  11.2M|                    if(!get_bits)
  ------------------
  |  Branch (403:24): [True: 1.75M, False: 9.48M]
  ------------------
  404|  1.75M|                    {
  405|  1.75M|                        UWORD16 *pu2_dst;
  406|       |                        /* 4 pel substitution (other than TL) */
  407|  1.75M|                        pu2_dst = (UWORD16 *)&pu1_dst[(2 * nbr_id_from_bl) - 2];
  408|  1.75M|                        ihevc_memset_16bit((UWORD16 *)(pu1_dst + (2 * nbr_id_from_bl)), pu2_dst[0], 4);
  409|  1.75M|                    }
  410|       |
  411|  11.2M|                }
  412|  12.1M|                nbr_id_from_bl += (nbr_id_from_bl == (T16C_4NT / 2)) ? 1 : 4;
  ------------------
  |  |   82|  12.1M|#define T16C_4NT 64
  ------------------
  |  Branch (412:35): [True: 858k, False: 11.2M]
  ------------------
  413|  12.1M|            }
  414|   872k|        }
  415|  3.41M|    }
  416|  3.42M|}
ihevc_intra_pred_chroma_planar:
  463|   857k|{
  464|       |
  465|   857k|    WORD32 row, col;
  466|   857k|    WORD32 log2nt = 5;
  467|   857k|    WORD32 two_nt, three_nt;
  468|   857k|    UNUSED(src_strd);
  ------------------
  |  |   38|   857k|#define UNUSED(x) ((void)(x))
  ------------------
  469|   857k|    UNUSED(mode);
  ------------------
  |  |   38|   857k|#define UNUSED(x) ((void)(x))
  ------------------
  470|   857k|    switch(nt)
  471|   857k|    {
  472|   257k|        case 16:
  ------------------
  |  Branch (472:9): [True: 257k, False: 600k]
  ------------------
  473|   257k|            log2nt = 4;
  474|   257k|            break;
  475|   403k|        case 8:
  ------------------
  |  Branch (475:9): [True: 403k, False: 454k]
  ------------------
  476|   403k|            log2nt = 3;
  477|   403k|            break;
  478|   198k|        case 4:
  ------------------
  |  Branch (478:9): [True: 198k, False: 659k]
  ------------------
  479|   198k|            log2nt = 2;
  480|   198k|            break;
  481|      0|        default:
  ------------------
  |  Branch (481:9): [True: 0, False: 857k]
  ------------------
  482|      0|            break;
  483|   857k|    }
  484|   857k|    two_nt = 2 * nt;
  485|   857k|    three_nt = 3 * nt;
  486|       |    /* Planar filtering */
  487|  8.83M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (487:18): [True: 7.97M, False: 857k]
  ------------------
  488|  7.97M|    {
  489|   100M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (489:22): [True: 92.6M, False: 7.97M]
  ------------------
  490|  92.6M|        {
  491|  92.6M|            pu1_dst[row * dst_strd + col] = ((nt - 1 - col / 2)
  492|  92.6M|                            * pu1_ref[2 * (two_nt - 1 - row)]
  493|  92.6M|                            + (col / 2 + 1) * pu1_ref[2 * (three_nt + 1)]
  494|  92.6M|                            + (nt - 1 - row) * pu1_ref[2 * (two_nt + 1) + col]
  495|  92.6M|                            + (row + 1) * pu1_ref[2 * (nt - 1)] + nt) >> (log2nt + 1);
  496|       |
  497|  92.6M|            pu1_dst[row * dst_strd + col + 1] = ((nt - 1 - col / 2)
  498|  92.6M|                            * pu1_ref[2 * (two_nt - 1 - row) + 1]
  499|  92.6M|                            + (col / 2 + 1) * pu1_ref[2 * (three_nt + 1) + 1]
  500|  92.6M|                            + (nt - 1 - row) * pu1_ref[2 * (two_nt + 1) + col + 1]
  501|  92.6M|                            + (row + 1) * pu1_ref[2 * (nt - 1) + 1] + nt) >> (log2nt + 1);
  502|  92.6M|        }
  503|  7.97M|    }
  504|   857k|}
ihevc_intra_pred_chroma_dc:
  551|   412k|{
  552|       |
  553|   412k|    WORD32 acc_dc_u, acc_dc_v;
  554|   412k|    WORD32 dc_val_u, dc_val_v;
  555|   412k|    WORD32 i;
  556|   412k|    WORD32 row, col;
  557|   412k|    WORD32 log2nt = 5;
  558|   412k|    UNUSED(mode);
  ------------------
  |  |   38|   412k|#define UNUSED(x) ((void)(x))
  ------------------
  559|   412k|    UNUSED(src_strd);
  ------------------
  |  |   38|   412k|#define UNUSED(x) ((void)(x))
  ------------------
  560|   412k|    switch(nt)
  561|   412k|    {
  562|      0|        case 32:
  ------------------
  |  Branch (562:9): [True: 0, False: 412k]
  ------------------
  563|      0|            log2nt = 5;
  564|      0|            break;
  565|   109k|        case 16:
  ------------------
  |  Branch (565:9): [True: 109k, False: 303k]
  ------------------
  566|   109k|            log2nt = 4;
  567|   109k|            break;
  568|   170k|        case 8:
  ------------------
  |  Branch (568:9): [True: 170k, False: 241k]
  ------------------
  569|   170k|            log2nt = 3;
  570|   170k|            break;
  571|   133k|        case 4:
  ------------------
  |  Branch (571:9): [True: 133k, False: 279k]
  ------------------
  572|   133k|            log2nt = 2;
  573|   133k|            break;
  574|      0|        default:
  ------------------
  |  Branch (574:9): [True: 0, False: 412k]
  ------------------
  575|      0|            break;
  576|   412k|    }
  577|       |
  578|       |
  579|   412k|    acc_dc_u = 0;
  580|   412k|    acc_dc_v = 0;
  581|       |    /* Calculate DC value for the transform block */
  582|  4.06M|    for(i = (2 * nt); i < (4 * nt); i += 2)
  ------------------
  |  Branch (582:23): [True: 3.64M, False: 412k]
  ------------------
  583|  3.64M|    {
  584|  3.64M|        acc_dc_u += pu1_ref[i];
  585|  3.64M|        acc_dc_v += pu1_ref[i + 1];
  586|  3.64M|    }
  587|  4.06M|    for(i = ((4 * nt) + 2); i < ((6 * nt) + 2); i += 2)
  ------------------
  |  Branch (587:29): [True: 3.64M, False: 412k]
  ------------------
  588|  3.64M|    {
  589|  3.64M|        acc_dc_u += pu1_ref[i];
  590|  3.64M|        acc_dc_v += pu1_ref[i + 1];
  591|  3.64M|    }
  592|       |
  593|       |
  594|   412k|    dc_val_u = (acc_dc_u + nt) >> (log2nt + 1);
  595|   412k|    dc_val_v = (acc_dc_v + nt) >> (log2nt + 1);
  596|       |
  597|       |
  598|       |    /* Fill the remaining rows with DC value*/
  599|  4.05M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (599:18): [True: 3.64M, False: 412k]
  ------------------
  600|  3.64M|    {
  601|  44.6M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (601:22): [True: 40.9M, False: 3.64M]
  ------------------
  602|  40.9M|        {
  603|  40.9M|            pu1_dst[(row * dst_strd) + col] = dc_val_u;
  604|  40.9M|            pu1_dst[(row * dst_strd) + col + 1] = dc_val_v;
  605|  40.9M|        }
  606|  3.64M|    }
  607|       |
  608|   412k|}
ihevc_intra_pred_chroma_horz:
  655|   122k|{
  656|       |
  657|   122k|    WORD32 row, col;
  658|   122k|    UNUSED(mode);
  ------------------
  |  |   38|   122k|#define UNUSED(x) ((void)(x))
  ------------------
  659|   122k|    UNUSED(src_strd);
  ------------------
  |  |   38|   122k|#define UNUSED(x) ((void)(x))
  ------------------
  660|       |    /* Replication to next rows*/
  661|  1.10M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (661:18): [True: 982k, False: 122k]
  ------------------
  662|   982k|    {
  663|  11.5M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (663:22): [True: 10.5M, False: 982k]
  ------------------
  664|  10.5M|        {
  665|  10.5M|            pu1_dst[(row * dst_strd) + col] = pu1_ref[(4 * nt) - 2 - 2 * row];
  666|  10.5M|            pu1_dst[(row * dst_strd) + col + 1] = pu1_ref[(4 * nt) - 1 - 2 * row];
  667|  10.5M|        }
  668|   982k|    }
  669|   122k|}
ihevc_intra_pred_chroma_ver:
  717|   409k|{
  718|   409k|    WORD32 row, col;
  719|   409k|    UNUSED(mode);
  ------------------
  |  |   38|   409k|#define UNUSED(x) ((void)(x))
  ------------------
  720|   409k|    UNUSED(src_strd);
  ------------------
  |  |   38|   409k|#define UNUSED(x) ((void)(x))
  ------------------
  721|       |    /* Replication to next columns*/
  722|  4.28M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (722:18): [True: 3.87M, False: 409k]
  ------------------
  723|  3.87M|    {
  724|  50.3M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (724:22): [True: 46.4M, False: 3.87M]
  ------------------
  725|  46.4M|        {
  726|  46.4M|            pu1_dst[(row * dst_strd) + col] = pu1_ref[(4 * nt) + 2 + col];
  727|  46.4M|            pu1_dst[(row * dst_strd) + col + 1] = pu1_ref[(4 * nt) + 3 + col];
  728|  46.4M|        }
  729|  3.87M|    }
  730|   409k|}
ihevc_intra_pred_chroma_mode2:
  777|   174k|{
  778|   174k|    WORD32 row, col;
  779|       |
  780|   174k|    WORD32 intra_pred_ang = 32;
  781|   174k|    WORD32 idx_u, idx_v;
  782|   174k|    UNUSED(src_strd);
  ------------------
  |  |   38|   174k|#define UNUSED(x) ((void)(x))
  ------------------
  783|   174k|    UNUSED(mode);
  ------------------
  |  |   38|   174k|#define UNUSED(x) ((void)(x))
  ------------------
  784|       |    /* For the angle 45, replication is done from the corresponding angle */
  785|       |    /* intra_pred_ang = tan(angle) in q5 format */
  786|  1.63M|    for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (786:18): [True: 1.46M, False: 174k]
  ------------------
  787|  1.46M|    {
  788|  1.46M|        idx_u = ((col + 1) * intra_pred_ang) >> 5; /* Use idx++ */
  789|  1.46M|        idx_v = (((col + 1) + 1) * intra_pred_ang) >> 5; /* Use idx++ */
  790|  16.7M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (790:22): [True: 15.2M, False: 1.46M]
  ------------------
  791|  15.2M|        {
  792|  15.2M|            pu1_dst[col + (row * dst_strd)] = pu1_ref[(4 * nt) - 2 * row - idx_u - 3];
  793|  15.2M|            pu1_dst[(col + 1) + (row * dst_strd)] = pu1_ref[(4 * nt) - 2 * row - idx_v - 1];
  794|  15.2M|        }
  795|  1.46M|    }
  796|       |
  797|   174k|}
ihevc_intra_pred_chroma_mode_18_34:
  844|   130k|{
  845|   130k|    WORD32 row, col;
  846|   130k|    WORD32 intra_pred_ang;
  847|   130k|    WORD32 idx = 0;
  848|   130k|    UNUSED(src_strd);
  ------------------
  |  |   38|   130k|#define UNUSED(x) ((void)(x))
  ------------------
  849|   130k|    intra_pred_ang = 32; /*Default value*/
  850|       |    /* For mode 18, angle is -45degree */
  851|   130k|    if(mode == 18)
  ------------------
  |  Branch (851:8): [True: 26.4k, False: 103k]
  ------------------
  852|  26.4k|        intra_pred_ang = -32;
  853|       |    /* For mode 34, angle is 45degree */
  854|   103k|    else if(mode == 34)
  ------------------
  |  Branch (854:13): [True: 103k, False: 18.4E]
  ------------------
  855|   103k|        intra_pred_ang = 32;
  856|       |    /* For the angle 45 and -45, replication is done from the corresponding angle */
  857|       |    /* No interpolation is done for 45 degree*/
  858|  1.13M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (858:18): [True: 1.00M, False: 130k]
  ------------------
  859|  1.00M|    {
  860|  1.00M|        idx = ((row + 1) * intra_pred_ang) >> 5;
  861|       |
  862|  11.3M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (862:22): [True: 10.3M, False: 1.00M]
  ------------------
  863|  10.3M|        {
  864|  10.3M|            pu1_dst[col + (row * dst_strd)] = pu1_ref[(4 * nt) + col + 2 * idx + 2];
  865|  10.3M|            pu1_dst[(col + 1) + (row * dst_strd)] = pu1_ref[(4 * nt) + (col + 1) + 2 * idx + 2];
  866|  10.3M|        }
  867|       |
  868|  1.00M|    }
  869|       |
  870|   130k|}
ihevc_intra_pred_chroma_mode_3_to_9:
  917|   271k|{
  918|   271k|    WORD32 row, col;
  919|       |
  920|   271k|    WORD32 intra_pred_ang;
  921|   271k|    WORD32 idx_u, ref_main_idx_u;
  922|   271k|    WORD32 idx_v, ref_main_idx_v;
  923|   271k|    WORD32 pos_u, fract_u;
  924|   271k|    WORD32 pos_v, fract_v;
  925|   271k|    UNUSED(src_strd);
  ------------------
  |  |   38|   271k|#define UNUSED(x) ((void)(x))
  ------------------
  926|       |    /* Intra Pred Angle according to the mode */
  927|   271k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
  928|       |
  929|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
  930|       |    /* samples dependent on distance to obtain destination sample */
  931|       |
  932|  2.56M|    for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (932:18): [True: 2.29M, False: 271k]
  ------------------
  933|  2.29M|    {
  934|  2.29M|        pos_u = ((col / 2 + 1) * intra_pred_ang);
  935|  2.29M|        pos_v = ((col / 2 + 1) * intra_pred_ang);
  936|       |
  937|  2.29M|        idx_u = pos_u >> 5;
  938|  2.29M|        fract_u = pos_u & (31);
  939|       |
  940|  2.29M|        idx_v = pos_v >> 5;
  941|  2.29M|        fract_v = pos_v & (31);
  942|       |        // Do linear filtering
  943|  27.6M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (943:22): [True: 25.3M, False: 2.29M]
  ------------------
  944|  25.3M|        {
  945|  25.3M|            ref_main_idx_u = (4 * nt) - 2 * row - 2 * idx_u - 2;
  946|  25.3M|            ref_main_idx_v = (4 * nt) - 2 * row - 2 * idx_v - 1;
  947|       |
  948|  25.3M|            pu1_dst[col + (row * dst_strd)] = (((32 - fract_u)
  949|  25.3M|                            * pu1_ref[ref_main_idx_u]
  950|  25.3M|                            + fract_u * pu1_ref[ref_main_idx_u - 2] + 16) >> 5);
  951|       |
  952|  25.3M|            pu1_dst[(col + 1) + (row * dst_strd)] = (((32 - fract_v)
  953|  25.3M|                            * pu1_ref[ref_main_idx_v]
  954|  25.3M|                            + fract_v * pu1_ref[ref_main_idx_v - 2] + 16) >> 5);
  955|  25.3M|        }
  956|       |
  957|  2.29M|    }
  958|       |
  959|   271k|}
ihevc_intra_pred_chroma_mode_11_to_17:
 1006|   216k|{
 1007|       |    /* This function and ihevc_intra_pred_CHROMA_mode_19_to_25 are same except*/
 1008|       |    /* for ref main & side samples assignment,can be combined for */
 1009|       |    /* optimzation*/
 1010|       |
 1011|   216k|    WORD32 row, col, k;
 1012|   216k|    WORD32 intra_pred_ang, inv_ang, inv_ang_sum;
 1013|   216k|    WORD32 idx_u, idx_v, ref_main_idx_u, ref_main_idx_v, ref_idx;
 1014|   216k|    WORD32 pos_u, pos_v, fract_u, fract_v;
 1015|       |
 1016|   216k|    UWORD8 ref_temp[2 * MAX_CU_SIZE + 2];
 1017|   216k|    UWORD8 *ref_main;
 1018|   216k|    UNUSED(src_strd);
  ------------------
  |  |   38|   216k|#define UNUSED(x) ((void)(x))
  ------------------
 1019|   216k|    inv_ang_sum = 128;
 1020|       |
 1021|   216k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1022|       |
 1023|   216k|    inv_ang = gai4_ihevc_inv_ang_table[mode - 11];
 1024|       |    /* Intermediate reference samples for negative angle modes */
 1025|       |    /* This have to be removed during optimization*/
 1026|       |
 1027|       |    /* For horizontal modes, (ref main = ref left) (ref side = ref above) */
 1028|       |
 1029|       |
 1030|   216k|    ref_main = ref_temp + 2 * nt;
 1031|  2.33M|    for(k = 0; k < (2 * (nt + 1)); k += 2)
  ------------------
  |  Branch (1031:16): [True: 2.11M, False: 216k]
  ------------------
 1032|  2.11M|    {
 1033|  2.11M|        ref_temp[k + (2 * (nt - 1))] = pu1_ref[(4 * nt) - k];
 1034|  2.11M|        ref_temp[k + 1 + (2 * (nt - 1))] = pu1_ref[(4 * nt) - k + 1];
 1035|  2.11M|    }
 1036|       |
 1037|   216k|    ref_main = ref_temp + (2 * (nt - 1));
 1038|   216k|    ref_idx = (nt * intra_pred_ang) >> 5;
 1039|       |
 1040|       |    /* SIMD Optimization can be done using look-up table for the loop */
 1041|       |    /* For negative angled derive the main reference samples from side */
 1042|       |    /*  reference samples refer to section 8.4.4.2.6 */
 1043|   935k|    for(k = -2; k > (2 * ref_idx); k -= 2)
  ------------------
  |  Branch (1043:17): [True: 718k, False: 216k]
  ------------------
 1044|   718k|    {
 1045|   718k|        inv_ang_sum += inv_ang;
 1046|   718k|        ref_main[k] = pu1_ref[(4 * nt) + ((inv_ang_sum >> 8) << 1)];
 1047|   718k|        ref_main[k + 1] = pu1_ref[((4 * nt) + 1) + ((inv_ang_sum >> 8) << 1)];
 1048|   718k|    }
 1049|       |
 1050|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1051|       |    /* samples dependent on distance to obtain destination sample */
 1052|  2.11M|    for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (1052:18): [True: 1.89M, False: 216k]
  ------------------
 1053|  1.89M|    {
 1054|  1.89M|        pos_u = ((col / 2 + 1) * intra_pred_ang);
 1055|  1.89M|        pos_v = ((col / 2 + 1) * intra_pred_ang);
 1056|  1.89M|        idx_u = pos_u >> 5;
 1057|  1.89M|        idx_v = pos_v >> 5;
 1058|  1.89M|        fract_u = pos_u & (31);
 1059|  1.89M|        fract_v = pos_v & (31);
 1060|       |
 1061|       |        // Do linear filtering
 1062|  23.7M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1062:22): [True: 21.8M, False: 1.89M]
  ------------------
 1063|  21.8M|        {
 1064|  21.8M|            ref_main_idx_u = 2 * (row + idx_u + 1);
 1065|  21.8M|            ref_main_idx_v = 2 * (row + idx_v + 1) + 1;
 1066|       |
 1067|  21.8M|            pu1_dst[col + (dst_strd * row)] = (UWORD8)(((32 - fract_u)
 1068|  21.8M|                            * ref_main[ref_main_idx_u]
 1069|  21.8M|                            + fract_u * ref_main[ref_main_idx_u + 2] + 16) >> 5);
 1070|  21.8M|            pu1_dst[(col + 1) + (dst_strd * row)] = (UWORD8)(((32 - fract_v)
 1071|  21.8M|                            * ref_main[ref_main_idx_v]
 1072|  21.8M|                            + fract_v * ref_main[ref_main_idx_v + 2] + 16) >> 5);
 1073|       |
 1074|  21.8M|        }
 1075|       |
 1076|  1.89M|    }
 1077|       |
 1078|   216k|}
ihevc_intra_pred_chroma_mode_19_to_25:
 1126|   210k|{
 1127|       |
 1128|   210k|    WORD32 row, col, k;
 1129|   210k|    WORD32 intra_pred_ang, idx;
 1130|   210k|    WORD32 inv_ang, inv_ang_sum, pos, fract;
 1131|   210k|    WORD32 ref_main_idx_u, ref_main_idx_v, ref_idx;
 1132|   210k|    UWORD8 ref_temp[(2 * MAX_CU_SIZE) + 2];
 1133|   210k|    UWORD8 *ref_main;
 1134|   210k|    UNUSED(src_strd);
  ------------------
  |  |   38|   210k|#define UNUSED(x) ((void)(x))
  ------------------
 1135|       |
 1136|       |
 1137|   210k|    intra_pred_ang = gai4_ihevc_ang_table_chroma[mode];
 1138|   210k|    inv_ang = gai4_ihevc_inv_ang_table_chroma[mode - 12];
 1139|       |
 1140|       |    /* Intermediate reference samples for negative angle modes */
 1141|       |    /* This have to be removed during optimization*/
 1142|       |    /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 1143|   210k|    ref_main = ref_temp + 2 * nt;
 1144|  2.04M|    for(k = 0; k < (2 * (nt + 1)); k += 2)
  ------------------
  |  Branch (1144:16): [True: 1.83M, False: 210k]
  ------------------
 1145|  1.83M|    {
 1146|  1.83M|        ref_temp[k + (2 * (nt - 1))] = pu1_ref[(4 * nt) + k];
 1147|  1.83M|        ref_temp[k + 1 + (2 * (nt - 1))] = pu1_ref[(4 * nt) + k + 1];
 1148|  1.83M|    }
 1149|       |
 1150|       |
 1151|   210k|    ref_idx = (nt * intra_pred_ang) >> 5;
 1152|   210k|    inv_ang_sum = 128;
 1153|   210k|    ref_main = ref_temp + (2 * (nt - 1));
 1154|       |    /* SIMD Optimization can be done using look-up table for the loop */
 1155|       |    /* For negative angled derive the main reference samples from side */
 1156|       |    /*  reference samples refer to section 8.4.4.2.6 */
 1157|   753k|    for(k = -2; k > (2 * ref_idx); k -= 2)
  ------------------
  |  Branch (1157:17): [True: 543k, False: 210k]
  ------------------
 1158|   543k|    {
 1159|   543k|        inv_ang_sum += inv_ang;
 1160|   543k|        ref_main[k] = pu1_ref[(4 * nt) - (inv_ang_sum >> 8) * 2];
 1161|   543k|        ref_main[k + 1] = pu1_ref[((4 * nt) + 1) - (inv_ang_sum >> 8) * 2];
 1162|   543k|    }
 1163|       |
 1164|  1.83M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1164:18): [True: 1.62M, False: 210k]
  ------------------
 1165|  1.62M|    {
 1166|  1.62M|        pos = ((row + 1) * intra_pred_ang);
 1167|  1.62M|        idx = pos >> 5;
 1168|  1.62M|        fract = pos & (31);
 1169|       |
 1170|       |        // Do linear filtering
 1171|  18.0M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (1171:22): [True: 16.3M, False: 1.62M]
  ------------------
 1172|  16.3M|        {
 1173|  16.3M|            ref_main_idx_u = col + 2 * idx + 2;
 1174|  16.3M|            ref_main_idx_v = (col + 1) + 2 * idx + 2;
 1175|  16.3M|            pu1_dst[(row * dst_strd) + col] = (UWORD8)(((32 - fract)
 1176|  16.3M|                            * ref_main[ref_main_idx_u]
 1177|  16.3M|                            + fract * ref_main[ref_main_idx_u + 2] + 16) >> 5);
 1178|  16.3M|            pu1_dst[(row * dst_strd) + (col + 1)] = (UWORD8)(((32 - fract)
 1179|  16.3M|                            * ref_main[ref_main_idx_v]
 1180|  16.3M|                            + fract * ref_main[ref_main_idx_v + 2] + 16) >> 5);
 1181|       |
 1182|  16.3M|        }
 1183|       |
 1184|  1.62M|    }
 1185|       |
 1186|   210k|}
ihevc_intra_pred_chroma_mode_27_to_33:
 1234|   245k|{
 1235|   245k|    WORD32 row, col;
 1236|   245k|    WORD32 pos, fract;
 1237|   245k|    WORD32 intra_pred_ang;
 1238|   245k|    WORD32 idx, ref_main_idx_u, ref_main_idx_v;
 1239|   245k|    UNUSED(src_strd);
  ------------------
  |  |   38|   245k|#define UNUSED(x) ((void)(x))
  ------------------
 1240|       |
 1241|       |
 1242|   245k|    intra_pred_ang = gai4_ihevc_ang_table_chroma[mode];
 1243|       |
 1244|  2.15M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1244:18): [True: 1.90M, False: 245k]
  ------------------
 1245|  1.90M|    {
 1246|  1.90M|        pos = ((row + 1) * intra_pred_ang);
 1247|  1.90M|        idx = pos >> 5;
 1248|  1.90M|        fract = pos & (31);
 1249|       |
 1250|       |
 1251|       |        // Do linear filtering
 1252|  20.9M|        for(col = 0; col < (2 * nt); col += 2)
  ------------------
  |  Branch (1252:22): [True: 19.0M, False: 1.90M]
  ------------------
 1253|  19.0M|        {
 1254|  19.0M|            ref_main_idx_u = (4 * nt) + col + 2 * idx + 2;
 1255|  19.0M|            ref_main_idx_v = (4 * nt) + (col + 1) + 2 * idx + 2;
 1256|  19.0M|            pu1_dst[col + (row * dst_strd)] = (((32 - fract)
 1257|  19.0M|                            * pu1_ref[ref_main_idx_u]
 1258|  19.0M|                            + fract * pu1_ref[ref_main_idx_u + 2] + 16) >> 5);
 1259|  19.0M|            pu1_dst[(col + 1) + (row * dst_strd)] = (((32 - fract)
 1260|  19.0M|                            * pu1_ref[ref_main_idx_v]
 1261|  19.0M|                            + fract * pu1_ref[ref_main_idx_v + 2] + 16) >> 5);
 1262|       |
 1263|  19.0M|        }
 1264|  1.90M|    }
 1265|       |
 1266|   245k|}

ihevc_chroma_itrans_recon_4x4:
  116|   133k|{
  117|   133k|    WORD32 j;
  118|   133k|    WORD32 e[2], o[2];
  119|   133k|    WORD32 add;
  120|   133k|    WORD32 shift;
  121|   133k|    WORD16 *pi2_tmp_orig;
  122|   133k|    WORD32 trans_size;
  123|   133k|    UNUSED(zero_rows);
  ------------------
  |  |   38|   133k|#define UNUSED(x) ((void)(x))
  ------------------
  124|   133k|    trans_size = TRANS_SIZE_4;
  ------------------
  |  |  419|   133k|#define TRANS_SIZE_4   4
  ------------------
  125|       |
  126|   133k|    pi2_tmp_orig = pi2_tmp;
  127|       |
  128|       |    /* Inverse Transform 1st stage */
  129|   133k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   133k|#define IT_SHIFT_STAGE_1 7
  ------------------
  130|   133k|    add = 1 << (shift - 1);
  131|       |
  132|   669k|    for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (132:16): [True: 535k, False: 133k]
  ------------------
  133|   535k|    {
  134|       |        /* Checking for Zero Cols */
  135|   535k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (135:12): [True: 298k, False: 237k]
  ------------------
  136|   298k|        {
  137|   298k|            memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  138|   298k|        }
  139|   237k|        else
  140|   237k|        {
  141|       |
  142|       |            /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  143|   237k|            o[0] = g_ai2_ihevc_trans_4[1][0] * pi2_src[src_strd]
  144|   237k|                            + g_ai2_ihevc_trans_4[3][0] * pi2_src[3 * src_strd];
  145|   237k|            o[1] = g_ai2_ihevc_trans_4[1][1] * pi2_src[src_strd]
  146|   237k|                            + g_ai2_ihevc_trans_4[3][1] * pi2_src[3 * src_strd];
  147|   237k|            e[0] = g_ai2_ihevc_trans_4[0][0] * pi2_src[0]
  148|   237k|                            + g_ai2_ihevc_trans_4[2][0] * pi2_src[2 * src_strd];
  149|   237k|            e[1] = g_ai2_ihevc_trans_4[0][1] * pi2_src[0]
  150|   237k|                            + g_ai2_ihevc_trans_4[2][1] * pi2_src[2 * src_strd];
  151|       |
  152|   237k|            pi2_tmp[0] =
  153|   237k|                            CLIP_S16(((e[0] + o[0] + add) >> shift));
  ------------------
  |  |   53|   237k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   237k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.15k, False: 236k]
  |  |  |  |  |  Branch (40:53): [True: 810, False: 235k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|   237k|            pi2_tmp[1] =
  155|   237k|                            CLIP_S16(((e[1] + o[1] + add) >> shift));
  ------------------
  |  |   53|   237k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   237k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 93, False: 237k]
  |  |  |  |  |  Branch (40:53): [True: 75, False: 237k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  156|   237k|            pi2_tmp[2] =
  157|   237k|                            CLIP_S16(((e[1] - o[1] + add) >> shift));
  ------------------
  |  |   53|   237k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   237k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 89, False: 237k]
  |  |  |  |  |  Branch (40:53): [True: 70, False: 237k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|   237k|            pi2_tmp[3] =
  159|   237k|                            CLIP_S16(((e[0] - o[0] + add) >> shift));
  ------------------
  |  |   53|   237k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   237k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 98, False: 237k]
  |  |  |  |  |  Branch (40:53): [True: 134, False: 237k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|       |
  161|   237k|        }
  162|   535k|        pi2_src++;
  163|   535k|        pi2_tmp += trans_size;
  164|   535k|        zero_cols = zero_cols >> 1;
  165|   535k|    }
  166|       |
  167|   133k|    pi2_tmp = pi2_tmp_orig;
  168|       |
  169|       |    /* Inverse Transform 2nd stage */
  170|   133k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   133k|#define IT_SHIFT_STAGE_2 12
  ------------------
  171|   133k|    add = 1 << (shift - 1);
  172|       |
  173|   669k|    for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (173:16): [True: 535k, False: 133k]
  ------------------
  174|   535k|    {
  175|   535k|        WORD32 itrans_out;
  176|       |        /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  177|   535k|        o[0] = g_ai2_ihevc_trans_4[1][0] * pi2_tmp[trans_size]
  178|   535k|                        + g_ai2_ihevc_trans_4[3][0] * pi2_tmp[3 * trans_size];
  179|   535k|        o[1] = g_ai2_ihevc_trans_4[1][1] * pi2_tmp[trans_size]
  180|   535k|                        + g_ai2_ihevc_trans_4[3][1] * pi2_tmp[3 * trans_size];
  181|   535k|        e[0] = g_ai2_ihevc_trans_4[0][0] * pi2_tmp[0]
  182|   535k|                        + g_ai2_ihevc_trans_4[2][0] * pi2_tmp[2 * trans_size];
  183|   535k|        e[1] = g_ai2_ihevc_trans_4[0][1] * pi2_tmp[0]
  184|   535k|                        + g_ai2_ihevc_trans_4[2][1] * pi2_tmp[2 * trans_size];
  185|       |
  186|   535k|        itrans_out =
  187|   535k|                        CLIP_S16(((e[0] + o[0] + add) >> shift));
  ------------------
  |  |   53|   535k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 535k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 535k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|   535k|        pu1_dst[0 * 2] = CLIP_U8((itrans_out + pu1_pred[0 * 2]));
  ------------------
  |  |   40|   535k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 74.9k, False: 460k]
  |  |  |  |  |  Branch (40:53): [True: 44.5k, False: 416k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|   535k|        itrans_out =
  190|   535k|                        CLIP_S16(((e[1] + o[1] + add) >> shift));
  ------------------
  |  |   53|   535k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 535k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 535k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|   535k|        pu1_dst[1 * 2] = CLIP_U8((itrans_out + pu1_pred[1 * 2]));
  ------------------
  |  |   40|   535k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 63.9k, False: 471k]
  |  |  |  |  |  Branch (40:53): [True: 36.0k, False: 435k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|   535k|        itrans_out =
  193|   535k|                        CLIP_S16(((e[1] - o[1] + add) >> shift));
  ------------------
  |  |   53|   535k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 535k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 535k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|   535k|        pu1_dst[2 * 2] = CLIP_U8((itrans_out + pu1_pred[2 * 2]));
  ------------------
  |  |   40|   535k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 61.4k, False: 474k]
  |  |  |  |  |  Branch (40:53): [True: 37.5k, False: 436k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|   535k|        itrans_out =
  196|   535k|                        CLIP_S16(((e[0] - o[0] + add) >> shift));
  ------------------
  |  |   53|   535k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 535k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 535k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|   535k|        pu1_dst[3 * 2] = CLIP_U8((itrans_out + pu1_pred[3 * 2]));
  ------------------
  |  |   40|   535k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   535k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 67.9k, False: 467k]
  |  |  |  |  |  Branch (40:53): [True: 46.8k, False: 420k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|       |
  199|   535k|        pi2_tmp++;
  200|   535k|        pu1_pred += pred_strd;
  201|   535k|        pu1_dst += dst_strd;
  202|       |
  203|   535k|    }
  204|   133k|}

ihevc_chroma_itrans_recon_16x16:
  117|  77.5k|{
  118|  77.5k|    WORD32 j, k;
  119|  77.5k|    WORD32 e[8], o[8];
  120|  77.5k|    WORD32 ee[4], eo[4];
  121|  77.5k|    WORD32 eee[2], eeo[2];
  122|  77.5k|    WORD32 add;
  123|  77.5k|    WORD32 shift;
  124|  77.5k|    WORD16 *pi2_tmp_orig;
  125|  77.5k|    WORD32 trans_size;
  126|  77.5k|    WORD32 row_limit_2nd_stage, zero_rows_2nd_stage = zero_cols;
  127|       |
  128|  77.5k|    trans_size = TRANS_SIZE_16;
  ------------------
  |  |  421|  77.5k|#define TRANS_SIZE_16 16
  ------------------
  129|  77.5k|    pi2_tmp_orig = pi2_tmp;
  130|       |
  131|  77.5k|    if((zero_cols & 0xFFF0) == 0xFFF0)
  ------------------
  |  Branch (131:8): [True: 44.9k, False: 32.6k]
  ------------------
  132|  44.9k|        row_limit_2nd_stage = 4;
  133|  32.6k|    else if((zero_cols & 0xFF00) == 0xFF00)
  ------------------
  |  Branch (133:13): [True: 21.9k, False: 10.6k]
  ------------------
  134|  21.9k|        row_limit_2nd_stage = 8;
  135|  10.6k|    else
  136|  10.6k|        row_limit_2nd_stage = TRANS_SIZE_16;
  ------------------
  |  |  421|  10.6k|#define TRANS_SIZE_16 16
  ------------------
  137|       |
  138|  77.5k|    if((zero_rows & 0xFFF0) == 0xFFF0) /* First 4 rows of input are non-zero */
  ------------------
  |  Branch (138:8): [True: 49.6k, False: 27.8k]
  ------------------
  139|  49.6k|    {
  140|       |        /************************************************************************************************/
  141|       |        /**********************************START - IT_RECON_16x16****************************************/
  142|       |        /************************************************************************************************/
  143|       |
  144|       |        /* Inverse Transform 1st stage */
  145|  49.6k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  49.6k|#define IT_SHIFT_STAGE_1 7
  ------------------
  146|  49.6k|        add = 1 << (shift - 1);
  147|       |
  148|   383k|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (148:20): [True: 333k, False: 49.6k]
  ------------------
  149|   333k|        {
  150|       |            /* Checking for Zero Cols */
  151|   333k|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (151:16): [True: 164k, False: 169k]
  ------------------
  152|   164k|            {
  153|   164k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  154|   164k|            }
  155|   169k|            else
  156|   169k|            {
  157|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  158|  1.52M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (158:28): [True: 1.35M, False: 169k]
  ------------------
  159|  1.35M|                {
  160|  1.35M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_src[src_strd]
  161|  1.35M|                                    + g_ai2_ihevc_trans_16[3][k]
  162|  1.35M|                                                    * pi2_src[3 * src_strd];
  163|  1.35M|                }
  164|   849k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (164:28): [True: 680k, False: 169k]
  ------------------
  165|   680k|                {
  166|   680k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_src[2 * src_strd];
  167|   680k|                }
  168|   169k|                eeo[0] = 0;
  169|   169k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_src[0];
  170|   169k|                eeo[1] = 0;
  171|   169k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_src[0];
  172|       |
  173|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  174|   509k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (174:28): [True: 339k, False: 169k]
  ------------------
  175|   339k|                {
  176|   339k|                    ee[k] = eee[k] + eeo[k];
  177|   339k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  178|   339k|                }
  179|   848k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (179:28): [True: 679k, False: 169k]
  ------------------
  180|   679k|                {
  181|   679k|                    e[k] = ee[k] + eo[k];
  182|   679k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  183|   679k|                }
  184|  1.52M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (184:28): [True: 1.35M, False: 169k]
  ------------------
  185|  1.35M|                {
  186|  1.35M|                    pi2_tmp[k] =
  187|  1.35M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  1.35M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.35M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 94, False: 1.35M]
  |  |  |  |  |  Branch (40:53): [True: 74, False: 1.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|  1.35M|                    pi2_tmp[k + 8] =
  189|  1.35M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  1.35M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.35M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 74, False: 1.35M]
  |  |  |  |  |  Branch (40:53): [True: 51, False: 1.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|  1.35M|                }
  191|   169k|            }
  192|   333k|            pi2_src++;
  193|   333k|            pi2_tmp += trans_size;
  194|   333k|            zero_cols = zero_cols >> 1;
  195|   333k|        }
  196|       |
  197|  49.6k|        pi2_tmp = pi2_tmp_orig;
  198|       |
  199|       |        /* Inverse Transform 2nd stage */
  200|  49.6k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  49.6k|#define IT_SHIFT_STAGE_2 12
  ------------------
  201|  49.6k|        add = 1 << (shift - 1);
  202|  49.6k|        if((zero_rows_2nd_stage & 0xFFF0) == 0xFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (202:12): [True: 27.1k, False: 22.5k]
  ------------------
  203|  27.1k|        {
  204|   460k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (204:24): [True: 433k, False: 27.1k]
  ------------------
  205|   433k|            {
  206|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  207|  3.89M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (207:28): [True: 3.46M, False: 433k]
  ------------------
  208|  3.46M|                {
  209|  3.46M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  210|  3.46M|                                    + g_ai2_ihevc_trans_16[3][k]
  211|  3.46M|                                                    * pi2_tmp[3 * trans_size];
  212|  3.46M|                }
  213|  2.16M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (213:28): [True: 1.73M, False: 433k]
  ------------------
  214|  1.73M|                {
  215|  1.73M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size];
  216|  1.73M|                }
  217|   433k|                eeo[0] = 0;
  218|   433k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  219|   433k|                eeo[1] = 0;
  220|   433k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  221|       |
  222|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  223|  1.29M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (223:28): [True: 866k, False: 433k]
  ------------------
  224|   866k|                {
  225|   866k|                    ee[k] = eee[k] + eeo[k];
  226|   866k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  227|   866k|                }
  228|  2.16M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (228:28): [True: 1.73M, False: 433k]
  ------------------
  229|  1.73M|                {
  230|  1.73M|                    e[k] = ee[k] + eo[k];
  231|  1.73M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  232|  1.73M|                }
  233|  3.89M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (233:28): [True: 3.46M, False: 433k]
  ------------------
  234|  3.46M|                {
  235|  3.46M|                    WORD32 itrans_out;
  236|  3.46M|                    itrans_out =
  237|  3.46M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  3.46M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 3.46M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 3.46M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|  3.46M|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|  3.46M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 64.7k, False: 3.40M]
  |  |  |  |  |  Branch (40:53): [True: 47.2k, False: 3.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|  3.46M|                    itrans_out =
  240|  3.46M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  3.46M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 3.46M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 3.46M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  241|  3.46M|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|  3.46M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 71.4k, False: 3.39M]
  |  |  |  |  |  Branch (40:53): [True: 45.4k, False: 3.34M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  242|  3.46M|                }
  243|   433k|                pi2_tmp++;
  244|   433k|                pu1_pred += pred_strd;
  245|   433k|                pu1_dst += dst_strd;
  246|   433k|            }
  247|  27.1k|        }
  248|  22.5k|        else if((zero_rows_2nd_stage & 0xFF00) == 0xFF00) /* First 8 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (248:17): [True: 16.7k, False: 5.76k]
  ------------------
  249|  16.7k|        {
  250|   276k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (250:24): [True: 259k, False: 16.7k]
  ------------------
  251|   259k|            {
  252|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  253|  2.33M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (253:28): [True: 2.07M, False: 259k]
  ------------------
  254|  2.07M|                {
  255|  2.07M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  256|  2.07M|                                    + g_ai2_ihevc_trans_16[3][k]
  257|  2.07M|                                                    * pi2_tmp[3 * trans_size]
  258|  2.07M|                                    + g_ai2_ihevc_trans_16[5][k]
  259|  2.07M|                                                    * pi2_tmp[5 * trans_size]
  260|  2.07M|                                    + g_ai2_ihevc_trans_16[7][k]
  261|  2.07M|                                                    * pi2_tmp[7 * trans_size];
  262|  2.07M|                }
  263|  1.30M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (263:28): [True: 1.04M, False: 259k]
  ------------------
  264|  1.04M|                {
  265|  1.04M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  266|  1.04M|                                    + g_ai2_ihevc_trans_16[6][k]
  267|  1.04M|                                                    * pi2_tmp[6 * trans_size];
  268|  1.04M|                }
  269|   259k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size];
  270|   259k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  271|   259k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size];
  272|   259k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  273|       |
  274|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  275|   781k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (275:28): [True: 522k, False: 259k]
  ------------------
  276|   522k|                {
  277|   522k|                    ee[k] = eee[k] + eeo[k];
  278|   522k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  279|   522k|                }
  280|  1.29M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (280:28): [True: 1.03M, False: 259k]
  ------------------
  281|  1.03M|                {
  282|  1.03M|                    e[k] = ee[k] + eo[k];
  283|  1.03M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  284|  1.03M|                }
  285|  2.33M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (285:28): [True: 2.07M, False: 259k]
  ------------------
  286|  2.07M|                {
  287|  2.07M|                    WORD32 itrans_out;
  288|  2.07M|                    itrans_out =
  289|  2.07M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  2.07M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  2.07M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 2.07M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 2.07M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  290|  2.07M|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|  2.07M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  2.07M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 133k, False: 1.93M]
  |  |  |  |  |  Branch (40:53): [True: 62.3k, False: 1.87M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  291|  2.07M|                    itrans_out =
  292|  2.07M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  2.07M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  2.07M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 2.07M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 2.07M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|  2.07M|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|  2.07M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  2.07M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 113k, False: 1.95M]
  |  |  |  |  |  Branch (40:53): [True: 54.0k, False: 1.90M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  294|  2.07M|                }
  295|   259k|                pi2_tmp++;
  296|   259k|                pu1_pred += pred_strd;
  297|   259k|                pu1_dst += dst_strd;
  298|   259k|            }
  299|  16.7k|        }
  300|  5.76k|        else /* All rows of output of 1st stage are non-zero */
  301|  5.76k|        {
  302|  96.9k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (302:24): [True: 91.2k, False: 5.76k]
  ------------------
  303|  91.2k|            {
  304|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  305|   810k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (305:28): [True: 719k, False: 91.2k]
  ------------------
  306|   719k|                {
  307|   719k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  308|   719k|                                    + g_ai2_ihevc_trans_16[3][k]
  309|   719k|                                                    * pi2_tmp[3 * trans_size]
  310|   719k|                                    + g_ai2_ihevc_trans_16[5][k]
  311|   719k|                                                    * pi2_tmp[5 * trans_size]
  312|   719k|                                    + g_ai2_ihevc_trans_16[7][k]
  313|   719k|                                                    * pi2_tmp[7 * trans_size]
  314|   719k|                                    + g_ai2_ihevc_trans_16[9][k]
  315|   719k|                                                    * pi2_tmp[9 * trans_size]
  316|   719k|                                    + g_ai2_ihevc_trans_16[11][k]
  317|   719k|                                                    * pi2_tmp[11 * trans_size]
  318|   719k|                                    + g_ai2_ihevc_trans_16[13][k]
  319|   719k|                                                    * pi2_tmp[13 * trans_size]
  320|   719k|                                    + g_ai2_ihevc_trans_16[15][k]
  321|   719k|                                                    * pi2_tmp[15 * trans_size];
  322|   719k|                }
  323|   456k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (323:28): [True: 365k, False: 91.2k]
  ------------------
  324|   365k|                {
  325|   365k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  326|   365k|                                    + g_ai2_ihevc_trans_16[6][k]
  327|   365k|                                                    * pi2_tmp[6 * trans_size]
  328|   365k|                                    + g_ai2_ihevc_trans_16[10][k]
  329|   365k|                                                    * pi2_tmp[10 * trans_size]
  330|   365k|                                    + g_ai2_ihevc_trans_16[14][k]
  331|   365k|                                                    * pi2_tmp[14 * trans_size];
  332|   365k|                }
  333|  91.2k|                eeo[0] =
  334|  91.2k|                                g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size]
  335|  91.2k|                                                + g_ai2_ihevc_trans_16[12][0]
  336|  91.2k|                                                                * pi2_tmp[12
  337|  91.2k|                                                                                * trans_size];
  338|  91.2k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0]
  339|  91.2k|                                + g_ai2_ihevc_trans_16[8][0] * pi2_tmp[8 * trans_size];
  340|  91.2k|                eeo[1] =
  341|  91.2k|                                g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size]
  342|  91.2k|                                                + g_ai2_ihevc_trans_16[12][1]
  343|  91.2k|                                                                * pi2_tmp[12
  344|  91.2k|                                                                                * trans_size];
  345|  91.2k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0]
  346|  91.2k|                                + g_ai2_ihevc_trans_16[8][1] * pi2_tmp[8 * trans_size];
  347|       |
  348|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  349|   272k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (349:28): [True: 181k, False: 91.2k]
  ------------------
  350|   181k|                {
  351|   181k|                    ee[k] = eee[k] + eeo[k];
  352|   181k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  353|   181k|                }
  354|   453k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (354:28): [True: 362k, False: 91.2k]
  ------------------
  355|   362k|                {
  356|   362k|                    e[k] = ee[k] + eo[k];
  357|   362k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  358|   362k|                }
  359|   808k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (359:28): [True: 717k, False: 91.2k]
  ------------------
  360|   717k|                {
  361|   717k|                    WORD32 itrans_out;
  362|   717k|                    itrans_out =
  363|   717k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   717k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   717k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 717k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 717k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  364|   717k|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|   717k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   717k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 104k, False: 612k]
  |  |  |  |  |  Branch (40:53): [True: 25.3k, False: 586k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  365|   717k|                    itrans_out =
  366|   717k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   717k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   717k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 717k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 717k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|   717k|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|   717k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   717k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 90.8k, False: 626k]
  |  |  |  |  |  Branch (40:53): [True: 22.7k, False: 603k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|   717k|                }
  369|  91.2k|                pi2_tmp++;
  370|  91.2k|                pu1_pred += pred_strd;
  371|  91.2k|                pu1_dst += dst_strd;
  372|  91.2k|            }
  373|  5.76k|        }
  374|       |        /************************************************************************************************/
  375|       |        /************************************END - IT_RECON_16x16****************************************/
  376|       |        /************************************************************************************************/
  377|  49.6k|    }
  378|  27.8k|    else if((zero_rows & 0xFF00) == 0xFF00) /* First 8 rows of input are non-zero */
  ------------------
  |  Branch (378:13): [True: 14.5k, False: 13.3k]
  ------------------
  379|  14.5k|    {
  380|       |        /************************************************************************************************/
  381|       |        /**********************************START - IT_RECON_16x16****************************************/
  382|       |        /************************************************************************************************/
  383|       |
  384|       |        /* Inverse Transform 1st stage */
  385|  14.5k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  14.5k|#define IT_SHIFT_STAGE_1 7
  ------------------
  386|  14.5k|        add = 1 << (shift - 1);
  387|       |
  388|   119k|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (388:20): [True: 105k, False: 14.5k]
  ------------------
  389|   105k|        {
  390|       |            /* Checking for Zero Cols */
  391|   105k|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (391:16): [True: 48.4k, False: 56.6k]
  ------------------
  392|  48.4k|            {
  393|  48.4k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  394|  48.4k|            }
  395|  56.6k|            else
  396|  56.6k|            {
  397|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  398|   510k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (398:28): [True: 454k, False: 56.6k]
  ------------------
  399|   454k|                {
  400|   454k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_src[src_strd]
  401|   454k|                                    + g_ai2_ihevc_trans_16[3][k]
  402|   454k|                                                    * pi2_src[3 * src_strd]
  403|   454k|                                    + g_ai2_ihevc_trans_16[5][k]
  404|   454k|                                                    * pi2_src[5 * src_strd]
  405|   454k|                                    + g_ai2_ihevc_trans_16[7][k]
  406|   454k|                                                    * pi2_src[7 * src_strd];
  407|   454k|                }
  408|   283k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (408:28): [True: 227k, False: 56.6k]
  ------------------
  409|   227k|                {
  410|   227k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_src[2 * src_strd]
  411|   227k|                                    + g_ai2_ihevc_trans_16[6][k]
  412|   227k|                                                    * pi2_src[6 * src_strd];
  413|   227k|                }
  414|  56.6k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_src[4 * src_strd];
  415|  56.6k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_src[0];
  416|  56.6k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_src[4 * src_strd];
  417|  56.6k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_src[0];
  418|       |
  419|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  420|   170k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (420:28): [True: 113k, False: 56.6k]
  ------------------
  421|   113k|                {
  422|   113k|                    ee[k] = eee[k] + eeo[k];
  423|   113k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  424|   113k|                }
  425|   283k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (425:28): [True: 227k, False: 56.6k]
  ------------------
  426|   227k|                {
  427|   227k|                    e[k] = ee[k] + eo[k];
  428|   227k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  429|   227k|                }
  430|   510k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (430:28): [True: 454k, False: 56.6k]
  ------------------
  431|   454k|                {
  432|   454k|                    pi2_tmp[k] =
  433|   454k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   454k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   454k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 224, False: 453k]
  |  |  |  |  |  Branch (40:53): [True: 218, False: 453k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|   454k|                    pi2_tmp[k + 8] =
  435|   454k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   454k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   454k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 237, False: 453k]
  |  |  |  |  |  Branch (40:53): [True: 199, False: 453k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|   454k|                }
  437|  56.6k|            }
  438|   105k|            pi2_src++;
  439|   105k|            pi2_tmp += trans_size;
  440|   105k|            zero_cols = zero_cols >> 1;
  441|   105k|        }
  442|       |
  443|  14.5k|        pi2_tmp = pi2_tmp_orig;
  444|       |
  445|       |        /* Inverse Transform 2nd stage */
  446|  14.5k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  14.5k|#define IT_SHIFT_STAGE_2 12
  ------------------
  447|  14.5k|        add = 1 << (shift - 1);
  448|  14.5k|        if((zero_rows_2nd_stage & 0xFFF0) == 0xFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (448:12): [True: 8.18k, False: 6.33k]
  ------------------
  449|  8.18k|        {
  450|   137k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (450:24): [True: 129k, False: 8.18k]
  ------------------
  451|   129k|            {
  452|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  453|  1.16M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (453:28): [True: 1.03M, False: 129k]
  ------------------
  454|  1.03M|                {
  455|  1.03M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  456|  1.03M|                                    + g_ai2_ihevc_trans_16[3][k]
  457|  1.03M|                                                    * pi2_tmp[3 * trans_size];
  458|  1.03M|                }
  459|   646k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (459:28): [True: 517k, False: 129k]
  ------------------
  460|   517k|                {
  461|   517k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size];
  462|   517k|                }
  463|   129k|                eeo[0] = 0;
  464|   129k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  465|   129k|                eeo[1] = 0;
  466|   129k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  467|       |
  468|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  469|   387k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (469:28): [True: 258k, False: 129k]
  ------------------
  470|   258k|                {
  471|   258k|                    ee[k] = eee[k] + eeo[k];
  472|   258k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  473|   258k|                }
  474|   646k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (474:28): [True: 517k, False: 129k]
  ------------------
  475|   517k|                {
  476|   517k|                    e[k] = ee[k] + eo[k];
  477|   517k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  478|   517k|                }
  479|  1.16M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (479:28): [True: 1.03M, False: 129k]
  ------------------
  480|  1.03M|                {
  481|  1.03M|                    WORD32 itrans_out;
  482|  1.03M|                    itrans_out =
  483|  1.03M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  1.03M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.03M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.03M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.03M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  484|  1.03M|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|  1.03M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.03M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 85.8k, False: 946k]
  |  |  |  |  |  Branch (40:53): [True: 62.4k, False: 883k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|  1.03M|                    itrans_out =
  486|  1.03M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  1.03M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.03M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.03M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.03M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|  1.03M|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|  1.03M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.03M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 80.5k, False: 951k]
  |  |  |  |  |  Branch (40:53): [True: 61.1k, False: 890k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  488|  1.03M|                }
  489|   129k|                pi2_tmp++;
  490|   129k|                pu1_pred += pred_strd;
  491|   129k|                pu1_dst += dst_strd;
  492|   129k|            }
  493|  8.18k|        }
  494|  6.33k|        else if((zero_rows_2nd_stage & 0xFF00) == 0xFF00) /* First 8 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (494:17): [True: 3.63k, False: 2.70k]
  ------------------
  495|  3.63k|        {
  496|  61.0k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (496:24): [True: 57.4k, False: 3.63k]
  ------------------
  497|  57.4k|            {
  498|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  499|   516k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (499:28): [True: 459k, False: 57.4k]
  ------------------
  500|   459k|                {
  501|   459k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  502|   459k|                                    + g_ai2_ihevc_trans_16[3][k]
  503|   459k|                                                    * pi2_tmp[3 * trans_size]
  504|   459k|                                    + g_ai2_ihevc_trans_16[5][k]
  505|   459k|                                                    * pi2_tmp[5 * trans_size]
  506|   459k|                                    + g_ai2_ihevc_trans_16[7][k]
  507|   459k|                                                    * pi2_tmp[7 * trans_size];
  508|   459k|                }
  509|   287k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (509:28): [True: 229k, False: 57.4k]
  ------------------
  510|   229k|                {
  511|   229k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  512|   229k|                                    + g_ai2_ihevc_trans_16[6][k]
  513|   229k|                                                    * pi2_tmp[6 * trans_size];
  514|   229k|                }
  515|  57.4k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size];
  516|  57.4k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  517|  57.4k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size];
  518|  57.4k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  519|       |
  520|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  521|   172k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (521:28): [True: 115k, False: 57.4k]
  ------------------
  522|   115k|                {
  523|   115k|                    ee[k] = eee[k] + eeo[k];
  524|   115k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  525|   115k|                }
  526|   287k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (526:28): [True: 229k, False: 57.4k]
  ------------------
  527|   229k|                {
  528|   229k|                    e[k] = ee[k] + eo[k];
  529|   229k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  530|   229k|                }
  531|   515k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (531:28): [True: 458k, False: 57.4k]
  ------------------
  532|   458k|                {
  533|   458k|                    WORD32 itrans_out;
  534|   458k|                    itrans_out =
  535|   458k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   458k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   458k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 458k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 458k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|   458k|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|   458k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   458k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 49.3k, False: 409k]
  |  |  |  |  |  Branch (40:53): [True: 41.4k, False: 367k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   458k|                    itrans_out =
  538|   458k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   458k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   458k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 458k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 458k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  539|   458k|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|   458k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   458k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 52.8k, False: 405k]
  |  |  |  |  |  Branch (40:53): [True: 41.8k, False: 363k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  540|   458k|                }
  541|  57.4k|                pi2_tmp++;
  542|  57.4k|                pu1_pred += pred_strd;
  543|  57.4k|                pu1_dst += dst_strd;
  544|  57.4k|            }
  545|  3.63k|        }
  546|  2.70k|        else /* All rows of output of 1st stage are non-zero */
  547|  2.70k|        {
  548|  45.7k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (548:24): [True: 43.0k, False: 2.70k]
  ------------------
  549|  43.0k|            {
  550|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  551|   385k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (551:28): [True: 342k, False: 43.0k]
  ------------------
  552|   342k|                {
  553|   342k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  554|   342k|                                    + g_ai2_ihevc_trans_16[3][k]
  555|   342k|                                                    * pi2_tmp[3 * trans_size]
  556|   342k|                                    + g_ai2_ihevc_trans_16[5][k]
  557|   342k|                                                    * pi2_tmp[5 * trans_size]
  558|   342k|                                    + g_ai2_ihevc_trans_16[7][k]
  559|   342k|                                                    * pi2_tmp[7 * trans_size]
  560|   342k|                                    + g_ai2_ihevc_trans_16[9][k]
  561|   342k|                                                    * pi2_tmp[9 * trans_size]
  562|   342k|                                    + g_ai2_ihevc_trans_16[11][k]
  563|   342k|                                                    * pi2_tmp[11 * trans_size]
  564|   342k|                                    + g_ai2_ihevc_trans_16[13][k]
  565|   342k|                                                    * pi2_tmp[13 * trans_size]
  566|   342k|                                    + g_ai2_ihevc_trans_16[15][k]
  567|   342k|                                                    * pi2_tmp[15 * trans_size];
  568|   342k|                }
  569|   215k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (569:28): [True: 172k, False: 43.0k]
  ------------------
  570|   172k|                {
  571|   172k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  572|   172k|                                    + g_ai2_ihevc_trans_16[6][k]
  573|   172k|                                                    * pi2_tmp[6 * trans_size]
  574|   172k|                                    + g_ai2_ihevc_trans_16[10][k]
  575|   172k|                                                    * pi2_tmp[10 * trans_size]
  576|   172k|                                    + g_ai2_ihevc_trans_16[14][k]
  577|   172k|                                                    * pi2_tmp[14 * trans_size];
  578|   172k|                }
  579|  43.0k|                eeo[0] =
  580|  43.0k|                                g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size]
  581|  43.0k|                                                + g_ai2_ihevc_trans_16[12][0]
  582|  43.0k|                                                                * pi2_tmp[12
  583|  43.0k|                                                                                * trans_size];
  584|  43.0k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0]
  585|  43.0k|                                + g_ai2_ihevc_trans_16[8][0] * pi2_tmp[8 * trans_size];
  586|  43.0k|                eeo[1] =
  587|  43.0k|                                g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size]
  588|  43.0k|                                                + g_ai2_ihevc_trans_16[12][1]
  589|  43.0k|                                                                * pi2_tmp[12
  590|  43.0k|                                                                                * trans_size];
  591|  43.0k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0]
  592|  43.0k|                                + g_ai2_ihevc_trans_16[8][1] * pi2_tmp[8 * trans_size];
  593|       |
  594|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  595|   128k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (595:28): [True: 85.8k, False: 43.0k]
  ------------------
  596|  85.8k|                {
  597|  85.8k|                    ee[k] = eee[k] + eeo[k];
  598|  85.8k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  599|  85.8k|                }
  600|   214k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (600:28): [True: 171k, False: 43.0k]
  ------------------
  601|   171k|                {
  602|   171k|                    e[k] = ee[k] + eo[k];
  603|   171k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  604|   171k|                }
  605|   384k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (605:28): [True: 341k, False: 43.0k]
  ------------------
  606|   341k|                {
  607|   341k|                    WORD32 itrans_out;
  608|   341k|                    itrans_out =
  609|   341k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   341k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   341k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 341k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 341k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|   341k|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|   341k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   341k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 48.9k, False: 292k]
  |  |  |  |  |  Branch (40:53): [True: 11.0k, False: 280k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  611|   341k|                    itrans_out =
  612|   341k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   341k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   341k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 341k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 341k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  613|   341k|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|   341k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   341k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 34.5k, False: 306k]
  |  |  |  |  |  Branch (40:53): [True: 11.1k, False: 295k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  614|   341k|                }
  615|  43.0k|                pi2_tmp++;
  616|  43.0k|                pu1_pred += pred_strd;
  617|  43.0k|                pu1_dst += dst_strd;
  618|  43.0k|            }
  619|  2.70k|        }
  620|       |        /************************************************************************************************/
  621|       |        /************************************END - IT_RECON_16x16****************************************/
  622|       |        /************************************************************************************************/
  623|  14.5k|    }
  624|  13.3k|    else /* All rows of input are non-zero */
  625|  13.3k|    {
  626|       |        /************************************************************************************************/
  627|       |        /**********************************START - IT_RECON_16x16****************************************/
  628|       |        /************************************************************************************************/
  629|       |
  630|       |        /* Inverse Transform 1st stage */
  631|  13.3k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  13.3k|#define IT_SHIFT_STAGE_1 7
  ------------------
  632|  13.3k|        add = 1 << (shift - 1);
  633|       |
  634|  99.4k|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (634:20): [True: 86.0k, False: 13.3k]
  ------------------
  635|  86.0k|        {
  636|       |            /* Checking for Zero Cols */
  637|  86.0k|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (637:16): [True: 22.5k, False: 63.5k]
  ------------------
  638|  22.5k|            {
  639|  22.5k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  640|  22.5k|            }
  641|  63.5k|            else
  642|  63.5k|            {
  643|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  644|   571k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (644:28): [True: 508k, False: 63.5k]
  ------------------
  645|   508k|                {
  646|   508k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_src[src_strd]
  647|   508k|                                    + g_ai2_ihevc_trans_16[3][k]
  648|   508k|                                                    * pi2_src[3 * src_strd]
  649|   508k|                                    + g_ai2_ihevc_trans_16[5][k]
  650|   508k|                                                    * pi2_src[5 * src_strd]
  651|   508k|                                    + g_ai2_ihevc_trans_16[7][k]
  652|   508k|                                                    * pi2_src[7 * src_strd]
  653|   508k|                                    + g_ai2_ihevc_trans_16[9][k]
  654|   508k|                                                    * pi2_src[9 * src_strd]
  655|   508k|                                    + g_ai2_ihevc_trans_16[11][k]
  656|   508k|                                                    * pi2_src[11 * src_strd]
  657|   508k|                                    + g_ai2_ihevc_trans_16[13][k]
  658|   508k|                                                    * pi2_src[13 * src_strd]
  659|   508k|                                    + g_ai2_ihevc_trans_16[15][k]
  660|   508k|                                                    * pi2_src[15 * src_strd];
  661|   508k|                }
  662|   318k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (662:28): [True: 255k, False: 63.5k]
  ------------------
  663|   255k|                {
  664|   255k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_src[2 * src_strd]
  665|   255k|                                    + g_ai2_ihevc_trans_16[6][k]
  666|   255k|                                                    * pi2_src[6 * src_strd]
  667|   255k|                                    + g_ai2_ihevc_trans_16[10][k]
  668|   255k|                                                    * pi2_src[10 * src_strd]
  669|   255k|                                    + g_ai2_ihevc_trans_16[14][k]
  670|   255k|                                                    * pi2_src[14 * src_strd];
  671|   255k|                }
  672|  63.5k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_src[4 * src_strd]
  673|  63.5k|                                + g_ai2_ihevc_trans_16[12][0]
  674|  63.5k|                                                * pi2_src[12 * src_strd];
  675|  63.5k|                eee[0] =
  676|  63.5k|                                g_ai2_ihevc_trans_16[0][0] * pi2_src[0]
  677|  63.5k|                                                + g_ai2_ihevc_trans_16[8][0]
  678|  63.5k|                                                                * pi2_src[8
  679|  63.5k|                                                                                * src_strd];
  680|  63.5k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_src[4 * src_strd]
  681|  63.5k|                                + g_ai2_ihevc_trans_16[12][1]
  682|  63.5k|                                                * pi2_src[12 * src_strd];
  683|  63.5k|                eee[1] =
  684|  63.5k|                                g_ai2_ihevc_trans_16[0][1] * pi2_src[0]
  685|  63.5k|                                                + g_ai2_ihevc_trans_16[8][1]
  686|  63.5k|                                                                * pi2_src[8
  687|  63.5k|                                                                                * src_strd];
  688|       |
  689|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  690|   190k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (690:28): [True: 127k, False: 63.5k]
  ------------------
  691|   127k|                {
  692|   127k|                    ee[k] = eee[k] + eeo[k];
  693|   127k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  694|   127k|                }
  695|   317k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (695:28): [True: 254k, False: 63.5k]
  ------------------
  696|   254k|                {
  697|   254k|                    e[k] = ee[k] + eo[k];
  698|   254k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  699|   254k|                }
  700|   572k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (700:28): [True: 509k, False: 63.5k]
  ------------------
  701|   509k|                {
  702|   509k|                    pi2_tmp[k] =
  703|   509k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   509k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   509k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 603, False: 508k]
  |  |  |  |  |  Branch (40:53): [True: 405, False: 508k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  704|   509k|                    pi2_tmp[k + 8] =
  705|   509k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   509k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   509k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 403, False: 508k]
  |  |  |  |  |  Branch (40:53): [True: 465, False: 508k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  706|   509k|                }
  707|  63.5k|            }
  708|  86.0k|            pi2_src++;
  709|  86.0k|            pi2_tmp += trans_size;
  710|  86.0k|            zero_cols = zero_cols >> 1;
  711|  86.0k|        }
  712|       |
  713|  13.3k|        pi2_tmp = pi2_tmp_orig;
  714|       |
  715|       |        /* Inverse Transform 2nd stage */
  716|  13.3k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  13.3k|#define IT_SHIFT_STAGE_2 12
  ------------------
  717|  13.3k|        add = 1 << (shift - 1);
  718|  13.3k|        if((zero_rows_2nd_stage & 0xFFF0) == 0xFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (718:12): [True: 9.67k, False: 3.69k]
  ------------------
  719|  9.67k|        {
  720|   158k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (720:24): [True: 149k, False: 9.67k]
  ------------------
  721|   149k|            {
  722|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  723|  1.34M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (723:28): [True: 1.19M, False: 149k]
  ------------------
  724|  1.19M|                {
  725|  1.19M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  726|  1.19M|                                    + g_ai2_ihevc_trans_16[3][k]
  727|  1.19M|                                                    * pi2_tmp[3 * trans_size];
  728|  1.19M|                }
  729|   746k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (729:28): [True: 597k, False: 149k]
  ------------------
  730|   597k|                {
  731|   597k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size];
  732|   597k|                }
  733|   149k|                eeo[0] = 0;
  734|   149k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  735|   149k|                eeo[1] = 0;
  736|   149k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  737|       |
  738|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  739|   447k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (739:28): [True: 298k, False: 149k]
  ------------------
  740|   298k|                {
  741|   298k|                    ee[k] = eee[k] + eeo[k];
  742|   298k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  743|   298k|                }
  744|   744k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (744:28): [True: 595k, False: 149k]
  ------------------
  745|   595k|                {
  746|   595k|                    e[k] = ee[k] + eo[k];
  747|   595k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  748|   595k|                }
  749|  1.33M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (749:28): [True: 1.18M, False: 149k]
  ------------------
  750|  1.18M|                {
  751|  1.18M|                    WORD32 itrans_out;
  752|  1.18M|                    itrans_out =
  753|  1.18M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  1.18M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.18M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.18M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.18M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  754|  1.18M|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|  1.18M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.18M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 116k, False: 1.07M]
  |  |  |  |  |  Branch (40:53): [True: 44.6k, False: 1.02M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|  1.18M|                    itrans_out =
  756|  1.18M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  1.18M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.18M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.18M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.18M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  757|  1.18M|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|  1.18M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.18M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 100k, False: 1.08M]
  |  |  |  |  |  Branch (40:53): [True: 47.7k, False: 1.03M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  758|  1.18M|                }
  759|   149k|                pi2_tmp++;
  760|   149k|                pu1_pred += pred_strd;
  761|   149k|                pu1_dst += dst_strd;
  762|   149k|            }
  763|  9.67k|        }
  764|  3.69k|        else if((zero_rows_2nd_stage & 0xFF00) == 0xFF00) /* First 8 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (764:17): [True: 1.62k, False: 2.06k]
  ------------------
  765|  1.62k|        {
  766|  27.4k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (766:24): [True: 25.8k, False: 1.62k]
  ------------------
  767|  25.8k|            {
  768|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  769|   232k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (769:28): [True: 206k, False: 25.8k]
  ------------------
  770|   206k|                {
  771|   206k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  772|   206k|                                    + g_ai2_ihevc_trans_16[3][k]
  773|   206k|                                                    * pi2_tmp[3 * trans_size]
  774|   206k|                                    + g_ai2_ihevc_trans_16[5][k]
  775|   206k|                                                    * pi2_tmp[5 * trans_size]
  776|   206k|                                    + g_ai2_ihevc_trans_16[7][k]
  777|   206k|                                                    * pi2_tmp[7 * trans_size];
  778|   206k|                }
  779|   129k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (779:28): [True: 103k, False: 25.8k]
  ------------------
  780|   103k|                {
  781|   103k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  782|   103k|                                    + g_ai2_ihevc_trans_16[6][k]
  783|   103k|                                                    * pi2_tmp[6 * trans_size];
  784|   103k|                }
  785|  25.8k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size];
  786|  25.8k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  787|  25.8k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size];
  788|  25.8k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  789|       |
  790|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  791|  77.6k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (791:28): [True: 51.7k, False: 25.8k]
  ------------------
  792|  51.7k|                {
  793|  51.7k|                    ee[k] = eee[k] + eeo[k];
  794|  51.7k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  795|  51.7k|                }
  796|   129k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (796:28): [True: 103k, False: 25.8k]
  ------------------
  797|   103k|                {
  798|   103k|                    e[k] = ee[k] + eo[k];
  799|   103k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  800|   103k|                }
  801|   232k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (801:28): [True: 206k, False: 25.8k]
  ------------------
  802|   206k|                {
  803|   206k|                    WORD32 itrans_out;
  804|   206k|                    itrans_out =
  805|   206k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   206k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   206k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 206k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 206k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  806|   206k|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|   206k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   206k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 36.1k, False: 170k]
  |  |  |  |  |  Branch (40:53): [True: 34.2k, False: 136k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|   206k|                    itrans_out =
  808|   206k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   206k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   206k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 206k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 206k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|   206k|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|   206k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   206k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 36.0k, False: 170k]
  |  |  |  |  |  Branch (40:53): [True: 33.3k, False: 137k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  810|   206k|                }
  811|  25.8k|                pi2_tmp++;
  812|  25.8k|                pu1_pred += pred_strd;
  813|  25.8k|                pu1_dst += dst_strd;
  814|  25.8k|            }
  815|  1.62k|        }
  816|  2.06k|        else /* All rows of output of 1st stage are non-zero */
  817|  2.06k|        {
  818|  36.6k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (818:24): [True: 34.5k, False: 2.06k]
  ------------------
  819|  34.5k|            {
  820|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  821|   311k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (821:28): [True: 276k, False: 34.5k]
  ------------------
  822|   276k|                {
  823|   276k|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  824|   276k|                                    + g_ai2_ihevc_trans_16[3][k]
  825|   276k|                                                    * pi2_tmp[3 * trans_size]
  826|   276k|                                    + g_ai2_ihevc_trans_16[5][k]
  827|   276k|                                                    * pi2_tmp[5 * trans_size]
  828|   276k|                                    + g_ai2_ihevc_trans_16[7][k]
  829|   276k|                                                    * pi2_tmp[7 * trans_size]
  830|   276k|                                    + g_ai2_ihevc_trans_16[9][k]
  831|   276k|                                                    * pi2_tmp[9 * trans_size]
  832|   276k|                                    + g_ai2_ihevc_trans_16[11][k]
  833|   276k|                                                    * pi2_tmp[11 * trans_size]
  834|   276k|                                    + g_ai2_ihevc_trans_16[13][k]
  835|   276k|                                                    * pi2_tmp[13 * trans_size]
  836|   276k|                                    + g_ai2_ihevc_trans_16[15][k]
  837|   276k|                                                    * pi2_tmp[15 * trans_size];
  838|   276k|                }
  839|   173k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (839:28): [True: 138k, False: 34.5k]
  ------------------
  840|   138k|                {
  841|   138k|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  842|   138k|                                    + g_ai2_ihevc_trans_16[6][k]
  843|   138k|                                                    * pi2_tmp[6 * trans_size]
  844|   138k|                                    + g_ai2_ihevc_trans_16[10][k]
  845|   138k|                                                    * pi2_tmp[10 * trans_size]
  846|   138k|                                    + g_ai2_ihevc_trans_16[14][k]
  847|   138k|                                                    * pi2_tmp[14 * trans_size];
  848|   138k|                }
  849|  34.5k|                eeo[0] =
  850|  34.5k|                                g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size]
  851|  34.5k|                                                + g_ai2_ihevc_trans_16[12][0]
  852|  34.5k|                                                                * pi2_tmp[12
  853|  34.5k|                                                                                * trans_size];
  854|  34.5k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0]
  855|  34.5k|                                + g_ai2_ihevc_trans_16[8][0] * pi2_tmp[8 * trans_size];
  856|  34.5k|                eeo[1] =
  857|  34.5k|                                g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size]
  858|  34.5k|                                                + g_ai2_ihevc_trans_16[12][1]
  859|  34.5k|                                                                * pi2_tmp[12
  860|  34.5k|                                                                                * trans_size];
  861|  34.5k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0]
  862|  34.5k|                                + g_ai2_ihevc_trans_16[8][1] * pi2_tmp[8 * trans_size];
  863|       |
  864|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  865|   103k|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (865:28): [True: 69.2k, False: 34.5k]
  ------------------
  866|  69.2k|                {
  867|  69.2k|                    ee[k] = eee[k] + eeo[k];
  868|  69.2k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  869|  69.2k|                }
  870|   172k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (870:28): [True: 138k, False: 34.5k]
  ------------------
  871|   138k|                {
  872|   138k|                    e[k] = ee[k] + eo[k];
  873|   138k|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  874|   138k|                }
  875|   310k|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (875:28): [True: 276k, False: 34.5k]
  ------------------
  876|   276k|                {
  877|   276k|                    WORD32 itrans_out;
  878|   276k|                    itrans_out =
  879|   276k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   276k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   276k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 276k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 276k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|   276k|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|   276k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   276k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 49.6k, False: 226k]
  |  |  |  |  |  Branch (40:53): [True: 45.0k, False: 181k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  881|   276k|                    itrans_out =
  882|   276k|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|   276k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   276k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 276k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 276k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  883|   276k|                    pu1_dst[(k + 8) * 2] = CLIP_U8((itrans_out + pu1_pred[(k + 8) * 2]));
  ------------------
  |  |   40|   276k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   276k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 49.5k, False: 226k]
  |  |  |  |  |  Branch (40:53): [True: 44.6k, False: 181k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  884|   276k|                }
  885|  34.5k|                pi2_tmp++;
  886|  34.5k|                pu1_pred += pred_strd;
  887|  34.5k|                pu1_dst += dst_strd;
  888|  34.5k|            }
  889|  2.06k|        }
  890|       |        /************************************************************************************************/
  891|       |        /************************************END - IT_RECON_16x16****************************************/
  892|       |        /************************************************************************************************/
  893|  13.3k|    }
  894|  77.5k|}

ihevc_chroma_itrans_recon_8x8:
  116|   235k|{
  117|   235k|    WORD32 j, k;
  118|   235k|    WORD32 e[4], o[4];
  119|   235k|    WORD32 ee[2], eo[2];
  120|   235k|    WORD32 add;
  121|   235k|    WORD32 shift;
  122|   235k|    WORD16 *pi2_tmp_orig;
  123|   235k|    WORD32 trans_size;
  124|   235k|    WORD32 zero_rows_2nd_stage = zero_cols;
  125|   235k|    WORD32 row_limit_2nd_stage;
  126|   235k|    UNUSED(zero_rows);
  ------------------
  |  |   38|   235k|#define UNUSED(x) ((void)(x))
  ------------------
  127|   235k|    trans_size = TRANS_SIZE_8;
  ------------------
  |  |  420|   235k|#define TRANS_SIZE_8   8
  ------------------
  128|       |
  129|   235k|    pi2_tmp_orig = pi2_tmp;
  130|       |
  131|   235k|    if((zero_cols & 0xF0) == 0xF0)
  ------------------
  |  Branch (131:8): [True: 225k, False: 10.4k]
  ------------------
  132|   225k|        row_limit_2nd_stage = 4;
  133|  10.4k|    else
  134|  10.4k|        row_limit_2nd_stage = TRANS_SIZE_8;
  ------------------
  |  |  420|  10.4k|#define TRANS_SIZE_8   8
  ------------------
  135|       |
  136|       |    /* Inverse Transform 1st stage */
  137|   235k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   235k|#define IT_SHIFT_STAGE_1 7
  ------------------
  138|   235k|    add = 1 << (shift - 1);
  139|   235k|    {
  140|       |        /************************************************************************************************/
  141|       |        /**********************************START - IT_RECON_8x8******************************************/
  142|       |        /************************************************************************************************/
  143|       |
  144|  1.21M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (144:20): [True: 983k, False: 235k]
  ------------------
  145|   983k|        {
  146|       |            /* Checking for Zero Cols */
  147|   983k|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (147:16): [True: 504k, False: 478k]
  ------------------
  148|   504k|            {
  149|   504k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  150|   504k|            }
  151|   478k|            else
  152|   478k|            {
  153|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  154|  2.40M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (154:28): [True: 1.92M, False: 478k]
  ------------------
  155|  1.92M|                {
  156|  1.92M|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_src[src_strd]
  157|  1.92M|                                    + g_ai2_ihevc_trans_8[3][k]
  158|  1.92M|                                                    * pi2_src[3 * src_strd]
  159|  1.92M|                                    + g_ai2_ihevc_trans_8[5][k]
  160|  1.92M|                                                    * pi2_src[5 * src_strd]
  161|  1.92M|                                    + g_ai2_ihevc_trans_8[7][k]
  162|  1.92M|                                                    * pi2_src[7 * src_strd];
  163|  1.92M|                }
  164|       |
  165|   478k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_src[2 * src_strd]
  166|   478k|                                + g_ai2_ihevc_trans_8[6][0] * pi2_src[6 * src_strd];
  167|   478k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_src[2 * src_strd]
  168|   478k|                                + g_ai2_ihevc_trans_8[6][1] * pi2_src[6 * src_strd];
  169|   478k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_src[0]
  170|   478k|                                + g_ai2_ihevc_trans_8[4][0] * pi2_src[4 * src_strd];
  171|   478k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_src[0]
  172|   478k|                                + g_ai2_ihevc_trans_8[4][1] * pi2_src[4 * src_strd];
  173|       |
  174|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  175|   478k|                e[0] = ee[0] + eo[0];
  176|   478k|                e[3] = ee[0] - eo[0];
  177|   478k|                e[1] = ee[1] + eo[1];
  178|   478k|                e[2] = ee[1] - eo[1];
  179|  2.40M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (179:28): [True: 1.92M, False: 478k]
  ------------------
  180|  1.92M|                {
  181|  1.92M|                    pi2_tmp[k] =
  182|  1.92M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  1.92M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.92M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 432, False: 1.92M]
  |  |  |  |  |  Branch (40:53): [True: 375, False: 1.92M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|  1.92M|                    pi2_tmp[k + 4] =
  184|  1.92M|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|  1.92M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.92M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 426, False: 1.92M]
  |  |  |  |  |  Branch (40:53): [True: 365, False: 1.92M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|  1.92M|                }
  186|   478k|            }
  187|   983k|            pi2_src++;
  188|   983k|            pi2_tmp += trans_size;
  189|   983k|            zero_cols = zero_cols >> 1;
  190|   983k|        }
  191|       |
  192|   235k|        pi2_tmp = pi2_tmp_orig;
  193|       |
  194|       |        /* Inverse Transform 2nd stage */
  195|   235k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   235k|#define IT_SHIFT_STAGE_2 12
  ------------------
  196|   235k|        add = 1 << (shift - 1);
  197|       |
  198|   235k|        if((zero_rows_2nd_stage & 0xF0) == 0xF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (198:12): [True: 225k, False: 9.95k]
  ------------------
  199|   225k|        {
  200|  2.01M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (200:24): [True: 1.79M, False: 225k]
  ------------------
  201|  1.79M|            {
  202|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  203|  8.95M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (203:28): [True: 7.16M, False: 1.79M]
  ------------------
  204|  7.16M|                {
  205|  7.16M|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
  206|  7.16M|                                    + g_ai2_ihevc_trans_8[3][k]
  207|  7.16M|                                                    * pi2_tmp[3 * trans_size];
  208|  7.16M|                }
  209|  1.79M|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size];
  210|  1.79M|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size];
  211|  1.79M|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0];
  212|  1.79M|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0];
  213|       |
  214|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  215|  1.79M|                e[0] = ee[0] + eo[0];
  216|  1.79M|                e[3] = ee[0] - eo[0];
  217|  1.79M|                e[1] = ee[1] + eo[1];
  218|  1.79M|                e[2] = ee[1] - eo[1];
  219|  8.94M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (219:28): [True: 7.15M, False: 1.79M]
  ------------------
  220|  7.15M|                {
  221|  7.15M|                    WORD32 itrans_out;
  222|  7.15M|                    itrans_out =
  223|  7.15M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  7.15M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.15M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 7.15M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 7.15M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|  7.15M|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|  7.15M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.15M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 674k, False: 6.48M]
  |  |  |  |  |  Branch (40:53): [True: 250k, False: 6.23M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|  7.15M|                    itrans_out =
  226|  7.15M|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|  7.15M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.15M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 7.15M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 7.15M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|  7.15M|                    pu1_dst[(k + 4) * 2] =
  228|  7.15M|                                    CLIP_U8((itrans_out + pu1_pred[(k + 4) * 2]));
  ------------------
  |  |   40|  7.15M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.15M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 644k, False: 6.51M]
  |  |  |  |  |  Branch (40:53): [True: 262k, False: 6.24M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|  7.15M|                }
  230|  1.79M|                pi2_tmp++;
  231|  1.79M|                pu1_pred += pred_strd;
  232|  1.79M|                pu1_dst += dst_strd;
  233|  1.79M|            }
  234|   225k|        }
  235|  9.95k|        else /* All rows of output of 1st stage are non-zero */
  236|  9.95k|        {
  237|  93.7k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (237:24): [True: 83.8k, False: 9.95k]
  ------------------
  238|  83.8k|            {
  239|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  240|   419k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (240:28): [True: 335k, False: 83.8k]
  ------------------
  241|   335k|                {
  242|   335k|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
  243|   335k|                                    + g_ai2_ihevc_trans_8[3][k]
  244|   335k|                                                    * pi2_tmp[3 * trans_size]
  245|   335k|                                    + g_ai2_ihevc_trans_8[5][k]
  246|   335k|                                                    * pi2_tmp[5 * trans_size]
  247|   335k|                                    + g_ai2_ihevc_trans_8[7][k]
  248|   335k|                                                    * pi2_tmp[7 * trans_size];
  249|   335k|                }
  250|       |
  251|  83.8k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size]
  252|  83.8k|                                + g_ai2_ihevc_trans_8[6][0] * pi2_tmp[6 * trans_size];
  253|  83.8k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size]
  254|  83.8k|                                + g_ai2_ihevc_trans_8[6][1] * pi2_tmp[6 * trans_size];
  255|  83.8k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0]
  256|  83.8k|                                + g_ai2_ihevc_trans_8[4][0] * pi2_tmp[4 * trans_size];
  257|  83.8k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0]
  258|  83.8k|                                + g_ai2_ihevc_trans_8[4][1] * pi2_tmp[4 * trans_size];
  259|       |
  260|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  261|  83.8k|                e[0] = ee[0] + eo[0];
  262|  83.8k|                e[3] = ee[0] - eo[0];
  263|  83.8k|                e[1] = ee[1] + eo[1];
  264|  83.8k|                e[2] = ee[1] - eo[1];
  265|   418k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (265:28): [True: 334k, False: 83.8k]
  ------------------
  266|   334k|                {
  267|   334k|                    WORD32 itrans_out;
  268|   334k|                    itrans_out =
  269|   334k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   334k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   334k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 334k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 334k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|   334k|                    pu1_dst[k * 2] = CLIP_U8((itrans_out + pu1_pred[k * 2]));
  ------------------
  |  |   40|   334k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   334k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 64.6k, False: 270k]
  |  |  |  |  |  Branch (40:53): [True: 42.7k, False: 227k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|   334k|                    itrans_out =
  272|   334k|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|   334k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   334k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 334k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 334k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|   334k|                    pu1_dst[(k + 4) * 2] =
  274|   334k|                                    CLIP_U8((itrans_out + pu1_pred[(k + 4) * 2]));
  ------------------
  |  |   40|   334k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   334k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 60.9k, False: 274k]
  |  |  |  |  |  Branch (40:53): [True: 39.8k, False: 234k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|   334k|                }
  276|  83.8k|                pi2_tmp++;
  277|  83.8k|                pu1_pred += pred_strd;
  278|  83.8k|                pu1_dst += dst_strd;
  279|  83.8k|            }
  280|  9.95k|        }
  281|       |        /************************************************************************************************/
  282|       |        /************************************END - IT_RECON_8x8******************************************/
  283|       |        /************************************************************************************************/
  284|   235k|    }
  285|   235k|}

ihevc_chroma_recon_4x4:
  110|   156k|{
  111|   156k|    WORD32 i, j;
  112|   156k|    WORD32 trans_size;
  113|       |
  114|   156k|    trans_size = TRANS_SIZE_4;
  ------------------
  |  |  419|   156k|#define TRANS_SIZE_4   4
  ------------------
  115|       |
  116|       |    /* Reconstruction */
  117|       |
  118|   783k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (118:16): [True: 627k, False: 156k]
  ------------------
  119|   627k|    {
  120|       |        /* Checking for Zero Cols */
  121|   627k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (121:12): [True: 376k, False: 250k]
  ------------------
  122|   376k|        {
  123|  1.88M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (123:24): [True: 1.50M, False: 376k]
  ------------------
  124|  1.50M|            {
  125|  1.50M|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  126|  1.50M|            }
  127|   376k|        }
  128|   250k|        else
  129|   250k|        {
  130|  1.25M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (130:24): [True: 1.00M, False: 250k]
  ------------------
  131|  1.00M|            {
  132|  1.00M|                pu1_dst[j * dst_strd] =
  133|  1.00M|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|  1.00M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.00M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 74.6k, False: 926k]
  |  |  |  |  |  Branch (40:53): [True: 66.1k, False: 860k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|  1.00M|            }
  135|   250k|        }
  136|   627k|        pi2_src++;
  137|   627k|        pu1_dst += 2;
  138|   627k|        pu1_pred += 2;
  139|   627k|        zero_cols = zero_cols >> 1;
  140|   627k|    }
  141|   156k|}
ihevc_chroma_recon_8x8:
  193|  5.95k|{
  194|  5.95k|    WORD32 i, j;
  195|  5.95k|    WORD32 trans_size;
  196|       |
  197|  5.95k|    trans_size = TRANS_SIZE_8;
  ------------------
  |  |  420|  5.95k|#define TRANS_SIZE_8   8
  ------------------
  198|       |
  199|       |    /* Reconstruction */
  200|       |
  201|  53.6k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (201:16): [True: 47.6k, False: 5.95k]
  ------------------
  202|  47.6k|    {
  203|       |        /* Checking for Zero Cols */
  204|  47.6k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (204:12): [True: 36.8k, False: 10.8k]
  ------------------
  205|  36.8k|        {
  206|   331k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (206:24): [True: 294k, False: 36.8k]
  ------------------
  207|   294k|            {
  208|   294k|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  209|   294k|            }
  210|  36.8k|        }
  211|  10.8k|        else
  212|  10.8k|        {
  213|  97.5k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (213:24): [True: 86.7k, False: 10.8k]
  ------------------
  214|  86.7k|            {
  215|  86.7k|                pu1_dst[j * dst_strd] =
  216|  86.7k|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|  86.7k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  86.7k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 121, False: 86.6k]
  |  |  |  |  |  Branch (40:53): [True: 469, False: 86.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|  86.7k|            }
  218|  10.8k|        }
  219|  47.6k|        pi2_src++;
  220|  47.6k|        pu1_dst += 2;
  221|  47.6k|        pu1_pred += 2;
  222|  47.6k|        zero_cols = zero_cols >> 1;
  223|  47.6k|    }
  224|  5.95k|}
ihevc_chroma_recon_16x16:
  276|  2.19k|{
  277|  2.19k|    WORD32 i, j;
  278|  2.19k|    WORD32 trans_size;
  279|       |
  280|  2.19k|    trans_size = TRANS_SIZE_16;
  ------------------
  |  |  421|  2.19k|#define TRANS_SIZE_16 16
  ------------------
  281|       |
  282|       |    /* Reconstruction */
  283|       |
  284|  37.2k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (284:16): [True: 35.1k, False: 2.19k]
  ------------------
  285|  35.1k|    {
  286|       |        /* Checking for Zero Cols */
  287|  35.1k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (287:12): [True: 28.5k, False: 6.55k]
  ------------------
  288|  28.5k|        {
  289|   485k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (289:24): [True: 456k, False: 28.5k]
  ------------------
  290|   456k|            {
  291|   456k|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  292|   456k|            }
  293|  28.5k|        }
  294|  6.55k|        else
  295|  6.55k|        {
  296|   111k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (296:24): [True: 105k, False: 6.55k]
  ------------------
  297|   105k|            {
  298|   105k|                pu1_dst[j * dst_strd] =
  299|   105k|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|   105k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   105k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 79, False: 104k]
  |  |  |  |  |  Branch (40:53): [True: 3.42k, False: 101k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|   105k|            }
  301|  6.55k|        }
  302|  35.1k|        pi2_src++;
  303|  35.1k|        pu1_dst += 2;
  304|  35.1k|        pu1_pred += 2;
  305|  35.1k|        zero_cols = zero_cols >> 1;
  306|  35.1k|    }
  307|  2.19k|}

ihevc_deblk_luma_vert:
  107|  31.9M|{
  108|  31.9M|    WORD32 qp_luma, beta_indx, tc_indx;
  109|  31.9M|    WORD32 beta, tc;
  110|  31.9M|    WORD32 dp0, dp3, dq0, dq3, d0, d3, dp, dq, d;
  111|  31.9M|    WORD32 d_sam0, d_sam3;
  112|  31.9M|    WORD32 de, dep, deq;
  113|  31.9M|    WORD32 row;
  114|  31.9M|    WORD32 tmp_p0, tmp_p1, tmp_p2, tmp_q0, tmp_q1, tmp_q2;
  115|  31.9M|    WORD32 delta, delta_p, delta_q;
  116|       |
  117|  31.9M|    ASSERT((bs > 0) && (bs <= 3));
  ------------------
  |  |   55|  31.9M|#define ASSERT(x) assert((x))
  ------------------
  118|  32.0M|    ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  32.0M|#define ASSERT(x) assert((x))
  ------------------
  119|       |
  120|  32.0M|    qp_luma = (quant_param_p + quant_param_q + 1) >> 1;
  121|  32.0M|    beta_indx = CLIP3(qp_luma + (beta_offset_div2 << 1), 0, 51);
  ------------------
  |  |   40|  32.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 23.0k, False: 32.0M]
  |  |  |  Branch (40:53): [True: 0, False: 32.0M]
  |  |  ------------------
  ------------------
  122|       |
  123|       |    /* BS based on implementation can take value 3 if it is intra/inter egde          */
  124|       |    /* based on BS, tc index is calcuated by adding 2 * ( bs - 1) to QP and tc_offset */
  125|       |    /* for BS = 1 adding factor is (0*2), BS = 2 or 3 adding factor is (1*2)          */
  126|       |    /* the above desired functionallity is achieved by doing (2*(bs>>1))              */
  127|       |
  128|  32.0M|    tc_indx = CLIP3(qp_luma + (2 * (bs >> 1)) + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  32.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 32.0M]
  |  |  |  Branch (40:53): [True: 0, False: 32.0M]
  |  |  ------------------
  ------------------
  129|       |
  130|  32.0M|    beta = gai4_ihevc_beta_table[beta_indx];
  131|  32.0M|    tc = gai4_ihevc_tc_table[tc_indx];
  132|  32.0M|    if(0 == tc)
  ------------------
  |  Branch (132:8): [True: 956k, False: 31.0M]
  ------------------
  133|   956k|    {
  134|   956k|        return;
  135|   956k|    }
  136|       |
  137|  31.0M|    dq0 = ABS(pu1_src[2] - 2 * pu1_src[1] + pu1_src[0]);
  ------------------
  |  |   45|  31.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.91M, False: 25.1M]
  |  |  ------------------
  ------------------
  138|  31.0M|    dq3 = ABS(pu1_src[3 * src_strd + 2] - 2 * pu1_src[3 * src_strd + 1]
  ------------------
  |  |   45|  31.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.83M, False: 25.2M]
  |  |  ------------------
  ------------------
  139|  31.0M|                    + pu1_src[3 * src_strd + 0]);
  140|  31.0M|    dp0 = ABS(pu1_src[-3] - 2 * pu1_src[-2] + pu1_src[-1]);
  ------------------
  |  |   45|  31.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 6.57M, False: 24.4M]
  |  |  ------------------
  ------------------
  141|  31.0M|    dp3 = ABS(pu1_src[3 * src_strd - 3] - 2 * pu1_src[3 * src_strd - 2]
  ------------------
  |  |   45|  31.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 6.46M, False: 24.6M]
  |  |  ------------------
  ------------------
  142|  31.0M|                    + pu1_src[3 * src_strd - 1]);
  143|       |
  144|  31.0M|    d0 = dp0 + dq0;
  145|  31.0M|    d3 = dp3 + dq3;
  146|       |
  147|  31.0M|    dp = dp0 + dp3;
  148|  31.0M|    dq = dq0 + dq3;
  149|       |
  150|  31.0M|    d = d0 + d3;
  151|       |
  152|  31.0M|    de = 0;
  153|  31.0M|    dep = 0;
  154|  31.0M|    deq = 0;
  155|       |
  156|  31.0M|    if(d < beta)
  ------------------
  |  Branch (156:8): [True: 27.1M, False: 3.96M]
  ------------------
  157|  27.1M|    {
  158|  27.1M|        d_sam0 = 0;
  159|  27.1M|        if((2 * d0 < (beta >> 2))
  ------------------
  |  Branch (159:12): [True: 23.7M, False: 3.40M]
  ------------------
  160|  27.1M|                        && (ABS(pu1_src[3] - pu1_src[0]) + ABS(pu1_src[-1] - pu1_src[-4])
  ------------------
  |  |   45|  23.7M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 3.42M, False: 20.2M]
  |  |  ------------------
  ------------------
                                      && (ABS(pu1_src[3] - pu1_src[0]) + ABS(pu1_src[-1] - pu1_src[-4])
  ------------------
  |  |   45|  23.7M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 3.88M, False: 19.8M]
  |  |  ------------------
  ------------------
  |  Branch (160:28): [True: 19.0M, False: 4.67M]
  ------------------
  161|  23.7M|                                        < (beta >> 3))
  162|  27.1M|                        && ABS(pu1_src[0] - pu1_src[-1]) < ((5 * tc + 1) >> 1))
  ------------------
  |  |   45|  19.1M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 1.31M, False: 17.7M]
  |  |  ------------------
  ------------------
  |  Branch (162:28): [True: 18.9M, False: 188k]
  ------------------
  163|  18.9M|        {
  164|  18.9M|            d_sam0 = 1;
  165|  18.9M|        }
  166|       |
  167|  27.1M|        pu1_src += 3 * src_strd;
  168|  27.1M|        d_sam3 = 0;
  169|  27.1M|        if((2 * d3 < (beta >> 2))
  ------------------
  |  Branch (169:12): [True: 24.0M, False: 3.04M]
  ------------------
  170|  27.1M|                        && (ABS(pu1_src[3] - pu1_src[0]) + ABS(pu1_src[-1] - pu1_src[-4])
  ------------------
  |  |   45|  24.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 3.43M, False: 20.6M]
  |  |  ------------------
  ------------------
                                      && (ABS(pu1_src[3] - pu1_src[0]) + ABS(pu1_src[-1] - pu1_src[-4])
  ------------------
  |  |   45|  24.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 3.91M, False: 20.1M]
  |  |  ------------------
  ------------------
  |  Branch (170:28): [True: 19.2M, False: 4.76M]
  ------------------
  171|  24.0M|                                        < (beta >> 3))
  172|  27.1M|                        && ABS(pu1_src[0] - pu1_src[-1]) < ((5 * tc + 1) >> 1))
  ------------------
  |  |   45|  19.3M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 1.30M, False: 18.0M]
  |  |  ------------------
  ------------------
  |  Branch (172:28): [True: 19.1M, False: 197k]
  ------------------
  173|  19.1M|        {
  174|  19.1M|            d_sam3 = 1;
  175|  19.1M|        }
  176|  27.1M|        pu1_src -= 3 * src_strd;
  177|       |
  178|  27.1M|        de = (d_sam0 == 1 && d_sam3 == 1) ? 2 : 1;
  ------------------
  |  Branch (178:15): [True: 19.1M, False: 7.99M]
  |  Branch (178:30): [True: 18.4M, False: 707k]
  ------------------
  179|  27.1M|        dep = (dp < (beta + (beta >> 1)) >> 3) ? 1 : 0;
  ------------------
  |  Branch (179:15): [True: 26.0M, False: 1.06M]
  ------------------
  180|  27.1M|        deq = (dq < (beta + (beta >> 1)) >> 3) ? 1 : 0;
  ------------------
  |  Branch (180:15): [True: 25.5M, False: 1.60M]
  ------------------
  181|  27.1M|        if(tc <= 1)
  ------------------
  |  Branch (181:12): [True: 630k, False: 26.4M]
  ------------------
  182|   630k|        {
  183|   630k|            dep = 0;
  184|   630k|            deq = 0;
  185|   630k|        }
  186|  27.1M|    }
  187|       |
  188|  31.0M|    if(de != 0)
  ------------------
  |  Branch (188:8): [True: 29.1M, False: 1.91M]
  ------------------
  189|  29.1M|    {
  190|   135M|        for(row = 0; row < 4; row++)
  ------------------
  |  Branch (190:22): [True: 105M, False: 29.1M]
  ------------------
  191|   105M|        {
  192|   105M|            tmp_p0 = pu1_src[-1];
  193|   105M|            tmp_p1 = pu1_src[-2];
  194|   105M|            tmp_p2 = pu1_src[-3];
  195|       |
  196|   105M|            tmp_q0 = pu1_src[0];
  197|   105M|            tmp_q1 = pu1_src[1];
  198|   105M|            tmp_q2 = pu1_src[2];
  199|       |
  200|   105M|            if(de == 2)
  ------------------
  |  Branch (200:16): [True: 69.9M, False: 36.0M]
  ------------------
  201|  69.9M|            {
  202|  69.9M|                tmp_q0 = CLIP3((pu1_src[2] + 2 * pu1_src[1] +
  ------------------
  |  |   40|  69.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.99k, False: 69.9M]
  |  |  |  Branch (40:53): [True: 1.91k, False: 69.9M]
  |  |  ------------------
  ------------------
  203|  69.9M|                                2 * pu1_src[0] + 2 * pu1_src[-1] +
  204|  69.9M|                                pu1_src[-2] + 4) >> 3,
  205|  69.9M|                                pu1_src[0] - 2 * tc,
  206|  69.9M|                                pu1_src[0] + 2 * tc);
  207|       |
  208|  69.9M|                tmp_q1 = CLIP3((pu1_src[2] + pu1_src[1] + pu1_src[0] +
  ------------------
  |  |   40|  69.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.47k, False: 69.9M]
  |  |  |  Branch (40:53): [True: 1.66k, False: 69.9M]
  |  |  ------------------
  ------------------
  209|  69.9M|                                pu1_src[-1] + 2) >> 2,
  210|  69.9M|                                pu1_src[1] - 2 * tc,
  211|  69.9M|                                pu1_src[1] + 2 * tc);
  212|       |
  213|  69.9M|                tmp_q2 = CLIP3((2 * pu1_src[3] + 3 * pu1_src[2] +
  ------------------
  |  |   40|  69.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 834, False: 69.9M]
  |  |  |  Branch (40:53): [True: 989, False: 69.9M]
  |  |  ------------------
  ------------------
  214|  69.9M|                                pu1_src[1] + pu1_src[0] +
  215|  69.9M|                                pu1_src[-1] + 4) >> 3,
  216|  69.9M|                                pu1_src[2] - 2 * tc,
  217|  69.9M|                                pu1_src[2] + 2 * tc);
  218|       |
  219|  69.9M|                tmp_p0 = CLIP3((pu1_src[1] + 2 * pu1_src[0] +
  ------------------
  |  |   40|  69.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 2.16k, False: 69.9M]
  |  |  |  Branch (40:53): [True: 1.91k, False: 69.9M]
  |  |  ------------------
  ------------------
  220|  69.9M|                                2 * pu1_src[-1] + 2 * pu1_src[-2] +
  221|  69.9M|                                pu1_src[-3] + 4) >> 3,
  222|  69.9M|                                pu1_src[-1] - 2 * tc,
  223|  69.9M|                                pu1_src[-1] + 2 * tc);
  224|       |
  225|  69.9M|                tmp_p1 = CLIP3((pu1_src[0] + pu1_src[-1] +
  ------------------
  |  |   40|  69.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.60k, False: 69.9M]
  |  |  |  Branch (40:53): [True: 1.35k, False: 69.9M]
  |  |  ------------------
  ------------------
  226|  69.9M|                                pu1_src[-2] + pu1_src[-3] + 2) >> 2,
  227|  69.9M|                                pu1_src[-2] - 2 * tc,
  228|  69.9M|                                pu1_src[-2] + 2 * tc);
  229|       |
  230|  69.9M|                tmp_p2 = CLIP3((pu1_src[0] + pu1_src[-1] +
  ------------------
  |  |   40|  69.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.01k, False: 69.9M]
  |  |  |  Branch (40:53): [True: 867, False: 69.9M]
  |  |  ------------------
  ------------------
  231|  69.9M|                                pu1_src[-2] + 3 * pu1_src[-3] +
  232|  69.9M|                                2 * pu1_src[-4] + 4) >> 3,
  233|  69.9M|                                pu1_src[-3] - 2 * tc,
  234|  69.9M|                                pu1_src[-3] + 2 * tc);
  235|  69.9M|            }
  236|  36.0M|            else
  237|  36.0M|            {
  238|  36.0M|                delta = (9 * (pu1_src[0] - pu1_src[-1]) -
  239|  36.0M|                                3 * (pu1_src[1] - pu1_src[-2]) + 8) >> 4;
  240|  36.0M|                if(ABS(delta) < 10 * tc)
  ------------------
  |  |   45|  36.0M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 13.3M, False: 22.6M]
  |  |  ------------------
  ------------------
  |  Branch (240:20): [True: 42.1M, False: 18.4E]
  ------------------
  241|  42.1M|                {
  242|  42.1M|                    delta = CLIP3(delta, -tc, tc);
  ------------------
  |  |   40|  42.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 2.84M, False: 39.2M]
  |  |  |  Branch (40:53): [True: 2.70M, False: 36.5M]
  |  |  ------------------
  ------------------
  243|       |
  244|  42.1M|                    tmp_p0 = CLIP_U8(pu1_src[-1] + delta);
  ------------------
  |  |   40|  42.1M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  42.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 437k, False: 41.6M]
  |  |  |  |  |  Branch (40:53): [True: 107k, False: 41.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  245|  42.1M|                    tmp_q0 = CLIP_U8(pu1_src[0] - delta);
  ------------------
  |  |   40|  42.1M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  42.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 299k, False: 41.8M]
  |  |  |  |  |  Branch (40:53): [True: 110k, False: 41.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|       |
  247|  42.1M|                    if(dep == 1)
  ------------------
  |  Branch (247:24): [True: 32.6M, False: 9.50M]
  ------------------
  248|  32.6M|                    {
  249|  32.6M|                        delta_p = CLIP3((((pu1_src[-3] + pu1_src[-1] + 1) >> 1)
  ------------------
  |  |   40|  32.6M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 311k, False: 32.3M]
  |  |  |  Branch (40:53): [True: 471k, False: 31.8M]
  |  |  ------------------
  ------------------
  250|  32.6M|                                        - pu1_src[-2] + delta) >> 1,
  251|  32.6M|                                        -(tc >> 1),
  252|  32.6M|                                        (tc >> 1));
  253|  32.6M|                        tmp_p1 = CLIP_U8(pu1_src[-2] + delta_p);
  ------------------
  |  |   40|  32.6M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  32.6M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 130k, False: 32.4M]
  |  |  |  |  |  Branch (40:53): [True: 80.4k, False: 32.4M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  32.6M|                    }
  255|       |
  256|  42.1M|                    if(deq == 1)
  ------------------
  |  Branch (256:24): [True: 29.8M, False: 12.2M]
  ------------------
  257|  29.8M|                    {
  258|  29.8M|                        delta_q = CLIP3((((pu1_src[2] + pu1_src[0] + 1) >> 1)
  ------------------
  |  |   40|  29.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 345k, False: 29.5M]
  |  |  |  Branch (40:53): [True: 513k, False: 29.0M]
  |  |  ------------------
  ------------------
  259|  29.8M|                                        - pu1_src[1] - delta) >> 1,
  260|  29.8M|                                        -(tc >> 1),
  261|  29.8M|                                        (tc >> 1));
  262|  29.8M|                        tmp_q1 = CLIP_U8(pu1_src[1] + delta_q);
  ------------------
  |  |   40|  29.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  29.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 97.4k, False: 29.7M]
  |  |  |  |  |  Branch (40:53): [True: 81.1k, False: 29.6M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|  29.8M|                    }
  264|  42.1M|                }
  265|  36.0M|            }
  266|       |
  267|   105M|            if(filter_flag_p != 0)
  ------------------
  |  Branch (267:16): [True: 105M, False: 180k]
  ------------------
  268|   105M|            {
  269|   105M|                pu1_src[-3] = tmp_p2;
  270|   105M|                pu1_src[-2] = tmp_p1;
  271|   105M|                pu1_src[-1] = tmp_p0;
  272|   105M|            }
  273|       |
  274|   105M|            if(filter_flag_q != 0)
  ------------------
  |  Branch (274:16): [True: 105M, False: 265k]
  ------------------
  275|   105M|            {
  276|   105M|                pu1_src[0] = tmp_q0;
  277|   105M|                pu1_src[1] = tmp_q1;
  278|   105M|                pu1_src[2] = tmp_q2;
  279|   105M|            }
  280|       |
  281|   105M|            pu1_src += src_strd;
  282|   105M|        }
  283|  29.1M|    }
  284|       |
  285|  31.0M|}
ihevc_deblk_luma_horz:
  344|  32.8M|{
  345|  32.8M|    WORD32 qp_luma, beta_indx, tc_indx;
  346|  32.8M|    WORD32 beta, tc;
  347|  32.8M|    WORD32 dp0, dp3, dq0, dq3, d0, d3, dp, dq, d;
  348|  32.8M|    WORD32 d_sam0, d_sam3;
  349|  32.8M|    WORD32 de, dep, deq;
  350|  32.8M|    WORD32 col;
  351|  32.8M|    WORD32 tmp_p0, tmp_p1, tmp_p2, tmp_q0, tmp_q1, tmp_q2;
  352|  32.8M|    WORD32 delta, delta_p, delta_q;
  353|       |
  354|  32.8M|    ASSERT((bs > 0));
  ------------------
  |  |   55|  32.8M|#define ASSERT(x) assert((x))
  ------------------
  355|  32.8M|    ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  32.8M|#define ASSERT(x) assert((x))
  ------------------
  356|       |
  357|  32.8M|    qp_luma = (quant_param_p + quant_param_q + 1) >> 1;
  358|  32.8M|    beta_indx = CLIP3(qp_luma + (beta_offset_div2 << 1), 0, 51);
  ------------------
  |  |   40|  32.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 20.8k, False: 32.8M]
  |  |  |  Branch (40:53): [True: 0, False: 32.8M]
  |  |  ------------------
  ------------------
  359|       |
  360|       |    /* BS based on implementation can take value 3 if it is intra/inter egde          */
  361|       |    /* based on BS, tc index is calcuated by adding 2 * ( bs - 1) to QP and tc_offset */
  362|       |    /* for BS = 1 adding factor is (0*2), BS = 2 or 3 adding factor is (1*2)          */
  363|       |    /* the above desired functionallity is achieved by doing (2*(bs>>1))              */
  364|       |
  365|  32.8M|    tc_indx = CLIP3(qp_luma + 2 * (bs >> 1) + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  32.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 32.8M]
  |  |  |  Branch (40:53): [True: 0, False: 32.8M]
  |  |  ------------------
  ------------------
  366|       |
  367|  32.8M|    beta = gai4_ihevc_beta_table[beta_indx];
  368|  32.8M|    tc = gai4_ihevc_tc_table[tc_indx];
  369|  32.8M|    if(0 == tc)
  ------------------
  |  Branch (369:8): [True: 979k, False: 31.8M]
  ------------------
  370|   979k|    {
  371|   979k|        return;
  372|   979k|    }
  373|       |
  374|  31.8M|    dq0 = ABS(pu1_src[2 * src_strd] - 2 * pu1_src[1 * src_strd] +
  ------------------
  |  |   45|  31.8M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.94M, False: 25.9M]
  |  |  ------------------
  ------------------
  375|  31.8M|                    pu1_src[0 * src_strd]);
  376|       |
  377|  31.8M|    dq3 = ABS(pu1_src[3 + 2 * src_strd] - 2 * pu1_src[3 + 1 * src_strd] +
  ------------------
  |  |   45|  31.8M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.98M, False: 25.8M]
  |  |  ------------------
  ------------------
  378|  31.8M|                    pu1_src[3 + 0 * src_strd]);
  379|       |
  380|  31.8M|    dp0 = ABS(pu1_src[-3 * src_strd] - 2 * pu1_src[-2 * src_strd] +
  ------------------
  |  |   45|  31.8M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.82M, False: 26.0M]
  |  |  ------------------
  ------------------
  381|  31.8M|                    pu1_src[-1 * src_strd]);
  382|       |
  383|  31.8M|    dp3 = ABS(pu1_src[3 - 3 * src_strd] - 2 * pu1_src[3 - 2 * src_strd] +
  ------------------
  |  |   45|  31.8M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.73M, False: 26.1M]
  |  |  ------------------
  ------------------
  384|  31.8M|                    pu1_src[3 - 1 * src_strd]);
  385|       |
  386|  31.8M|    d0 = dp0 + dq0;
  387|  31.8M|    d3 = dp3 + dq3;
  388|       |
  389|  31.8M|    dp = dp0 + dp3;
  390|  31.8M|    dq = dq0 + dq3;
  391|       |
  392|  31.8M|    d = d0 + d3;
  393|       |
  394|  31.8M|    de = 0;
  395|  31.8M|    dep = 0;
  396|  31.8M|    deq = 0;
  397|       |
  398|  31.8M|    if(d < beta)
  ------------------
  |  Branch (398:8): [True: 28.6M, False: 3.15M]
  ------------------
  399|  28.6M|    {
  400|  28.6M|        d_sam0 = 0;
  401|  28.6M|        if((2 * d0 < (beta >> 2))
  ------------------
  |  Branch (401:12): [True: 26.4M, False: 2.27M]
  ------------------
  402|  28.6M|                        && (ABS(pu1_src[3 * src_strd] - pu1_src[0 * src_strd]) +
  ------------------
  |  |   45|  26.4M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 4.32M, False: 22.0M]
  |  |  ------------------
  ------------------
  |  Branch (402:28): [True: 21.3M, False: 5.10M]
  ------------------
  403|  26.4M|                                        ABS(pu1_src[-1 * src_strd] - pu1_src[-4 * src_strd])
  ------------------
  |  |   45|  26.4M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 4.15M, False: 22.2M]
  |  |  ------------------
  ------------------
  404|  26.4M|                                        < (beta >> 3))
  405|  28.6M|                        && ABS(pu1_src[0 * src_strd] - pu1_src[-1 * src_strd])
  ------------------
  |  |   45|  21.2M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 1.56M, False: 19.7M]
  |  |  ------------------
  ------------------
  |  Branch (405:28): [True: 20.9M, False: 329k]
  ------------------
  406|  21.2M|                        < ((5 * tc + 1) >> 1))
  407|  20.9M|        {
  408|  20.9M|            d_sam0 = 1;
  409|  20.9M|        }
  410|       |
  411|  28.6M|        pu1_src += 3;
  412|  28.6M|        d_sam3 = 0;
  413|  28.6M|        if((2 * d3 < (beta >> 2))
  ------------------
  |  Branch (413:12): [True: 26.6M, False: 2.04M]
  ------------------
  414|  28.6M|                        && (ABS(pu1_src[3 * src_strd] - pu1_src[0 * src_strd]) +
  ------------------
  |  |   45|  26.6M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 4.57M, False: 22.0M]
  |  |  ------------------
  ------------------
  |  Branch (414:28): [True: 20.9M, False: 5.70M]
  ------------------
  415|  26.6M|                                        ABS(pu1_src[-1 * src_strd] - pu1_src[-4 * src_strd])
  ------------------
  |  |   45|  26.6M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 4.31M, False: 22.3M]
  |  |  ------------------
  ------------------
  416|  26.6M|                                        < (beta >> 3))
  417|  28.6M|                        && ABS(pu1_src[0 * src_strd] - pu1_src[-1 * src_strd])
  ------------------
  |  |   45|  20.8M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 1.46M, False: 19.4M]
  |  |  ------------------
  ------------------
  |  Branch (417:28): [True: 20.5M, False: 322k]
  ------------------
  418|  20.8M|                        < ((5 * tc + 1) >> 1))
  419|  20.6M|        {
  420|  20.6M|            d_sam3 = 1;
  421|  20.6M|        }
  422|  28.6M|        pu1_src -= 3;
  423|       |
  424|  28.6M|        de = (d_sam0 == 1 && d_sam3 == 1) ? 2 : 1;
  ------------------
  |  Branch (424:15): [True: 20.7M, False: 7.90M]
  |  Branch (424:30): [True: 19.4M, False: 1.30M]
  ------------------
  425|  28.6M|        dep = (dp < ((beta + (beta >> 1)) >> 3)) ? 1 : 0;
  ------------------
  |  Branch (425:15): [True: 27.4M, False: 1.21M]
  ------------------
  426|  28.6M|        deq = (dq < ((beta + (beta >> 1)) >> 3)) ? 1 : 0;
  ------------------
  |  Branch (426:15): [True: 26.9M, False: 1.79M]
  ------------------
  427|  28.6M|        if(tc <= 1)
  ------------------
  |  Branch (427:12): [True: 659k, False: 28.0M]
  ------------------
  428|   659k|        {
  429|   659k|            dep = 0;
  430|   659k|            deq = 0;
  431|   659k|        }
  432|  28.6M|    }
  433|       |
  434|  31.8M|    if(de != 0)
  ------------------
  |  Branch (434:8): [True: 29.0M, False: 2.75M]
  ------------------
  435|  29.0M|    {
  436|   137M|        for(col = 0; col < 4; col++)
  ------------------
  |  Branch (436:22): [True: 108M, False: 29.0M]
  ------------------
  437|   108M|        {
  438|   108M|            tmp_p0 = pu1_src[-1 * src_strd];
  439|   108M|            tmp_p1 = pu1_src[-2 * src_strd];
  440|   108M|            tmp_p2 = pu1_src[-3 * src_strd];
  441|       |
  442|   108M|            tmp_q0 = pu1_src[0 * src_strd];
  443|   108M|            tmp_q1 = pu1_src[1 * src_strd];
  444|   108M|            tmp_q2 = pu1_src[2 * src_strd];
  445|   108M|            if(de == 2)
  ------------------
  |  Branch (445:16): [True: 72.5M, False: 35.4M]
  ------------------
  446|  72.5M|            {
  447|  72.5M|                tmp_q0 = CLIP3((pu1_src[2 * src_strd] +
  ------------------
  |  |   40|  72.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 2.81k, False: 72.5M]
  |  |  |  Branch (40:53): [True: 2.72k, False: 72.5M]
  |  |  ------------------
  ------------------
  448|  72.5M|                                2 * pu1_src[1 * src_strd] +
  449|  72.5M|                                2 * pu1_src[0 * src_strd] +
  450|  72.5M|                                2 * pu1_src[-1 * src_strd] +
  451|  72.5M|                                pu1_src[-2 * src_strd] + 4) >> 3,
  452|  72.5M|                                pu1_src[0 * src_strd] - 2 * tc,
  453|  72.5M|                                pu1_src[0 * src_strd] + 2 * tc);
  454|       |
  455|  72.5M|                tmp_q1 = CLIP3((pu1_src[2 * src_strd] +
  ------------------
  |  |   40|  72.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.86k, False: 72.5M]
  |  |  |  Branch (40:53): [True: 2.23k, False: 72.5M]
  |  |  ------------------
  ------------------
  456|  72.5M|                                pu1_src[1 * src_strd] +
  457|  72.5M|                                pu1_src[0 * src_strd] +
  458|  72.5M|                                pu1_src[-1 * src_strd] + 2) >> 2,
  459|  72.5M|                                pu1_src[1 * src_strd] - 2 * tc,
  460|  72.5M|                                pu1_src[1 * src_strd] + 2 * tc);
  461|       |
  462|  72.5M|                tmp_q2 = CLIP3((2 * pu1_src[3 * src_strd] +
  ------------------
  |  |   40|  72.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.38k, False: 72.5M]
  |  |  |  Branch (40:53): [True: 971, False: 72.5M]
  |  |  ------------------
  ------------------
  463|  72.5M|                                3 * pu1_src[2 * src_strd] +
  464|  72.5M|                                pu1_src[1 * src_strd] +
  465|  72.5M|                                pu1_src[0 * src_strd] +
  466|  72.5M|                                pu1_src[-1 * src_strd] + 4) >> 3,
  467|  72.5M|                                pu1_src[2 * src_strd] - 2 * tc,
  468|  72.5M|                                pu1_src[2 * src_strd] + 2 * tc);
  469|       |
  470|  72.5M|                tmp_p0 = CLIP3((pu1_src[1 * src_strd] +
  ------------------
  |  |   40|  72.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 3.07k, False: 72.5M]
  |  |  |  Branch (40:53): [True: 2.48k, False: 72.5M]
  |  |  ------------------
  ------------------
  471|  72.5M|                                2 * pu1_src[0 * src_strd] +
  472|  72.5M|                                2 * pu1_src[-1 * src_strd] +
  473|  72.5M|                                2 * pu1_src[-2 * src_strd] +
  474|  72.5M|                                pu1_src[-3 * src_strd] + 4) >> 3,
  475|  72.5M|                                pu1_src[-1 * src_strd] - 2 * tc,
  476|  72.5M|                                pu1_src[-1 * src_strd] + 2 * tc);
  477|       |
  478|  72.5M|                tmp_p1 = CLIP3((pu1_src[0 * src_strd] +
  ------------------
  |  |   40|  72.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 2.18k, False: 72.5M]
  |  |  |  Branch (40:53): [True: 1.99k, False: 72.5M]
  |  |  ------------------
  ------------------
  479|  72.5M|                                pu1_src[-1 * src_strd] +
  480|  72.5M|                                pu1_src[-2 * src_strd] +
  481|  72.5M|                                pu1_src[-3 * src_strd] + 2) >> 2,
  482|  72.5M|                                pu1_src[-2 * src_strd] - 2 * tc,
  483|  72.5M|                                pu1_src[-2 * src_strd] + 2 * tc);
  484|       |
  485|  72.5M|                tmp_p2 = CLIP3((pu1_src[0 * src_strd] +
  ------------------
  |  |   40|  72.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.54k, False: 72.5M]
  |  |  |  Branch (40:53): [True: 1.33k, False: 72.5M]
  |  |  ------------------
  ------------------
  486|  72.5M|                                pu1_src[-1 * src_strd] +
  487|  72.5M|                                pu1_src[-2 * src_strd] +
  488|  72.5M|                                3 * pu1_src[-3 * src_strd] +
  489|  72.5M|                                2 * pu1_src[-4 * src_strd] + 4) >> 3,
  490|  72.5M|                                pu1_src[-3 * src_strd] - 2 * tc,
  491|  72.5M|                                pu1_src[-3 * src_strd] + 2 * tc);
  492|  72.5M|            }
  493|  35.4M|            else
  494|  35.4M|            {
  495|  35.4M|                delta = (9 * (pu1_src[0 * src_strd] - pu1_src[-1 * src_strd]) -
  496|  35.4M|                                3 * (pu1_src[1 * src_strd] - pu1_src[-2 * src_strd]) +
  497|  35.4M|                                8) >> 4;
  498|  35.4M|                if(ABS(delta) < 10 * tc)
  ------------------
  |  |   45|  35.4M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 13.7M, False: 21.7M]
  |  |  ------------------
  ------------------
  |  Branch (498:20): [True: 42.7M, False: 18.4E]
  ------------------
  499|  42.7M|                {
  500|  42.7M|                    delta = CLIP3(delta, -tc, tc);
  ------------------
  |  |   40|  42.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 3.43M, False: 39.2M]
  |  |  |  Branch (40:53): [True: 3.35M, False: 35.9M]
  |  |  ------------------
  ------------------
  501|       |
  502|  42.7M|                    tmp_p0 = CLIP_U8(pu1_src[-1 * src_strd] + delta);
  ------------------
  |  |   40|  42.7M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  42.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 266k, False: 42.4M]
  |  |  |  |  |  Branch (40:53): [True: 91.2k, False: 42.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|  42.7M|                    tmp_q0 = CLIP_U8(pu1_src[0 * src_strd] - delta);
  ------------------
  |  |   40|  42.7M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  42.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 316k, False: 42.4M]
  |  |  |  |  |  Branch (40:53): [True: 97.3k, False: 42.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  504|       |
  505|  42.7M|                    if(dep == 1)
  ------------------
  |  Branch (505:24): [True: 36.4M, False: 6.30M]
  ------------------
  506|  36.4M|                    {
  507|  36.4M|                        delta_p = CLIP3((((pu1_src[-3 * src_strd] +
  ------------------
  |  |   40|  36.4M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 344k, False: 36.0M]
  |  |  |  Branch (40:53): [True: 598k, False: 35.4M]
  |  |  ------------------
  ------------------
  508|  36.4M|                                        pu1_src[-1 * src_strd] + 1) >> 1) -
  509|  36.4M|                                        pu1_src[-2 * src_strd] + delta) >> 1,
  510|  36.4M|                                        -(tc >> 1),
  511|  36.4M|                                        (tc >> 1));
  512|  36.4M|                        tmp_p1 = CLIP_U8(pu1_src[-2 * src_strd] + delta_p);
  ------------------
  |  |   40|  36.4M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  36.4M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 105k, False: 36.3M]
  |  |  |  |  |  Branch (40:53): [True: 68.1k, False: 36.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|  36.4M|                    }
  514|       |
  515|  42.7M|                    if(deq == 1)
  ------------------
  |  Branch (515:24): [True: 34.3M, False: 8.40M]
  ------------------
  516|  34.3M|                    {
  517|  34.3M|                        delta_q = CLIP3((((pu1_src[2 * src_strd] +
  ------------------
  |  |   40|  34.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 543k, False: 33.7M]
  |  |  |  Branch (40:53): [True: 497k, False: 33.2M]
  |  |  ------------------
  ------------------
  518|  34.3M|                                        pu1_src[0 * src_strd] + 1) >> 1) -
  519|  34.3M|                                        pu1_src[1 * src_strd] - delta) >> 1,
  520|  34.3M|                                        -(tc >> 1),
  521|  34.3M|                                        (tc >> 1));
  522|  34.3M|                        tmp_q1 = CLIP_U8(pu1_src[1 * src_strd] + delta_q);
  ------------------
  |  |   40|  34.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  34.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 116k, False: 34.2M]
  |  |  |  |  |  Branch (40:53): [True: 71.1k, False: 34.1M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|  34.3M|                    }
  524|  42.7M|                }
  525|  35.4M|            }
  526|       |
  527|   108M|            if(filter_flag_p != 0)
  ------------------
  |  Branch (527:16): [True: 107M, False: 81.2k]
  ------------------
  528|   107M|            {
  529|   107M|                pu1_src[-3 * src_strd] = tmp_p2;
  530|   107M|                pu1_src[-2 * src_strd] = tmp_p1;
  531|   107M|                pu1_src[-1 * src_strd] = tmp_p0;
  532|   107M|            }
  533|       |
  534|   108M|            if(filter_flag_q != 0)
  ------------------
  |  Branch (534:16): [True: 108M, False: 18.4E]
  ------------------
  535|   108M|            {
  536|   108M|                pu1_src[0 * src_strd] = tmp_q0;
  537|   108M|                pu1_src[1 * src_strd] = tmp_q1;
  538|   108M|                pu1_src[2 * src_strd] = tmp_q2;
  539|   108M|            }
  540|       |
  541|   108M|            pu1_src += 1;
  542|   108M|        }
  543|  29.0M|    }
  544|       |
  545|  31.8M|}
ihevc_deblk_chroma_vert:
  602|  13.0M|{
  603|  13.0M|    WORD32 qp_indx_u, qp_chroma_u;
  604|  13.0M|    WORD32 qp_indx_v, qp_chroma_v;
  605|  13.0M|    WORD32 tc_indx_u, tc_u;
  606|  13.0M|    WORD32 tc_indx_v, tc_v;
  607|  13.0M|    WORD32 delta_u, tmp_p0_u, tmp_q0_u;
  608|  13.0M|    WORD32 delta_v, tmp_p0_v, tmp_q0_v;
  609|  13.0M|    WORD32 row;
  610|       |
  611|  13.0M|    ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  13.0M|#define ASSERT(x) assert((x))
  ------------------
  612|       |
  613|       |    /* chroma processing is done only if BS is 2             */
  614|       |    /* this function is assumed to be called only if BS is 2 */
  615|  13.0M|    qp_indx_u = qp_offset_u + ((quant_param_p + quant_param_q + 1) >> 1);
  616|  13.0M|    qp_chroma_u = qp_indx_u < 0 ? qp_indx_u : (qp_indx_u > 57 ? qp_indx_u - 6 : gai4_ihevc_qp_table[qp_indx_u]);
  ------------------
  |  Branch (616:19): [True: 16, False: 13.0M]
  |  Branch (616:48): [True: 55.0k, False: 12.9M]
  ------------------
  617|       |
  618|  13.0M|    qp_indx_v = qp_offset_v + ((quant_param_p + quant_param_q + 1) >> 1);
  619|  13.0M|    qp_chroma_v = qp_indx_v < 0 ? qp_indx_v : (qp_indx_v > 57 ? qp_indx_v - 6 : gai4_ihevc_qp_table[qp_indx_v]);
  ------------------
  |  Branch (619:19): [True: 1.56k, False: 13.0M]
  |  Branch (619:48): [True: 20, False: 13.0M]
  ------------------
  620|       |
  621|  13.0M|    tc_indx_u = CLIP3(qp_chroma_u + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  13.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 55.0k, False: 12.9M]
  |  |  |  Branch (40:53): [True: 16, False: 12.9M]
  |  |  ------------------
  ------------------
  622|  13.0M|    tc_u = gai4_ihevc_tc_table[tc_indx_u];
  623|       |
  624|  13.0M|    tc_indx_v = CLIP3(qp_chroma_v + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  13.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 20, False: 13.0M]
  |  |  |  Branch (40:53): [True: 0, False: 13.0M]
  |  |  ------------------
  ------------------
  625|  13.0M|    tc_v = gai4_ihevc_tc_table[tc_indx_v];
  626|       |
  627|  13.0M|    if(0 == tc_u && 0 == tc_v)
  ------------------
  |  Branch (627:8): [True: 291k, False: 12.7M]
  |  Branch (627:21): [True: 273k, False: 18.3k]
  ------------------
  628|   273k|    {
  629|   273k|        return;
  630|   273k|    }
  631|       |
  632|  63.6M|    for(row = 0; row < 4; row++)
  ------------------
  |  Branch (632:18): [True: 50.9M, False: 12.7M]
  ------------------
  633|  50.9M|    {
  634|  50.9M|        delta_u = CLIP3((((pu1_src[0] - pu1_src[-2]) << 2) +
  ------------------
  |  |   40|  50.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 814k, False: 50.1M]
  |  |  |  Branch (40:53): [True: 742k, False: 49.3M]
  |  |  ------------------
  ------------------
  635|  50.9M|                        pu1_src[-4] - pu1_src[2] + 4) >> 3,
  636|  50.9M|                        -tc_u, tc_u);
  637|       |
  638|  50.9M|        tmp_p0_u = CLIP_U8(pu1_src[-2] + delta_u);
  ------------------
  |  |   40|  50.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  50.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 16.2k, False: 50.9M]
  |  |  |  |  |  Branch (40:53): [True: 7.25k, False: 50.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  639|  50.9M|        tmp_q0_u = CLIP_U8(pu1_src[0] - delta_u);
  ------------------
  |  |   40|  50.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  50.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 14.1k, False: 50.9M]
  |  |  |  |  |  Branch (40:53): [True: 7.93k, False: 50.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  640|       |
  641|  50.9M|        delta_v = CLIP3((((pu1_src[1] - pu1_src[-1]) << 2) +
  ------------------
  |  |   40|  50.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 765k, False: 50.1M]
  |  |  |  Branch (40:53): [True: 718k, False: 49.4M]
  |  |  ------------------
  ------------------
  642|  50.9M|                        pu1_src[-3] - pu1_src[3] + 4) >> 3,
  643|  50.9M|                        -tc_v, tc_v);
  644|       |
  645|  50.9M|        tmp_p0_v = CLIP_U8(pu1_src[-1] + delta_v);
  ------------------
  |  |   40|  50.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  50.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 12.5k, False: 50.9M]
  |  |  |  |  |  Branch (40:53): [True: 8.68k, False: 50.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|  50.9M|        tmp_q0_v = CLIP_U8(pu1_src[1] - delta_v);
  ------------------
  |  |   40|  50.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  50.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 14.9k, False: 50.9M]
  |  |  |  |  |  Branch (40:53): [True: 9.13k, False: 50.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|       |
  648|  50.9M|        if(filter_flag_p != 0)
  ------------------
  |  Branch (648:12): [True: 50.8M, False: 65.5k]
  ------------------
  649|  50.8M|        {
  650|  50.8M|            pu1_src[-2] = tmp_p0_u;
  651|  50.8M|            pu1_src[-1] = tmp_p0_v;
  652|  50.8M|        }
  653|       |
  654|  50.9M|        if(filter_flag_q != 0)
  ------------------
  |  Branch (654:12): [True: 50.8M, False: 54.1k]
  ------------------
  655|  50.8M|        {
  656|  50.8M|            pu1_src[0] = tmp_q0_u;
  657|  50.8M|            pu1_src[1] = tmp_q0_v;
  658|  50.8M|        }
  659|       |
  660|  50.9M|        pu1_src += src_strd;
  661|  50.9M|    }
  662|       |
  663|  12.7M|}
ihevc_deblk_chroma_horz:
  722|  12.5M|{
  723|  12.5M|    WORD32 qp_indx_u, qp_chroma_u;
  724|  12.5M|    WORD32 qp_indx_v, qp_chroma_v;
  725|  12.5M|    WORD32 tc_indx_u, tc_u;
  726|  12.5M|    WORD32 tc_indx_v, tc_v;
  727|  12.5M|    WORD32 tc;
  728|       |
  729|  12.5M|    WORD32 delta, tmp_p0, tmp_q0;
  730|  12.5M|    WORD32 col;
  731|       |
  732|  12.5M|    ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  12.5M|#define ASSERT(x) assert((x))
  ------------------
  733|       |
  734|       |    /* chroma processing is done only if BS is 2             */
  735|       |    /* this function is assumed to be called only if BS is 2 */
  736|  12.5M|    qp_indx_u = qp_offset_u + ((quant_param_p + quant_param_q + 1) >> 1);
  737|  12.5M|    qp_chroma_u = qp_indx_u < 0 ? qp_indx_u : (qp_indx_u > 57 ? qp_indx_u - 6 : gai4_ihevc_qp_table[qp_indx_u]);
  ------------------
  |  Branch (737:19): [True: 16, False: 12.5M]
  |  Branch (737:48): [True: 47.3k, False: 12.4M]
  ------------------
  738|       |
  739|  12.5M|    qp_indx_v = qp_offset_v + ((quant_param_p + quant_param_q + 1) >> 1);
  740|  12.5M|    qp_chroma_v = qp_indx_v < 0 ? qp_indx_v : (qp_indx_v > 57 ? qp_indx_v - 6 : gai4_ihevc_qp_table[qp_indx_v]);
  ------------------
  |  Branch (740:19): [True: 1.26k, False: 12.5M]
  |  Branch (740:48): [True: 18, False: 12.5M]
  ------------------
  741|       |
  742|  12.5M|    tc_indx_u = CLIP3(qp_chroma_u + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  12.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 47.3k, False: 12.4M]
  |  |  |  Branch (40:53): [True: 16, False: 12.4M]
  |  |  ------------------
  ------------------
  743|  12.5M|    tc_u = gai4_ihevc_tc_table[tc_indx_u];
  744|       |
  745|  12.5M|    tc_indx_v = CLIP3(qp_chroma_v + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  12.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 18, False: 12.5M]
  |  |  |  Branch (40:53): [True: 0, False: 12.5M]
  |  |  ------------------
  ------------------
  746|  12.5M|    tc_v = gai4_ihevc_tc_table[tc_indx_v];
  747|       |
  748|  12.5M|    if(0 == tc_u && 0 == tc_v)
  ------------------
  |  Branch (748:8): [True: 278k, False: 12.2M]
  |  Branch (748:21): [True: 260k, False: 17.7k]
  ------------------
  749|   260k|    {
  750|   260k|        return;
  751|   260k|    }
  752|       |
  753|   109M|    for(col = 0; col < 8; col++)
  ------------------
  |  Branch (753:18): [True: 97.3M, False: 12.2M]
  ------------------
  754|  97.3M|    {
  755|  97.3M|        tc = (col & 1) ? tc_v : tc_u;
  ------------------
  |  Branch (755:14): [True: 48.7M, False: 48.6M]
  ------------------
  756|  97.3M|        delta = CLIP3((((pu1_src[0 * src_strd] -
  ------------------
  |  |   40|  97.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.82M, False: 95.5M]
  |  |  |  Branch (40:53): [True: 1.75M, False: 93.8M]
  |  |  ------------------
  ------------------
  757|  97.3M|                      pu1_src[-1 * src_strd]) << 2) +
  758|  97.3M|                      pu1_src[-2 * src_strd] -
  759|  97.3M|                      pu1_src[1 * src_strd] + 4) >> 3,
  760|  97.3M|                      -tc, tc);
  761|       |
  762|  97.3M|        tmp_p0 = CLIP_U8(pu1_src[-1 * src_strd] + delta);
  ------------------
  |  |   40|  97.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  97.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 19.2k, False: 97.3M]
  |  |  |  |  |  Branch (40:53): [True: 12.3k, False: 97.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|  97.3M|        tmp_q0 = CLIP_U8(pu1_src[0 * src_strd] - delta);
  ------------------
  |  |   40|  97.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  97.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 25.6k, False: 97.3M]
  |  |  |  |  |  Branch (40:53): [True: 21.3k, False: 97.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  764|       |
  765|  97.3M|        if(filter_flag_p != 0)
  ------------------
  |  Branch (765:12): [True: 97.2M, False: 163k]
  ------------------
  766|  97.2M|        {
  767|  97.2M|            pu1_src[-1 * src_strd] = tmp_p0;
  768|  97.2M|        }
  769|       |
  770|  97.3M|        if(filter_flag_q != 0)
  ------------------
  |  Branch (770:12): [True: 97.2M, False: 109k]
  ------------------
  771|  97.2M|        {
  772|  97.2M|            pu1_src[0 * src_strd] = tmp_q0;
  773|  97.2M|        }
  774|       |
  775|  97.3M|        pu1_src += 1;
  776|  97.3M|    }
  777|       |
  778|  12.2M|}

ihevc_disp_mgr_init:
   67|    985|{
   68|    985|    WORD32 id;
   69|       |
   70|    985|    ps_disp_mgr->u4_last_abs_poc = DEFAULT_POC;
  ------------------
  |  |   39|    985|#define DEFAULT_POC 0x7FFFFFFF
  ------------------
   71|       |
   72|  64.0k|    for(id = 0; id < DISP_MGR_MAX_CNT; id++)
  ------------------
  |  |   38|  64.0k|#define DISP_MGR_MAX_CNT 64
  ------------------
  |  Branch (72:17): [True: 63.0k, False: 985]
  ------------------
   73|  63.0k|    {
   74|  63.0k|        ps_disp_mgr->ai4_abs_poc[id] = DEFAULT_POC;
  ------------------
  |  |   39|  63.0k|#define DEFAULT_POC 0x7FFFFFFF
  ------------------
   75|  63.0k|        ps_disp_mgr->apv_ptr[id] = NULL;
   76|  63.0k|    }
   77|    985|}
ihevc_disp_mgr_add:
  112|  5.35k|{
  113|  5.35k|    if(buf_id >= DISP_MGR_MAX_CNT)
  ------------------
  |  |   38|  5.35k|#define DISP_MGR_MAX_CNT 64
  ------------------
  |  Branch (113:8): [True: 0, False: 5.35k]
  ------------------
  114|      0|    {
  115|      0|        return (-1);
  116|      0|    }
  117|       |
  118|  5.35k|    if(ps_disp_mgr->apv_ptr[buf_id] != NULL)
  ------------------
  |  Branch (118:8): [True: 0, False: 5.35k]
  ------------------
  119|      0|    {
  120|      0|        return (-1);
  121|      0|    }
  122|       |
  123|  5.35k|    ps_disp_mgr->apv_ptr[buf_id] = pv_ptr;
  124|  5.35k|    ps_disp_mgr->ai4_abs_poc[buf_id] = abs_poc;
  125|  5.35k|    return 0;
  126|  5.35k|}
ihevc_disp_mgr_get:
  154|  4.85k|{
  155|  4.85k|    WORD32 id;
  156|  4.85k|    void *pv_ret_ptr;
  157|  4.85k|    WORD32 i4_min_poc;
  158|  4.85k|    WORD32 min_poc_id;
  159|       |
  160|       |
  161|  4.85k|    pv_ret_ptr = NULL;
  162|  4.85k|    i4_min_poc = 0x7FFFFFFF;
  163|  4.85k|    min_poc_id = -1;
  164|       |
  165|       |    /* Find minimum POC */
  166|   315k|    for(id = 0; id < DISP_MGR_MAX_CNT; id++)
  ------------------
  |  |   38|   315k|#define DISP_MGR_MAX_CNT 64
  ------------------
  |  Branch (166:17): [True: 310k, False: 4.85k]
  ------------------
  167|   310k|    {
  168|   310k|        if((DEFAULT_POC != ps_disp_mgr->ai4_abs_poc[id]) &&
  ------------------
  |  |   39|   310k|#define DEFAULT_POC 0x7FFFFFFF
  ------------------
  |  Branch (168:12): [True: 7.55k, False: 303k]
  ------------------
  169|   310k|                        (ps_disp_mgr->ai4_abs_poc[id] <= i4_min_poc))
  ------------------
  |  Branch (169:25): [True: 5.50k, False: 2.05k]
  ------------------
  170|  5.50k|        {
  171|  5.50k|            i4_min_poc = ps_disp_mgr->ai4_abs_poc[id];
  172|  5.50k|            min_poc_id = id;
  173|  5.50k|        }
  174|   310k|    }
  175|  4.85k|    *pi4_buf_id = min_poc_id;
  176|       |    /* If all pocs are still default_poc then return NULL */
  177|  4.85k|    if(-1 == min_poc_id)
  ------------------
  |  Branch (177:8): [True: 0, False: 4.85k]
  ------------------
  178|      0|    {
  179|      0|        return NULL;
  180|      0|    }
  181|       |
  182|  4.85k|    pv_ret_ptr = ps_disp_mgr->apv_ptr[min_poc_id];
  183|       |
  184|       |    /* Set abs poc to default and apv_ptr to null so that the buffer is not returned again */
  185|  4.85k|    ps_disp_mgr->apv_ptr[min_poc_id] = NULL;
  186|  4.85k|    ps_disp_mgr->ai4_abs_poc[min_poc_id] = DEFAULT_POC;
  ------------------
  |  |   39|  4.85k|#define DEFAULT_POC 0x7FFFFFFF
  ------------------
  187|  4.85k|    return pv_ret_ptr;
  188|  4.85k|}

ihevc_dpb_mgr_init:
   76|    985|{
   77|    985|    UWORD32 i;
   78|    985|    dpb_info_t *ps_dpb_info = ps_dpb_mgr->as_dpb_info;
   79|  64.0k|    for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|  64.0k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|  64.0k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (79:16): [True: 63.0k, False: 985]
  ------------------
   80|  63.0k|    {
   81|  63.0k|        ps_dpb_info[i].ps_prev_dpb = NULL;
   82|  63.0k|        ps_dpb_info[i].ps_pic_buf = NULL;
   83|       |
   84|  63.0k|    }
   85|       |
   86|    985|    ps_dpb_mgr->u1_num_ref_bufs = 0;
   87|    985|    ps_dpb_mgr->ps_dpb_head = NULL;
   88|       |
   89|    985|}
ihevc_dpb_mgr_insert_ref:
  122|  5.35k|{
  123|  5.35k|    int i;
  124|  5.35k|    dpb_info_t *ps_dpb_info;
  125|       |
  126|  5.35k|    ps_dpb_info = ps_dpb_mgr->as_dpb_info;
  127|       |
  128|       |    /* Return error if buffer is already present in the DPB */
  129|   348k|    for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|   348k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|   348k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (129:16): [True: 342k, False: 5.35k]
  ------------------
  130|   342k|    {
  131|   342k|        if((ps_dpb_info[i].ps_pic_buf == ps_pic_buf)
  ------------------
  |  Branch (131:12): [True: 0, False: 342k]
  ------------------
  132|   342k|                        && (ps_dpb_info[i].ps_pic_buf->u1_used_as_ref))
  ------------------
  |  Branch (132:28): [True: 0, False: 0]
  ------------------
  133|      0|        {
  134|      0|            return (-1);
  135|      0|        }
  136|       |
  137|       |
  138|   342k|    }
  139|       |
  140|       |    /* Find an unused DPB location */
  141|  7.11k|    for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|  7.11k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|  7.11k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (141:16): [True: 7.11k, False: 0]
  ------------------
  142|  7.11k|    {
  143|  7.11k|        if(NULL == ps_dpb_info[i].ps_pic_buf)
  ------------------
  |  Branch (143:12): [True: 5.35k, False: 1.76k]
  ------------------
  144|  5.35k|        {
  145|  5.35k|            break;
  146|  5.35k|        }
  147|  7.11k|    }
  148|  5.35k|    if(i == MAX_DPB_BUFS)
  ------------------
  |  |   41|  5.35k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|  5.35k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (148:8): [True: 0, False: 5.35k]
  ------------------
  149|      0|    {
  150|      0|        return (-1);
  151|      0|    }
  152|       |
  153|       |    /* Create DPB info */
  154|  5.35k|    ps_dpb_info[i].ps_pic_buf = ps_pic_buf;
  155|  5.35k|    ps_dpb_info[i].ps_prev_dpb = ps_dpb_mgr->ps_dpb_head;
  156|  5.35k|    ps_dpb_info[i].ps_pic_buf->u1_buf_id = buf_id;
  157|  5.35k|    ps_dpb_info[i].ps_pic_buf->u1_used_as_ref = SHORT_TERM_REF;
  158|       |
  159|       |    /* update the head node of linked list to point to the current picture */
  160|  5.35k|    ps_dpb_mgr->ps_dpb_head = ps_dpb_info + i;
  161|       |
  162|       |    /* Increment Short term buffer count */
  163|  5.35k|    ps_dpb_mgr->u1_num_ref_bufs++;
  164|       |
  165|  5.35k|    return 0;
  166|  5.35k|}
ihevc_dpb_mgr_del_ref:
  199|  4.35k|{
  200|  4.35k|    int i;
  201|  4.35k|    dpb_info_t *ps_next_dpb;
  202|       |
  203|  4.35k|    dpb_info_t *ps_unmark_node;
  204|  4.35k|    UWORD8 u1_del_node;
  205|  4.35k|    UNUSED(u1_del_node);
  ------------------
  |  |   38|  4.35k|#define UNUSED(x) ((void)(x))
  ------------------
  206|  4.35k|    u1_del_node = 0;
  207|       |
  208|       |    /* Find the node with matching absolute POC */
  209|  4.35k|    ps_next_dpb = ps_dpb_mgr->ps_dpb_head;
  210|  4.35k|    if(ps_next_dpb->ps_pic_buf->i4_abs_poc == i4_abs_poc)
  ------------------
  |  Branch (210:8): [True: 3.90k, False: 448]
  ------------------
  211|  3.90k|    {
  212|  3.90k|        ps_unmark_node = ps_next_dpb;
  213|  3.90k|    }
  214|    448|    else
  215|    448|    {
  216|    501|        for(i = 1; i < ps_dpb_mgr->u1_num_ref_bufs; i++)
  ------------------
  |  Branch (216:20): [True: 501, False: 0]
  ------------------
  217|    501|        {
  218|    501|            if(ps_next_dpb->ps_prev_dpb->ps_pic_buf->i4_abs_poc == i4_abs_poc)
  ------------------
  |  Branch (218:16): [True: 448, False: 53]
  ------------------
  219|    448|                break;
  220|     53|            ps_next_dpb = ps_next_dpb->ps_prev_dpb;
  221|     53|        }
  222|       |
  223|    448|        if(i == ps_dpb_mgr->u1_num_ref_bufs)
  ------------------
  |  Branch (223:12): [True: 0, False: 448]
  ------------------
  224|      0|        {
  225|      0|            return;
  226|      0|        }
  227|    448|        else
  228|    448|            ps_unmark_node = ps_next_dpb->ps_prev_dpb;
  229|    448|    }
  230|       |
  231|  4.35k|    if(ps_unmark_node == ps_dpb_mgr->ps_dpb_head)
  ------------------
  |  Branch (231:8): [True: 3.90k, False: 448]
  ------------------
  232|  3.90k|    {
  233|  3.90k|        ps_dpb_mgr->ps_dpb_head = ps_unmark_node->ps_prev_dpb;
  234|  3.90k|    }
  235|    448|    else
  236|    448|    {
  237|    448|        ps_next_dpb->ps_prev_dpb = ps_unmark_node->ps_prev_dpb; //update link
  238|    448|        ps_unmark_node->ps_prev_dpb = NULL;
  239|    448|    }
  240|  4.35k|    ps_dpb_mgr->u1_num_ref_bufs--; //decrement buffer count
  241|       |
  242|       |    /* Release the physical buffer */
  243|  4.35k|    ihevc_buf_mgr_release((buf_mgr_t *)ps_buf_mgr, ps_unmark_node->ps_pic_buf->u1_buf_id,
  244|  4.35k|                          BUF_MGR_REF);
  ------------------
  |  |   40|  4.35k|#define BUF_MGR_REF         (1 << 1)
  ------------------
  245|  4.35k|    ps_unmark_node->ps_prev_dpb = NULL;
  246|  4.35k|    ps_unmark_node->ps_pic_buf = NULL;
  247|  4.35k|}
ihevc_dpb_mgr_get_ref_by_nearest_poc:
  276|  11.9k|{
  277|  11.9k|    WORD32 i;
  278|  11.9k|    WORD32 min_diff = 0x7FFFFFFF;
  279|  11.9k|    pic_buf_t *ps_pic_buf = NULL;
  280|       |
  281|   777k|    for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|   777k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|   777k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (281:16): [True: 765k, False: 11.9k]
  ------------------
  282|   765k|    {
  283|   765k|        if((ps_dpb_mgr->as_dpb_info[i].ps_pic_buf) &&
  ------------------
  |  Branch (283:12): [True: 13.5k, False: 752k]
  ------------------
  284|   765k|                        (ps_dpb_mgr->as_dpb_info[i].ps_pic_buf->u1_used_as_ref != UNUSED_FOR_REF))
  ------------------
  |  Branch (284:25): [True: 9.38k, False: 4.19k]
  ------------------
  285|  9.38k|        {
  286|  9.38k|            WORD32 poc_diff = cur_abs_poc - ps_dpb_mgr->as_dpb_info[i].ps_pic_buf->i4_abs_poc;
  287|  9.38k|            if((poc_diff > 0) && (poc_diff < min_diff))
  ------------------
  |  Branch (287:16): [True: 4.92k, False: 4.46k]
  |  Branch (287:34): [True: 4.62k, False: 292]
  ------------------
  288|  4.62k|            {
  289|  4.62k|                min_diff = poc_diff;
  290|  4.62k|                ps_pic_buf = ps_dpb_mgr->as_dpb_info[i].ps_pic_buf;
  291|  4.62k|            }
  292|  9.38k|        }
  293|   765k|    }
  294|       |
  295|  11.9k|    if(NULL == ps_pic_buf)
  ------------------
  |  Branch (295:8): [True: 7.88k, False: 4.08k]
  ------------------
  296|  7.88k|    {
  297|  7.88k|        min_diff = 0x7FFFFFFF;
  298|   512k|        for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|   512k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|   512k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (298:20): [True: 504k, False: 7.88k]
  ------------------
  299|   504k|        {
  300|   504k|            if((ps_dpb_mgr->as_dpb_info[i].ps_pic_buf) &&
  ------------------
  |  Branch (300:16): [True: 5.22k, False: 499k]
  ------------------
  301|   504k|                            (ps_dpb_mgr->as_dpb_info[i].ps_pic_buf->u1_used_as_ref != UNUSED_FOR_REF))
  ------------------
  |  Branch (301:29): [True: 2.63k, False: 2.58k]
  ------------------
  302|  2.63k|            {
  303|  2.63k|                WORD32 poc_diff = cur_abs_poc - ps_dpb_mgr->as_dpb_info[i].ps_pic_buf->i4_abs_poc;
  304|  2.63k|                if(ABS(poc_diff) < min_diff)
  ------------------
  |  |   45|  2.63k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 0, False: 2.63k]
  |  |  ------------------
  ------------------
  |  Branch (304:20): [True: 2.53k, False: 103]
  ------------------
  305|  2.53k|                {
  306|  2.53k|                    min_diff = ABS(poc_diff);
  ------------------
  |  |   45|  2.53k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 0, False: 2.53k]
  |  |  ------------------
  ------------------
  307|  2.53k|                    ps_pic_buf = ps_dpb_mgr->as_dpb_info[i].ps_pic_buf;
  308|  2.53k|                }
  309|  2.63k|            }
  310|   504k|        }
  311|  7.88k|    }
  312|       |
  313|  11.9k|    return ps_pic_buf;
  314|  11.9k|}
ihevc_dpb_mgr_get_ref_by_poc:
  343|  7.86k|{
  344|  7.86k|    UWORD32 i;
  345|  7.86k|    dpb_info_t *ps_next_ref;
  346|  7.86k|    pic_buf_t *ps_pic_buf = NULL;
  347|       |
  348|       |
  349|  7.86k|    ps_next_ref = ps_dpb_mgr->ps_dpb_head;
  350|  21.4k|    for(i = 0; i < ps_dpb_mgr->u1_num_ref_bufs; i++)
  ------------------
  |  Branch (350:16): [True: 15.6k, False: 5.81k]
  ------------------
  351|  15.6k|    {
  352|  15.6k|        if(ps_next_ref->ps_pic_buf->i4_abs_poc == abs_poc)
  ------------------
  |  Branch (352:12): [True: 2.05k, False: 13.5k]
  ------------------
  353|  2.05k|        {
  354|  2.05k|            ps_pic_buf = ps_next_ref->ps_pic_buf;
  355|  2.05k|            break;
  356|  2.05k|        }
  357|       |
  358|  13.5k|        ps_next_ref = ps_next_ref->ps_prev_dpb;
  359|  13.5k|    }
  360|       |
  361|  7.86k|    if(i == ps_dpb_mgr->u1_num_ref_bufs)
  ------------------
  |  Branch (361:8): [True: 5.81k, False: 2.05k]
  ------------------
  362|  5.81k|    {
  363|  5.81k|        ps_pic_buf = NULL;
  364|  5.81k|    }
  365|       |
  366|  7.86k|    return ps_pic_buf;
  367|  7.86k|}
ihevc_dpb_mgr_get_ref_by_poc_lsb:
  396|  1.07k|{
  397|  1.07k|    pic_buf_t *ps_pic_buf = NULL;
  398|  1.07k|    UWORD32 i;
  399|  1.07k|    dpb_info_t *ps_next_ref;
  400|       |
  401|  1.07k|    ps_next_ref = ps_dpb_mgr->ps_dpb_head;
  402|  3.04k|    for(i = 0; i < ps_dpb_mgr->u1_num_ref_bufs; i++)
  ------------------
  |  Branch (402:16): [True: 2.27k, False: 769]
  ------------------
  403|  2.27k|    {
  404|  2.27k|        if(ps_next_ref->ps_pic_buf->i4_poc_lsb == poc_lsb)
  ------------------
  |  Branch (404:12): [True: 302, False: 1.97k]
  ------------------
  405|    302|        {
  406|    302|            ps_pic_buf = ps_next_ref->ps_pic_buf;
  407|    302|            break;
  408|    302|        }
  409|       |
  410|  1.97k|        ps_next_ref = ps_next_ref->ps_prev_dpb;
  411|  1.97k|    }
  412|       |
  413|  1.07k|    if(i == ps_dpb_mgr->u1_num_ref_bufs)
  ------------------
  |  Branch (413:8): [True: 769, False: 302]
  ------------------
  414|    769|    {
  415|    769|        ps_pic_buf = NULL;
  416|    769|    }
  417|       |
  418|  1.07k|    return ps_pic_buf;
  419|  1.07k|}

ihevc_inter_pred_luma_copy:
  115|   370k|{
  116|   370k|    WORD32 row, col;
  117|   370k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|   370k|#define UNUSED(x) ((void)(x))
  ------------------
  118|  3.37M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (118:18): [True: 3.00M, False: 370k]
  ------------------
  119|  3.00M|    {
  120|  37.5M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (120:22): [True: 34.5M, False: 3.00M]
  ------------------
  121|  34.5M|        {
  122|  34.5M|            pu1_dst[col] = pu1_src[col];
  123|  34.5M|        }
  124|       |
  125|  3.00M|        pu1_src += src_strd;
  126|  3.00M|        pu1_dst += dst_strd;
  127|  3.00M|    }
  128|   370k|}
ihevc_inter_pred_luma_horz:
  177|   211k|{
  178|   211k|    WORD32 row, col, i;
  179|   211k|    WORD16 i2_tmp;
  180|       |
  181|  1.71M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (181:18): [True: 1.50M, False: 211k]
  ------------------
  182|  1.50M|    {
  183|  14.5M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (183:22): [True: 13.0M, False: 1.50M]
  ------------------
  184|  13.0M|        {
  185|  13.0M|            i2_tmp = 0;
  186|   117M|            for(i = 0; i < NTAPS_LUMA; i++)
  ------------------
  |  |   39|   117M|#define NTAPS_LUMA 8
  ------------------
  |  Branch (186:24): [True: 104M, False: 13.0M]
  ------------------
  187|   104M|                i2_tmp += pi1_coeff[i] * pu1_src[col + (i - 3)];
  188|       |
  189|  13.0M|            i2_tmp = (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  13.0M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  13.0M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  13.0M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i2_tmp = (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  13.0M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  13.0M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  190|  13.0M|            i2_tmp = CLIP_U8(i2_tmp);
  ------------------
  |  |   40|  13.0M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  13.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 35.9k, False: 13.0M]
  |  |  |  |  |  Branch (40:53): [True: 38.9k, False: 12.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|       |
  192|  13.0M|            pu1_dst[col] = (UWORD8)i2_tmp;
  193|  13.0M|        }
  194|       |
  195|  1.50M|        pu1_src += src_strd;
  196|  1.50M|        pu1_dst += dst_strd;
  197|  1.50M|    }
  198|       |
  199|   211k|}
ihevc_inter_pred_luma_vert:
  250|   102k|{
  251|   102k|    WORD32 row, col, i;
  252|   102k|    WORD16 i2_tmp;
  253|       |
  254|   830k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (254:18): [True: 728k, False: 102k]
  ------------------
  255|   728k|    {
  256|  6.62M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (256:22): [True: 5.89M, False: 728k]
  ------------------
  257|  5.89M|        {
  258|  5.89M|            i2_tmp = 0;
  259|  52.8M|            for(i = 0; i < NTAPS_LUMA; i++)
  ------------------
  |  |   39|  52.8M|#define NTAPS_LUMA 8
  ------------------
  |  Branch (259:24): [True: 46.9M, False: 5.89M]
  ------------------
  260|  46.9M|                i2_tmp += pi1_coeff[i] * pu1_src[col + (i - 3) * src_strd];
  261|       |
  262|  5.89M|            i2_tmp = (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  5.89M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  5.89M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  5.89M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i2_tmp = (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  5.89M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  5.89M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  263|  5.89M|            i2_tmp = CLIP_U8(i2_tmp);
  ------------------
  |  |   40|  5.89M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  5.89M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 22.1k, False: 5.87M]
  |  |  |  |  |  Branch (40:53): [True: 31.5k, False: 5.84M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|       |
  265|  5.89M|            pu1_dst[col] = (UWORD8)i2_tmp;
  266|  5.89M|        }
  267|       |
  268|   728k|        pu1_src += src_strd;
  269|   728k|        pu1_dst += dst_strd;
  270|   728k|    }
  271|       |
  272|   102k|}
ihevc_inter_pred_luma_copy_w16out:
  323|  2.13M|{
  324|  2.13M|    WORD32 row, col;
  325|  2.13M|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  2.13M|#define UNUSED(x) ((void)(x))
  ------------------
  326|  19.4M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (326:18): [True: 17.3M, False: 2.13M]
  ------------------
  327|  17.3M|    {
  328|   186M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (328:22): [True: 168M, False: 17.3M]
  ------------------
  329|   168M|        {
  330|   168M|            pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   168M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   168M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  331|   168M|        }
  332|       |
  333|  17.3M|        pu1_src += src_strd;
  334|  17.3M|        pi2_dst += dst_strd;
  335|  17.3M|    }
  336|       |
  337|  2.13M|}
ihevc_inter_pred_luma_horz_w16out:
  389|  2.11M|{
  390|  2.11M|    WORD32 row, col, i;
  391|  2.11M|    WORD16 i2_tmp;
  392|       |
  393|  24.7M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (393:18): [True: 22.6M, False: 2.11M]
  ------------------
  394|  22.6M|    {
  395|   193M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (395:22): [True: 171M, False: 22.6M]
  ------------------
  396|   171M|        {
  397|   171M|            i2_tmp = 0;
  398|  1.52G|            for(i = 0; i < NTAPS_LUMA; i++)
  ------------------
  |  |   39|  1.52G|#define NTAPS_LUMA 8
  ------------------
  |  Branch (398:24): [True: 1.35G, False: 171M]
  ------------------
  399|  1.35G|                i2_tmp += pi1_coeff[i] * pu1_src[col + (i - 3)];
  400|       |
  401|   171M|            pi2_dst[col] = i2_tmp;
  402|   171M|        }
  403|       |
  404|  22.6M|        pu1_src += src_strd;
  405|  22.6M|        pi2_dst += dst_strd;
  406|  22.6M|    }
  407|       |
  408|  2.11M|}
ihevc_inter_pred_luma_vert_w16out:
  460|  1.24M|{
  461|  1.24M|    WORD32 row, col, i;
  462|  1.24M|    WORD16 i2_tmp;
  463|       |
  464|  11.3M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (464:18): [True: 10.1M, False: 1.24M]
  ------------------
  465|  10.1M|    {
  466|  96.3M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (466:22): [True: 86.1M, False: 10.1M]
  ------------------
  467|  86.1M|        {
  468|  86.1M|            i2_tmp = 0;
  469|   775M|            for(i = 0; i < NTAPS_LUMA; i++)
  ------------------
  |  |   39|   775M|#define NTAPS_LUMA 8
  ------------------
  |  Branch (469:24): [True: 689M, False: 86.1M]
  ------------------
  470|   689M|                i2_tmp += pi1_coeff[i] * pu1_src[col + (i - 3) * src_strd];
  471|       |
  472|  86.1M|            pi2_dst[col] = i2_tmp;
  473|  86.1M|        }
  474|       |
  475|  10.1M|        pu1_src += src_strd;
  476|  10.1M|        pi2_dst += dst_strd;
  477|  10.1M|    }
  478|       |
  479|  1.24M|}
ihevc_inter_pred_luma_vert_w16inp:
  530|  78.5k|{
  531|  78.5k|    WORD32 row, col, i;
  532|  78.5k|    WORD32 i4_tmp;
  533|       |
  534|   725k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (534:18): [True: 646k, False: 78.5k]
  ------------------
  535|   646k|    {
  536|  7.60M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (536:22): [True: 6.95M, False: 646k]
  ------------------
  537|  6.95M|        {
  538|  6.95M|            i4_tmp = 0;
  539|  62.5M|            for(i = 0; i < NTAPS_LUMA; i++)
  ------------------
  |  |   39|  62.5M|#define NTAPS_LUMA 8
  ------------------
  |  Branch (539:24): [True: 55.5M, False: 6.95M]
  ------------------
  540|  55.5M|                i4_tmp += pi1_coeff[i] * pi2_src[col + (i - 3) * src_strd];
  541|       |
  542|  6.95M|            i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  6.95M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  6.95M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
                          i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  6.95M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  6.95M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  6.95M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  6.95M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  6.95M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  543|  6.95M|            i4_tmp = CLIP_U8(i4_tmp);
  ------------------
  |  |   40|  6.95M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  6.95M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 49.4k, False: 6.90M]
  |  |  |  |  |  Branch (40:53): [True: 67.8k, False: 6.83M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|       |
  545|  6.95M|            pu1_dst[col] = i4_tmp;
  546|  6.95M|        }
  547|       |
  548|   646k|        pi2_src += src_strd;
  549|   646k|        pu1_dst += dst_strd;
  550|   646k|    }
  551|       |
  552|  78.5k|}
ihevc_inter_pred_luma_vert_w16inp_w16out:
  605|  1.38M|{
  606|  1.38M|    WORD32 row, col, i;
  607|  1.38M|    WORD32 i4_tmp;
  608|       |
  609|  12.0M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (609:18): [True: 10.6M, False: 1.38M]
  ------------------
  610|  10.6M|    {
  611|  98.2M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (611:22): [True: 87.6M, False: 10.6M]
  ------------------
  612|  87.6M|        {
  613|  87.6M|            i4_tmp = 0;
  614|   786M|            for(i = 0; i < NTAPS_LUMA; i++)
  ------------------
  |  |   39|   786M|#define NTAPS_LUMA 8
  ------------------
  |  Branch (614:24): [True: 698M, False: 87.6M]
  ------------------
  615|   698M|                i4_tmp += pi1_coeff[i] * pi2_src[col + (i - 3) * src_strd];
  616|       |
  617|  87.6M|            i4_tmp = (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) - OFFSET14;
  ------------------
  |  |   41|  87.6M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  87.6M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
                          i4_tmp = (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) - OFFSET14;
  ------------------
  |  |   43|  87.6M|#define OFFSET14 (1 << (14 - 1))
  ------------------
  618|       |
  619|  87.6M|            pi2_dst[col] = i4_tmp;
  620|  87.6M|        }
  621|       |
  622|  10.6M|        pi2_src += src_strd;
  623|  10.6M|        pi2_dst += dst_strd;
  624|  10.6M|    }
  625|       |
  626|  1.38M|}
ihevc_inter_pred_chroma_copy:
  677|   190k|{
  678|   190k|    WORD32 row, col;
  679|   190k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|   190k|#define UNUSED(x) ((void)(x))
  ------------------
  680|  1.06M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (680:18): [True: 875k, False: 190k]
  ------------------
  681|   875k|    {
  682|  13.3M|        for(col = 0; col < 2 * wd; col++)
  ------------------
  |  Branch (682:22): [True: 12.4M, False: 875k]
  ------------------
  683|  12.4M|        {
  684|  12.4M|            pu1_dst[col] = pu1_src[col];
  685|  12.4M|        }
  686|       |
  687|   875k|        pu1_src += src_strd;
  688|   875k|        pu1_dst += dst_strd;
  689|   875k|    }
  690|   190k|}
ihevc_inter_pred_chroma_horz:
  742|  75.4k|{
  743|  75.4k|    WORD32 row, col, i;
  744|  75.4k|    WORD16 i2_tmp_u, i2_tmp_v;
  745|       |
  746|   396k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (746:18): [True: 321k, False: 75.4k]
  ------------------
  747|   321k|    {
  748|  2.20M|        for(col = 0; col < 2 * wd; col += 2)
  ------------------
  |  Branch (748:22): [True: 1.88M, False: 321k]
  ------------------
  749|  1.88M|        {
  750|  1.88M|            i2_tmp_u = 0;
  751|  1.88M|            i2_tmp_v = 0;
  752|  9.43M|            for(i = 0; i < NTAPS_CHROMA; i++)
  ------------------
  |  |   40|  9.43M|#define NTAPS_CHROMA 4
  ------------------
  |  Branch (752:24): [True: 7.54M, False: 1.88M]
  ------------------
  753|  7.54M|            {
  754|  7.54M|                i2_tmp_u += pi1_coeff[i] * pu1_src[col + (i - 1) * 2];
  755|  7.54M|                i2_tmp_v += pi1_coeff[i] * pu1_src[col + 1 + (i - 1) * 2];
  756|  7.54M|            }
  757|       |
  758|  1.88M|            i2_tmp_u = (i2_tmp_u + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  1.88M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  1.88M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  1.88M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i2_tmp_u = (i2_tmp_u + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  1.88M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.88M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  759|  1.88M|            i2_tmp_u = CLIP_U8(i2_tmp_u);
  ------------------
  |  |   40|  1.88M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.88M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.55k, False: 1.88M]
  |  |  |  |  |  Branch (40:53): [True: 2.43k, False: 1.88M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|  1.88M|            i2_tmp_v = (i2_tmp_v + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  1.88M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  1.88M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  1.88M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i2_tmp_v = (i2_tmp_v + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  1.88M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.88M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  761|  1.88M|            i2_tmp_v = CLIP_U8(i2_tmp_v);
  ------------------
  |  |   40|  1.88M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.88M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.96k, False: 1.88M]
  |  |  |  |  |  Branch (40:53): [True: 2.57k, False: 1.88M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|       |
  763|       |
  764|  1.88M|            pu1_dst[col] = (UWORD8)i2_tmp_u;
  765|  1.88M|            pu1_dst[col + 1] = (UWORD8)i2_tmp_v;
  766|  1.88M|        }
  767|       |
  768|   321k|        pu1_src += src_strd;
  769|   321k|        pu1_dst += dst_strd;
  770|   321k|    }
  771|  75.4k|}
ihevc_inter_pred_chroma_vert:
  824|   269k|{
  825|   269k|    WORD32 row, col, i;
  826|   269k|    WORD16 i2_tmp;
  827|       |
  828|  1.24M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (828:18): [True: 970k, False: 269k]
  ------------------
  829|   970k|    {
  830|  8.70M|        for(col = 0; col < 2 * wd; col++)
  ------------------
  |  Branch (830:22): [True: 7.73M, False: 970k]
  ------------------
  831|  7.73M|        {
  832|  7.73M|            i2_tmp = 0;
  833|  38.5M|            for(i = 0; i < NTAPS_CHROMA; i++)
  ------------------
  |  |   40|  38.5M|#define NTAPS_CHROMA 4
  ------------------
  |  Branch (833:24): [True: 30.8M, False: 7.73M]
  ------------------
  834|  30.8M|            {
  835|  30.8M|                i2_tmp += pi1_coeff[i] * pu1_src[col + (i - 1) * src_strd];
  836|  30.8M|            }
  837|       |
  838|  7.73M|            i2_tmp = (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  7.73M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  7.73M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  7.73M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i2_tmp = (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  7.73M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  7.73M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  839|  7.73M|            i2_tmp = CLIP_U8(i2_tmp);
  ------------------
  |  |   40|  7.73M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.73M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.65k, False: 7.73M]
  |  |  |  |  |  Branch (40:53): [True: 5.90k, False: 7.72M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  840|       |
  841|  7.73M|            pu1_dst[col] = (UWORD8)i2_tmp;
  842|  7.73M|        }
  843|       |
  844|   970k|        pu1_src += src_strd;
  845|   970k|        pu1_dst += dst_strd;
  846|   970k|    }
  847|   269k|}
ihevc_inter_pred_chroma_copy_w16out:
  899|  2.07M|{
  900|  2.07M|    WORD32 row, col;
  901|  2.07M|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  2.07M|#define UNUSED(x) ((void)(x))
  ------------------
  902|  10.7M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (902:18): [True: 8.64M, False: 2.07M]
  ------------------
  903|  8.64M|    {
  904|  93.2M|        for(col = 0; col < 2 * wd; col++)
  ------------------
  |  Branch (904:22): [True: 84.6M, False: 8.64M]
  ------------------
  905|  84.6M|        {
  906|  84.6M|            pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  84.6M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  84.6M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  907|  84.6M|        }
  908|       |
  909|  8.64M|        pu1_src += src_strd;
  910|  8.64M|        pi2_dst += dst_strd;
  911|  8.64M|    }
  912|  2.07M|}
ihevc_inter_pred_chroma_horz_w16out:
  965|  3.54M|{
  966|  3.54M|    WORD32 row, col, i;
  967|  3.54M|    WORD16 i2_tmp_u, i2_tmp_v;
  968|       |
  969|  26.5M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (969:18): [True: 22.9M, False: 3.54M]
  ------------------
  970|  22.9M|    {
  971|   119M|        for(col = 0; col < 2 * wd; col += 2)
  ------------------
  |  Branch (971:22): [True: 96.7M, False: 22.9M]
  ------------------
  972|  96.7M|        {
  973|  96.7M|            i2_tmp_u = 0;
  974|  96.7M|            i2_tmp_v = 0;
  975|   483M|            for(i = 0; i < NTAPS_CHROMA; i++)
  ------------------
  |  |   40|   483M|#define NTAPS_CHROMA 4
  ------------------
  |  Branch (975:24): [True: 386M, False: 96.7M]
  ------------------
  976|   386M|            {
  977|   386M|                i2_tmp_u += pi1_coeff[i] * pu1_src[col + (i - 1) * 2];
  978|   386M|                i2_tmp_v += pi1_coeff[i] * pu1_src[col + 1 + (i - 1) * 2];
  979|   386M|            }
  980|       |
  981|  96.7M|            pi2_dst[col] = i2_tmp_u;
  982|  96.7M|            pi2_dst[col + 1] = i2_tmp_v;
  983|  96.7M|        }
  984|       |
  985|  22.9M|        pu1_src += src_strd;
  986|  22.9M|        pi2_dst += dst_strd;
  987|  22.9M|    }
  988|  3.54M|}
ihevc_inter_pred_chroma_vert_w16out:
 1041|  64.8k|{
 1042|  64.8k|    WORD32 row, col, i;
 1043|  64.8k|    WORD16 i2_tmp;
 1044|       |
 1045|   394k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1045:18): [True: 329k, False: 64.8k]
  ------------------
 1046|   329k|    {
 1047|  5.22M|        for(col = 0; col < 2 * wd; col++)
  ------------------
  |  Branch (1047:22): [True: 4.89M, False: 329k]
  ------------------
 1048|  4.89M|        {
 1049|  4.89M|            i2_tmp = 0;
 1050|  24.4M|            for(i = 0; i < NTAPS_CHROMA; i++)
  ------------------
  |  |   40|  24.4M|#define NTAPS_CHROMA 4
  ------------------
  |  Branch (1050:24): [True: 19.5M, False: 4.89M]
  ------------------
 1051|  19.5M|            {
 1052|  19.5M|                i2_tmp += pi1_coeff[i] * pu1_src[col + (i - 1) * src_strd];
 1053|  19.5M|            }
 1054|       |
 1055|  4.89M|            pi2_dst[col] = i2_tmp;
 1056|  4.89M|        }
 1057|       |
 1058|   329k|        pu1_src += src_strd;
 1059|   329k|        pi2_dst += dst_strd;
 1060|   329k|    }
 1061|  64.8k|}
ihevc_inter_pred_chroma_vert_w16inp:
 1112|   229k|{
 1113|   229k|    WORD32 row, col, i;
 1114|   229k|    WORD32 i4_tmp;
 1115|       |
 1116|  1.13M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1116:18): [True: 905k, False: 229k]
  ------------------
 1117|   905k|    {
 1118|  9.16M|        for(col = 0; col < 2 * wd; col++)
  ------------------
  |  Branch (1118:22): [True: 8.26M, False: 905k]
  ------------------
 1119|  8.26M|        {
 1120|  8.26M|            i4_tmp = 0;
 1121|  41.2M|            for(i = 0; i < NTAPS_CHROMA; i++)
  ------------------
  |  |   40|  41.2M|#define NTAPS_CHROMA 4
  ------------------
  |  Branch (1121:24): [True: 33.0M, False: 8.26M]
  ------------------
 1122|  33.0M|            {
 1123|  33.0M|                i4_tmp += pi1_coeff[i] * pi2_src[col + (i - 1) * src_strd];
 1124|  33.0M|            }
 1125|       |
 1126|  8.26M|            i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  8.26M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  8.26M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
                          i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   42|  8.26M|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  8.26M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  8.26M|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                          i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|  8.26M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  8.26M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1127|  8.26M|            i4_tmp = CLIP_U8(i4_tmp);
  ------------------
  |  |   40|  8.26M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  8.26M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 9.68k, False: 8.25M]
  |  |  |  |  |  Branch (40:53): [True: 21.1k, False: 8.23M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1128|       |
 1129|  8.26M|            pu1_dst[col] = i4_tmp;
 1130|  8.26M|        }
 1131|       |
 1132|   905k|        pi2_src += src_strd;
 1133|   905k|        pu1_dst += dst_strd;
 1134|   905k|    }
 1135|       |
 1136|   229k|}
ihevc_inter_pred_chroma_vert_w16inp_w16out:
 1189|  2.71M|{
 1190|  2.71M|    WORD32 row, col, i;
 1191|  2.71M|    WORD32 i4_tmp;
 1192|       |
 1193|  13.6M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1193:18): [True: 10.9M, False: 2.71M]
  ------------------
 1194|  10.9M|    {
 1195|   102M|        for(col = 0; col < 2 * wd; col++)
  ------------------
  |  Branch (1195:22): [True: 91.6M, False: 10.9M]
  ------------------
 1196|  91.6M|        {
 1197|  91.6M|            i4_tmp = 0;
 1198|   458M|            for(i = 0; i < NTAPS_CHROMA; i++)
  ------------------
  |  |   40|   458M|#define NTAPS_CHROMA 4
  ------------------
  |  Branch (1198:24): [True: 366M, False: 91.6M]
  ------------------
 1199|   366M|            {
 1200|   366M|                i4_tmp += pi1_coeff[i] * pi2_src[col + (i - 1) * src_strd];
 1201|   366M|            }
 1202|       |
 1203|  91.6M|            i4_tmp = (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  91.6M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  91.6M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1204|       |
 1205|  91.6M|            pi2_dst[col] = i4_tmp;
 1206|  91.6M|        }
 1207|       |
 1208|  10.9M|        pi2_src += src_strd;
 1209|  10.9M|        pi2_dst += dst_strd;
 1210|  10.9M|    }
 1211|       |
 1212|  2.71M|}

ihevc_intra_pred_luma_ref_subst_all_avlble:
  120|   406k|{
  121|       |
  122|   406k|    WORD32 i;
  123|   406k|    WORD32 two_nt = 2 * nt;
  124|   406k|    UNUSED(nbr_flags);
  ------------------
  |  |   38|   406k|#define UNUSED(x) ((void)(x))
  ------------------
  125|   406k|    UNUSED(dst_strd);
  ------------------
  |  |   38|   406k|#define UNUSED(x) ((void)(x))
  ------------------
  126|       |
  127|       |    /* Neighbor Flag Structure*/
  128|       |    /* MSB ---> LSB */
  129|       |    /*    Top-Left | Top-Right | Top | Left | Bottom-Left
  130|       |              1         4         4     4         4
  131|       |     */
  132|   406k|    ASSERT((nbr_flags == 0x11188) || (nbr_flags == 0x133CC) || (nbr_flags == 0x1FFFF));
  ------------------
  |  |   55|   406k|#define ASSERT(x) assert((x))
  ------------------
  133|   406k|    {
  134|       |
  135|   406k|        if(nt == 4)
  ------------------
  |  Branch (135:12): [True: 179k, False: 227k]
  ------------------
  136|   179k|        {
  137|       |            /* 1 bit extraction for all the neighboring blocks */
  138|       |
  139|       |
  140|       |            /* Else fill the corresponding samples */
  141|   179k|            pu1_dst[two_nt] = *pu1_top_left;
  142|       |            //if(left)
  143|   179k|            {
  144|   898k|                for(i = 0; i < nt; i++)
  ------------------
  |  Branch (144:28): [True: 718k, False: 179k]
  ------------------
  145|   718k|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  146|   179k|            }
  147|       |//            if(bot_left)
  148|   179k|            {
  149|   898k|                for(i = nt; i < two_nt; i++)
  ------------------
  |  Branch (149:29): [True: 718k, False: 179k]
  ------------------
  150|   718k|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  151|   179k|            }
  152|       |//            if(top)
  153|   179k|            {
  154|   179k|                ihevc_memcpy(&pu1_dst[two_nt + 1], pu1_top, nt);
  155|   179k|            }
  156|       |//            if(tp_right)
  157|   179k|            {
  158|   179k|                ihevc_memcpy(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt);
  159|   179k|            }
  160|       |
  161|       |
  162|   179k|        }
  163|   227k|        else
  164|       |
  165|   227k|        {
  166|       |
  167|       |            /* Else fill the corresponding samples */
  168|   227k|            ASSERT((nt == 8) || (nt == 16) || (nt == 32));
  ------------------
  |  |   55|   227k|#define ASSERT(x) assert((x))
  ------------------
  169|   227k|            pu1_dst[two_nt] = *pu1_top_left;
  170|       |
  171|  5.90M|            for(i = 0; i < nt; i++)
  ------------------
  |  Branch (171:24): [True: 5.68M, False: 227k]
  ------------------
  172|  5.68M|                pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  173|       |
  174|  5.91M|            for(i = nt; i < two_nt; i++)
  ------------------
  |  Branch (174:25): [True: 5.68M, False: 227k]
  ------------------
  175|  5.68M|                pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  176|       |
  177|   227k|            ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1], pu1_top, nt);
  178|       |
  179|   227k|            ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt);
  180|   227k|        }
  181|       |
  182|   406k|    }
  183|   406k|}
ihevc_intra_pred_luma_ref_substitution:
  194|  3.56M|{
  195|  3.56M|    UWORD8 pu1_ref;
  196|  3.56M|    WORD32 dc_val, i;
  197|  3.56M|    WORD32 total_samples = (4 * nt) + 1;
  198|  3.56M|    WORD32 two_nt = 2 * nt;
  199|       |
  200|  3.56M|    WORD32 three_nt = 3 * nt;
  201|  3.56M|    WORD32 get_bits;
  202|  3.56M|    WORD32 next;
  203|  3.56M|    WORD32 bot_left, left, top, tp_right, tp_left;
  204|       |
  205|  3.56M|    WORD32 idx, nbr_id_from_bl, frwd_nbr_flag;
  206|  3.56M|    UNUSED(dst_strd);
  ------------------
  |  |   38|  3.56M|#define UNUSED(x) ((void)(x))
  ------------------
  207|       |    /*dc_val = 1 << (BIT_DEPTH - 1);*/
  208|  3.56M|    dc_val = 1 << (8 - 1);
  209|       |
  210|       |
  211|       |    /* Neighbor Flag Structure*/
  212|       |    /* MSB ---> LSB */
  213|       |    /*    Top-Left | Top-Right | Top | Left | Bottom-Left
  214|       |              1         4         4     4         4
  215|       |     */
  216|       |    /* If no neighbor flags are present, fill the neighbor samples with DC value */
  217|  3.56M|    if(nbr_flags == 0)
  ------------------
  |  Branch (217:8): [True: 4.49k, False: 3.55M]
  ------------------
  218|  4.49k|    {
  219|   371k|        for(i = 0; i < total_samples; i++)
  ------------------
  |  Branch (219:20): [True: 367k, False: 4.49k]
  ------------------
  220|   367k|        {
  221|   367k|            pu1_dst[i] = dc_val;
  222|   367k|        }
  223|  4.49k|    }
  224|  3.55M|    else
  225|  3.55M|    {
  226|  3.55M|        if(nt <= 8)
  ------------------
  |  Branch (226:12): [True: 1.46M, False: 2.09M]
  ------------------
  227|  1.46M|        {
  228|       |            /* 1 bit extraction for all the neighboring blocks */
  229|  1.46M|            tp_left = (nbr_flags & 0x10000) >> 16;
  230|  1.46M|            bot_left = (nbr_flags & 0x8) >> 3;
  231|  1.46M|            left = (nbr_flags & 0x80) >> 7;
  232|  1.46M|            top = (nbr_flags & 0x100) >> 8;
  233|  1.46M|            tp_right = (nbr_flags & 0x1000) >> 12;
  234|       |
  235|       |            /* Else fill the corresponding samples */
  236|  1.46M|            if(tp_left)
  ------------------
  |  Branch (236:16): [True: 1.40M, False: 57.6k]
  ------------------
  237|  1.40M|                pu1_dst[two_nt] = *pu1_top_left;
  238|  57.6k|            else
  239|  57.6k|                pu1_dst[two_nt] = 0;
  240|       |
  241|       |
  242|  1.46M|            if(left)
  ------------------
  |  Branch (242:16): [True: 1.45M, False: 15.9k]
  ------------------
  243|  1.45M|            {
  244|  10.9M|                for(i = 0; i < nt; i++)
  ------------------
  |  Branch (244:28): [True: 9.51M, False: 1.45M]
  ------------------
  245|  9.51M|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  246|  1.45M|            }
  247|  15.9k|            else
  248|  15.9k|            {
  249|  15.9k|                ihevc_memset(&pu1_dst[two_nt - 1 - (nt - 1)], 0, nt);
  250|  15.9k|            }
  251|       |
  252|       |
  253|  1.46M|            if(bot_left)
  ------------------
  |  Branch (253:16): [True: 312k, False: 1.15M]
  ------------------
  254|   312k|            {
  255|  2.62M|                for(i = nt; i < two_nt; i++)
  ------------------
  |  Branch (255:29): [True: 2.31M, False: 312k]
  ------------------
  256|  2.31M|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  257|   312k|            }
  258|  1.15M|            else
  259|  1.15M|            {
  260|  1.15M|                ihevc_memset(&pu1_dst[two_nt - 1 - (two_nt - 1)], 0, nt);
  261|  1.15M|            }
  262|       |
  263|       |
  264|  1.46M|            if(top)
  ------------------
  |  Branch (264:16): [True: 1.42M, False: 41.9k]
  ------------------
  265|  1.42M|            {
  266|  1.42M|                ihevc_memcpy(&pu1_dst[two_nt + 1], pu1_top, nt);
  267|  1.42M|            }
  268|  41.9k|            else
  269|  41.9k|            {
  270|  41.9k|                ihevc_memset(&pu1_dst[two_nt + 1], 0, nt);
  271|  41.9k|            }
  272|       |
  273|  1.46M|            if(tp_right)
  ------------------
  |  Branch (273:16): [True: 864k, False: 601k]
  ------------------
  274|   864k|            {
  275|   864k|                ihevc_memcpy(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt);
  276|   864k|            }
  277|   601k|            else
  278|   601k|            {
  279|   601k|                ihevc_memset(&pu1_dst[two_nt + 1 + nt], 0, nt);
  280|   601k|            }
  281|  1.46M|            next = 1;
  282|       |
  283|       |            /* If bottom -left is not available, reverse substitution process*/
  284|  1.46M|            if(bot_left == 0)
  ------------------
  |  Branch (284:16): [True: 1.15M, False: 310k]
  ------------------
  285|  1.15M|            {
  286|  1.15M|                WORD32 a_nbr_flag[5];
  287|  1.15M|                a_nbr_flag[0] = bot_left;
  288|  1.15M|                a_nbr_flag[1] = left;
  289|  1.15M|                a_nbr_flag[2] = tp_left;
  290|  1.15M|                a_nbr_flag[3] = top;
  291|  1.15M|                a_nbr_flag[4] = tp_right;
  292|       |
  293|       |                /* Check for the 1st available sample from bottom-left*/
  294|  1.18M|                while(!a_nbr_flag[next])
  ------------------
  |  Branch (294:23): [True: 31.8k, False: 1.15M]
  ------------------
  295|  31.8k|                    next++;
  296|       |
  297|       |                /* If Left, top-left are available*/
  298|  1.15M|                if(next <= 2)
  ------------------
  |  Branch (298:20): [True: 1.13M, False: 16.0k]
  ------------------
  299|  1.13M|                {
  300|  1.13M|                    idx = nt * next;
  301|  1.13M|                    pu1_ref = pu1_dst[idx];
  302|  8.36M|                    for(i = 0; i < idx; i++)
  ------------------
  |  Branch (302:32): [True: 7.22M, False: 1.13M]
  ------------------
  303|  7.22M|                        pu1_dst[i] = pu1_ref;
  304|  1.13M|                }
  305|  16.0k|                else /* If top, top-right are available */
  306|  16.0k|                {
  307|       |                    /* Idx is changed to copy 1 pixel value for top-left ,if top-left is not available*/
  308|  16.0k|                    idx = (nt * (next - 1)) + 1;
  309|  16.0k|                    pu1_ref = pu1_dst[idx];
  310|   202k|                    for(i = 0; i < idx; i++)
  ------------------
  |  Branch (310:32): [True: 186k, False: 16.0k]
  ------------------
  311|   186k|                        pu1_dst[i] = pu1_ref;
  312|  16.0k|                }
  313|  1.15M|            }
  314|       |
  315|       |            /* Forward Substitution Process */
  316|       |            /* If left is Unavailable, copy the last bottom-left value */
  317|  1.46M|            if(left == 0)
  ------------------
  |  Branch (317:16): [True: 16.0k, False: 1.45M]
  ------------------
  318|  16.0k|            {
  319|  16.0k|                ihevc_memset(&pu1_dst[nt], pu1_dst[nt - 1], nt);
  320|       |
  321|  16.0k|            }
  322|       |            /* If top-left is Unavailable, copy the last left value */
  323|  1.46M|            if(tp_left == 0)
  ------------------
  |  Branch (323:16): [True: 58.1k, False: 1.40M]
  ------------------
  324|  58.1k|                pu1_dst[two_nt] = pu1_dst[two_nt - 1];
  325|       |            /* If top is Unavailable, copy the last top-left value */
  326|  1.46M|            if(top == 0)
  ------------------
  |  Branch (326:16): [True: 42.3k, False: 1.42M]
  ------------------
  327|  42.3k|            {
  328|  42.3k|                ihevc_memset(&pu1_dst[two_nt + 1], pu1_dst[two_nt], nt);
  329|  42.3k|            }
  330|       |            /* If to right is Unavailable, copy the last top value */
  331|  1.46M|            if(tp_right == 0)
  ------------------
  |  Branch (331:16): [True: 608k, False: 858k]
  ------------------
  332|   608k|            {
  333|   608k|                ihevc_memset(&pu1_dst[three_nt + 1], pu1_dst[three_nt], nt);
  334|       |
  335|   608k|            }
  336|  1.46M|        }
  337|       |
  338|  3.55M|        if(nt == 16)
  ------------------
  |  Branch (338:12): [True: 1.38M, False: 2.17M]
  ------------------
  339|  1.38M|        {
  340|  1.38M|            WORD32 nbr_flags_temp = 0;
  341|  1.38M|            nbr_flags_temp = ((nbr_flags & 0xC) >> 2) + ((nbr_flags & 0xC0) >> 4)
  342|  1.38M|                            + ((nbr_flags & 0x300) >> 4)
  343|  1.38M|                            + ((nbr_flags & 0x3000) >> 6)
  344|  1.38M|                            + ((nbr_flags & 0x10000) >> 8);
  345|       |
  346|       |            /* Else fill the corresponding samples */
  347|  1.38M|            if(nbr_flags & 0x10000)
  ------------------
  |  Branch (347:16): [True: 1.31M, False: 67.2k]
  ------------------
  348|  1.31M|                pu1_dst[two_nt] = *pu1_top_left;
  349|  67.2k|            else
  350|  67.2k|                pu1_dst[two_nt] = 0;
  351|       |
  352|  1.38M|            if(nbr_flags & 0xC0)
  ------------------
  |  Branch (352:16): [True: 1.38M, False: 3.39k]
  ------------------
  353|  1.38M|            {
  354|  23.4M|                for(i = 0; i < nt; i++)
  ------------------
  |  Branch (354:28): [True: 22.1M, False: 1.38M]
  ------------------
  355|  22.1M|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  356|  1.38M|            }
  357|  3.39k|            else
  358|  3.39k|            {
  359|  3.39k|                ihevc_memset_mul_8(&pu1_dst[two_nt - 1 - (nt - 1)], 0, nt);
  360|  3.39k|            }
  361|       |
  362|       |            /* Bottom - left availability is checked for every 8x8 TU position and set accordingly */
  363|  1.38M|            {
  364|  1.38M|                if(nbr_flags & 0x8)
  ------------------
  |  Branch (364:20): [True: 427k, False: 958k]
  ------------------
  365|   427k|                {
  366|  3.84M|                    for(i = nt; i < (nt + 8); i++)
  ------------------
  |  Branch (366:33): [True: 3.42M, False: 427k]
  ------------------
  367|  3.42M|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  368|   427k|                }
  369|   958k|                else
  370|   958k|                {
  371|   958k|                    ihevc_memset_mul_8(&pu1_dst[nt - 8], 0, 8);
  372|   958k|                }
  373|       |
  374|  1.38M|                if(nbr_flags & 0x4)
  ------------------
  |  Branch (374:20): [True: 428k, False: 957k]
  ------------------
  375|   428k|                {
  376|  3.85M|                    for(i = (nt + 8); i < two_nt; i++)
  ------------------
  |  Branch (376:39): [True: 3.42M, False: 428k]
  ------------------
  377|  3.42M|                        pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  378|   428k|                }
  379|   957k|                else
  380|   957k|                {
  381|   957k|                    ihevc_memset_mul_8(&pu1_dst[0], 0, 8);
  382|   957k|                }
  383|  1.38M|            }
  384|       |
  385|  1.38M|            if(nbr_flags & 0x300)
  ------------------
  |  Branch (385:16): [True: 1.32M, False: 62.4k]
  ------------------
  386|  1.32M|            {
  387|  1.32M|                ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1], pu1_top, nt);
  388|  1.32M|            }
  389|  62.4k|            else
  390|  62.4k|            {
  391|  62.4k|                ihevc_memset_mul_8(&pu1_dst[two_nt + 1], 0, nt);
  392|  62.4k|            }
  393|       |
  394|  1.38M|            if(nbr_flags & 0x3000)
  ------------------
  |  Branch (394:16): [True: 872k, False: 513k]
  ------------------
  395|   872k|            {
  396|   872k|                ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt);
  397|   872k|            }
  398|   513k|            else
  399|   513k|            {
  400|   513k|                ihevc_memset_mul_8(&pu1_dst[two_nt + 1 + nt], 0, nt);
  401|   513k|            }
  402|       |            /* compute trailing zeors based on nbr_flag for substitution process of below left see section .*/
  403|       |            /* as each bit in nbr flags corresponds to 8 pels for bot_left, left, top and topright but 1 pel for topleft */
  404|  1.38M|            {
  405|  1.38M|                nbr_id_from_bl = look_up_trailing_zeros(nbr_flags_temp & 0XF) * 8; /* for below left and left */
  ------------------
  |  |   43|  1.38M|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 3.49k, False: 1.38M]
  |  |  ------------------
  ------------------
  406|       |
  407|  1.38M|                if(nbr_id_from_bl == 64)
  ------------------
  |  Branch (407:20): [True: 3.49k, False: 1.38M]
  ------------------
  408|  3.49k|                    nbr_id_from_bl = 32;
  409|       |
  410|  1.38M|                if(nbr_id_from_bl == 32)
  ------------------
  |  Branch (410:20): [True: 3.49k, False: 1.38M]
  ------------------
  411|  3.49k|                {
  412|       |                    /* for top left : 1 pel per nbr bit */
  413|  3.49k|                    if(!((nbr_flags_temp >> 8) & 0x1))
  ------------------
  |  Branch (413:24): [True: 3.49k, False: 2]
  ------------------
  414|  3.49k|                    {
  415|  3.49k|                        nbr_id_from_bl++;
  416|  3.49k|                        nbr_id_from_bl += look_up_trailing_zeros((nbr_flags_temp >> 4) & 0xF) * 8; /* top and top right;  8 pels per nbr bit */
  ------------------
  |  |   43|  3.49k|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 0, False: 3.49k]
  |  |  ------------------
  ------------------
  417|       |                        //nbr_id_from_bl += idx * 8;
  418|  3.49k|                    }
  419|  3.49k|                }
  420|       |                /* Reverse Substitution Process*/
  421|  1.38M|                if(nbr_id_from_bl)
  ------------------
  |  Branch (421:20): [True: 960k, False: 425k]
  ------------------
  422|   960k|                {
  423|       |                    /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */
  424|   960k|                    pu1_ref = pu1_dst[nbr_id_from_bl];
  425|  16.3M|                    for(i = (nbr_id_from_bl - 1); i >= 0; i--)
  ------------------
  |  Branch (425:51): [True: 15.4M, False: 960k]
  ------------------
  426|  15.4M|                    {
  427|  15.4M|                        pu1_dst[i] = pu1_ref;
  428|  15.4M|                    }
  429|   960k|                }
  430|  1.38M|            }
  431|       |
  432|       |            /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */
  433|  11.8M|            while(nbr_id_from_bl < ((T16_4NT)+1))
  ------------------
  |  |   71|  11.8M|#define T16_4NT 64
  ------------------
  |  Branch (433:19): [True: 10.4M, False: 1.38M]
  ------------------
  434|  10.4M|            {
  435|       |                /* To Obtain the next unavailable idx flag after reverse neighbor substitution  */
  436|       |                /* Devide by 8 to obtain the original index */
  437|  10.4M|                frwd_nbr_flag = (nbr_id_from_bl >> 3); /*+ (nbr_id_from_bl & 0x1);*/
  438|       |
  439|       |                /* The Top-left flag is at the last bit location of nbr_flags*/
  440|  10.4M|                if(nbr_id_from_bl == (T16_4NT / 2))
  ------------------
  |  |   71|  10.4M|#define T16_4NT 64
  ------------------
  |  Branch (440:20): [True: 1.37M, False: 9.10M]
  ------------------
  441|  1.37M|                {
  442|  1.37M|                    get_bits = GET_BIT(nbr_flags_temp, 8);
  ------------------
  |  |   45|  1.37M|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  443|       |
  444|       |                    /* only pel substitution for TL */
  445|  1.37M|                    if(!get_bits)
  ------------------
  |  Branch (445:24): [True: 64.4k, False: 1.31M]
  ------------------
  446|  64.4k|                        pu1_dst[nbr_id_from_bl] = pu1_dst[nbr_id_from_bl - 1];
  447|  1.37M|                }
  448|  9.10M|                else
  449|  9.10M|                {
  450|  9.10M|                    get_bits = GET_BIT(nbr_flags_temp, frwd_nbr_flag);
  ------------------
  |  |   45|  9.10M|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  451|  9.10M|                    if(!get_bits)
  ------------------
  |  Branch (451:24): [True: 1.16M, False: 7.93M]
  ------------------
  452|  1.16M|                    {
  453|       |                        /* 8 pel substitution (other than TL) */
  454|  1.16M|                        pu1_ref = pu1_dst[nbr_id_from_bl - 1];
  455|  1.16M|                        ihevc_memset_mul_8(pu1_dst + nbr_id_from_bl, pu1_ref, 8);
  456|       |
  457|       |
  458|  1.16M|                    }
  459|       |
  460|  9.10M|                }
  461|  10.4M|                nbr_id_from_bl += (nbr_id_from_bl == (T16_4NT / 2)) ? 1 : 8;
  ------------------
  |  |   71|  10.4M|#define T16_4NT 64
  ------------------
  |  Branch (461:35): [True: 1.37M, False: 9.10M]
  ------------------
  462|  10.4M|            }
  463|       |
  464|       |
  465|  1.38M|        }
  466|       |
  467|  3.55M|        if(nt == 32)
  ------------------
  |  Branch (467:12): [True: 719k, False: 2.83M]
  ------------------
  468|   719k|        {
  469|       |            /* Else fill the corresponding samples */
  470|   719k|            if(nbr_flags & 0x10000)
  ------------------
  |  Branch (470:16): [True: 594k, False: 125k]
  ------------------
  471|   594k|                pu1_dst[two_nt] = *pu1_top_left;
  472|   125k|            else
  473|   125k|                pu1_dst[two_nt] = 0;
  474|       |
  475|   719k|            if(nbr_flags & 0xF0)
  ------------------
  |  Branch (475:16): [True: 705k, False: 13.3k]
  ------------------
  476|   705k|            {
  477|  23.2M|                for(i = 0; i < nt; i++)
  ------------------
  |  Branch (477:28): [True: 22.5M, False: 705k]
  ------------------
  478|  22.5M|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  479|   705k|            }
  480|  13.3k|            else
  481|  13.3k|            {
  482|  13.3k|                ihevc_memset_mul_8(&pu1_dst[two_nt - 1 - (nt - 1)], 0, nt);
  483|  13.3k|            }
  484|       |
  485|       |            /* Bottom - left availability is checked for every 8x8 TU position and set accordingly */
  486|   719k|            {
  487|   719k|                if(nbr_flags & 0x8)
  ------------------
  |  Branch (487:20): [True: 55.6k, False: 663k]
  ------------------
  488|  55.6k|                {
  489|   500k|                    for(i = nt; i < (nt + 8); i++)
  ------------------
  |  Branch (489:33): [True: 445k, False: 55.6k]
  ------------------
  490|   445k|                    pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  491|  55.6k|                }
  492|   663k|                else
  493|   663k|                {
  494|   663k|                    ihevc_memset_mul_8(&pu1_dst[24], 0, 8);
  495|   663k|                }
  496|       |
  497|   719k|                if(nbr_flags & 0x4)
  ------------------
  |  Branch (497:20): [True: 55.4k, False: 663k]
  ------------------
  498|  55.4k|                {
  499|   499k|                    for(i = (nt + 8); i < (nt + 16); i++)
  ------------------
  |  Branch (499:39): [True: 443k, False: 55.4k]
  ------------------
  500|   443k|                        pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  501|  55.4k|                }
  502|   663k|                else
  503|   663k|                {
  504|   663k|                    ihevc_memset_mul_8(&pu1_dst[16], 0, 8);
  505|   663k|                }
  506|       |
  507|   719k|                if(nbr_flags & 0x2)
  ------------------
  |  Branch (507:20): [True: 55.4k, False: 663k]
  ------------------
  508|  55.4k|                {
  509|   499k|                    for(i = (nt + 16); i < (nt + 24); i++)
  ------------------
  |  Branch (509:40): [True: 443k, False: 55.4k]
  ------------------
  510|   443k|                        pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  511|  55.4k|                }
  512|   663k|                else
  513|   663k|                {
  514|   663k|                    ihevc_memset_mul_8(&pu1_dst[8], 0, 8);
  515|   663k|                }
  516|       |
  517|   719k|                if(nbr_flags & 0x1)
  ------------------
  |  Branch (517:20): [True: 55.4k, False: 663k]
  ------------------
  518|  55.4k|                {
  519|   499k|                    for(i = (nt + 24); i < (two_nt); i++)
  ------------------
  |  Branch (519:40): [True: 443k, False: 55.4k]
  ------------------
  520|   443k|                        pu1_dst[two_nt - 1 - i] = pu1_left[i * src_strd];
  521|  55.4k|                }
  522|   663k|                else
  523|   663k|                {
  524|   663k|                    ihevc_memset_mul_8(&pu1_dst[0], 0, 8);
  525|   663k|                }
  526|   719k|            }
  527|       |
  528|       |
  529|   719k|            if(nbr_flags & 0xF00)
  ------------------
  |  Branch (529:16): [True: 607k, False: 111k]
  ------------------
  530|   607k|            {
  531|   607k|                ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1], pu1_top, nt);
  532|   607k|            }
  533|   111k|            else
  534|   111k|            {
  535|   111k|                ihevc_memset_mul_8(&pu1_dst[two_nt + 1], 0, nt);
  536|   111k|            }
  537|       |
  538|   719k|            if(nbr_flags & 0xF000)
  ------------------
  |  Branch (538:16): [True: 395k, False: 323k]
  ------------------
  539|   395k|            {
  540|   395k|                ihevc_memcpy_mul_8(&pu1_dst[two_nt + 1 + nt], pu1_top + nt, nt);
  541|   395k|            }
  542|   323k|            else
  543|   323k|            {
  544|   323k|                ihevc_memset_mul_8(&pu1_dst[two_nt + 1 + nt], 0, nt);
  545|   323k|            }
  546|       |            /* compute trailing ones based on mbr_flag for substitution process of below left see section .*/
  547|       |            /* as each bit in nbr flags corresponds to 8 pels for bot_left, left, top and topright but 1 pel for topleft */
  548|   719k|            {
  549|   719k|                nbr_id_from_bl = look_up_trailing_zeros((nbr_flags & 0XFF)) * 8; /* for below left and left */
  ------------------
  |  |   43|   719k|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 13.3k, False: 705k]
  |  |  ------------------
  ------------------
  550|       |
  551|   719k|                if(nbr_id_from_bl == 64)
  ------------------
  |  Branch (551:20): [True: 13.3k, False: 705k]
  ------------------
  552|  13.3k|                {
  553|       |                    /* for top left : 1 pel per nbr bit */
  554|  13.3k|                    if(!((nbr_flags >> 16) & 0x1))
  ------------------
  |  Branch (554:24): [True: 13.3k, False: 1]
  ------------------
  555|  13.3k|                    {
  556|       |                        /* top left not available */
  557|  13.3k|                        nbr_id_from_bl++;
  558|       |                        /* top and top right;  8 pels per nbr bit */
  559|  13.3k|                        nbr_id_from_bl += look_up_trailing_zeros((nbr_flags >> 8) & 0xFF) * 8;
  ------------------
  |  |   43|  13.3k|#define look_up_trailing_zeros(x) (0 == (x) ? 8 : CTZ(x))
  |  |  ------------------
  |  |  |  Branch (43:36): [True: 0, False: 13.3k]
  |  |  ------------------
  ------------------
  560|  13.3k|                    }
  561|  13.3k|                }
  562|       |                /* Reverse Substitution Process*/
  563|   719k|                if(nbr_id_from_bl)
  ------------------
  |  Branch (563:20): [True: 663k, False: 55.7k]
  ------------------
  564|   663k|                {
  565|       |                    /* Replicate the bottom-left and subsequent unavailable pixels with the 1st available pixel above */
  566|   663k|                    pu1_ref = pu1_dst[nbr_id_from_bl];
  567|  22.3M|                    for(i = (nbr_id_from_bl - 1); i >= 0; i--)
  ------------------
  |  Branch (567:51): [True: 21.6M, False: 663k]
  ------------------
  568|  21.6M|                        pu1_dst[i] = pu1_ref;
  569|   663k|                }
  570|   719k|            }
  571|       |
  572|       |            /* for the loop of 4*Nt+1 pixels (excluding pixels computed from reverse substitution) */
  573|  10.2M|            while(nbr_id_from_bl < ((T32_4NT)+1))
  ------------------
  |  |   70|  10.2M|#define T32_4NT 128
  ------------------
  |  Branch (573:19): [True: 9.50M, False: 719k]
  ------------------
  574|  9.50M|            {
  575|       |                /* To Obtain the next unavailable idx flag after reverse neighbor substitution  */
  576|       |                /* Devide by 8 to obtain the original index */
  577|  9.50M|                frwd_nbr_flag = (nbr_id_from_bl >> 3); /*+ (nbr_id_from_bl & 0x1);*/
  578|       |
  579|       |                /* The Top-left flag is at the last bit location of nbr_flags*/
  580|  9.50M|                if(nbr_id_from_bl == (T32_4NT / 2))
  ------------------
  |  |   70|  9.50M|#define T32_4NT 128
  ------------------
  |  Branch (580:20): [True: 707k, False: 8.79M]
  ------------------
  581|   707k|                {
  582|   707k|                    get_bits = GET_BIT(nbr_flags, 16);
  ------------------
  |  |   45|   707k|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  583|       |                    /* only pel substitution for TL */
  584|   707k|                    if(!get_bits)
  ------------------
  |  Branch (584:24): [True: 112k, False: 594k]
  ------------------
  585|   112k|                        pu1_dst[nbr_id_from_bl] = pu1_dst[nbr_id_from_bl - 1];
  586|   707k|                }
  587|  8.79M|                else
  588|  8.79M|                {
  589|  8.79M|                    get_bits = GET_BIT(nbr_flags, frwd_nbr_flag);
  ------------------
  |  |   45|  8.79M|#define GET_BIT(y,x) ((y) & (1 << (x)))
  ------------------
  590|  8.79M|                    if(!get_bits)
  ------------------
  |  Branch (590:24): [True: 1.75M, False: 7.04M]
  ------------------
  591|  1.75M|                    {
  592|       |                        /* 8 pel substitution (other than TL) */
  593|  1.75M|                        pu1_ref = pu1_dst[nbr_id_from_bl - 1];
  594|  1.75M|                        ihevc_memset_mul_8(&pu1_dst[nbr_id_from_bl], pu1_ref, 8);
  595|       |
  596|  1.75M|                    }
  597|       |
  598|  8.79M|                }
  599|  9.50M|                nbr_id_from_bl += (nbr_id_from_bl == (T32_4NT / 2)) ? 1 : 8;
  ------------------
  |  |   70|  9.50M|#define T32_4NT 128
  ------------------
  |  Branch (599:35): [True: 706k, False: 8.79M]
  ------------------
  600|  9.50M|            }
  601|   719k|        }
  602|       |
  603|  3.55M|    }
  604|  3.56M|}
ihevc_intra_pred_ref_filtering:
  644|  3.41M|{
  645|  3.41M|    WORD32 filter_flag;
  646|  3.41M|    WORD32 i; /* Generic indexing variable */
  647|  3.41M|    WORD32 four_nt = 4 * nt;
  648|  3.41M|    UWORD8 au1_flt[(4 * MAX_CU_SIZE) + 1];
  649|  3.41M|    WORD32 bi_linear_int_flag = 0;
  650|  3.41M|    WORD32 abs_cond_left_flag = 0;
  651|  3.41M|    WORD32 abs_cond_top_flag = 0;
  652|       |    /*WORD32 dc_val = 1 << (BIT_DEPTH - 5);*/
  653|  3.41M|    WORD32 dc_val = 1 << (8 - 5);
  654|       |    //WORD32 strong_intra_smoothing_enable_flag  = 1;
  655|       |
  656|  3.41M|    filter_flag = gau1_intra_pred_ref_filter[mode] & (1 << (CTZ(nt) - 2));
  657|  3.41M|    if(0 == filter_flag)
  ------------------
  |  Branch (657:8): [True: 1.78M, False: 1.62M]
  ------------------
  658|  1.78M|    {
  659|  1.78M|        if(pu1_src == pu1_dst)
  ------------------
  |  Branch (659:12): [True: 1.78M, False: 18.4E]
  ------------------
  660|  1.78M|        {
  661|  1.78M|            return;
  662|  1.78M|        }
  663|  18.4E|        else
  664|  18.4E|        {
  665|  18.4E|            for(i = 0; i < (four_nt + 1); i++)
  ------------------
  |  Branch (665:24): [True: 0, False: 18.4E]
  ------------------
  666|      0|                pu1_dst[i] = pu1_src[i];
  667|  18.4E|        }
  668|  1.78M|    }
  669|       |
  670|  1.62M|    else
  671|  1.62M|    {
  672|       |        /* If strong intra smoothin is enabled and transform size is 32 */
  673|  1.62M|        if((1 == strong_intra_smoothing_enable_flag) && (32 == nt))
  ------------------
  |  Branch (673:12): [True: 81.5k, False: 1.54M]
  |  Branch (673:57): [True: 7.84k, False: 73.6k]
  ------------------
  674|  7.84k|        {
  675|       |            /* Strong Intra Filtering */
  676|  7.84k|            abs_cond_top_flag = (ABS(pu1_src[2 * nt] + pu1_src[4 * nt]
  ------------------
  |  |   45|  7.84k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 2.91k, False: 4.93k]
  |  |  ------------------
  ------------------
  677|  7.84k|                            - (2 * pu1_src[3 * nt]))) < dc_val;
  678|  7.84k|            abs_cond_left_flag = (ABS(pu1_src[2 * nt] + pu1_src[0]
  ------------------
  |  |   45|  7.84k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 2.50k, False: 5.33k]
  |  |  ------------------
  ------------------
  679|  7.84k|                            - (2 * pu1_src[nt]))) < dc_val;
  680|       |
  681|  7.84k|            bi_linear_int_flag = ((1 == abs_cond_left_flag)
  ------------------
  |  Branch (681:35): [True: 3.71k, False: 4.13k]
  ------------------
  682|  7.84k|                            && (1 == abs_cond_top_flag));
  ------------------
  |  Branch (682:32): [True: 2.31k, False: 1.39k]
  ------------------
  683|  7.84k|        }
  684|       |        /* Extremities Untouched*/
  685|  1.62M|        au1_flt[0] = pu1_src[0];
  686|  1.62M|        au1_flt[4 * nt] = pu1_src[4 * nt];
  687|       |
  688|       |        /* Strong filtering of reference samples */
  689|  1.62M|        if(1 == bi_linear_int_flag)
  ------------------
  |  Branch (689:12): [True: 2.31k, False: 1.62M]
  ------------------
  690|  2.31k|        {
  691|  2.31k|            au1_flt[2 * nt] = pu1_src[2 * nt];
  692|       |
  693|   148k|            for(i = 1; i < (2 * nt); i++)
  ------------------
  |  Branch (693:24): [True: 146k, False: 2.31k]
  ------------------
  694|   146k|                au1_flt[i] = (((2 * nt) - i) * pu1_src[0] + i * pu1_src[2 * nt] + 32) >> 6;
  695|       |
  696|   148k|            for(i = 1; i < (2 * nt); i++)
  ------------------
  |  Branch (696:24): [True: 146k, False: 2.31k]
  ------------------
  697|   146k|                au1_flt[i + (2 * nt)] = (((2 * nt) - i) * pu1_src[2 * nt] + i * pu1_src[4 * nt] + 32) >> 6;
  698|       |
  699|  2.31k|        }
  700|  1.62M|        else
  701|  1.62M|        {
  702|       |            /* Perform bilinear filtering of Reference Samples */
  703|   131M|            for(i = 0; i < (four_nt - 1); i++)
  ------------------
  |  Branch (703:24): [True: 129M, False: 1.62M]
  ------------------
  704|   129M|            {
  705|   129M|                au1_flt[i + 1] = (pu1_src[i] + 2 * pu1_src[i + 1]
  706|   129M|                                + pu1_src[i + 2] + 2) >> 2;
  707|   129M|            }
  708|  1.62M|        }
  709|       |
  710|       |
  711|   134M|        for(i = 0; i < (four_nt + 1); i++)
  ------------------
  |  Branch (711:20): [True: 133M, False: 1.62M]
  ------------------
  712|   133M|            pu1_dst[i] = au1_flt[i];
  713|  1.62M|    }
  714|       |
  715|  3.41M|}
ihevc_intra_pred_luma_planar:
  762|   945k|{
  763|       |
  764|       |
  765|   945k|    WORD32 row, col;
  766|   945k|    WORD32 log2nt = 5;
  767|   945k|    WORD32 two_nt, three_nt;
  768|   945k|    UNUSED(src_strd);
  ------------------
  |  |   38|   945k|#define UNUSED(x) ((void)(x))
  ------------------
  769|   945k|    UNUSED(mode);
  ------------------
  |  |   38|   945k|#define UNUSED(x) ((void)(x))
  ------------------
  770|   945k|    switch(nt)
  771|   945k|    {
  772|   268k|        case 32:
  ------------------
  |  Branch (772:9): [True: 268k, False: 677k]
  ------------------
  773|   268k|            log2nt = 5;
  774|   268k|            break;
  775|   410k|        case 16:
  ------------------
  |  Branch (775:9): [True: 410k, False: 535k]
  ------------------
  776|   410k|            log2nt = 4;
  777|   410k|            break;
  778|   185k|        case 8:
  ------------------
  |  Branch (778:9): [True: 185k, False: 760k]
  ------------------
  779|   185k|            log2nt = 3;
  780|   185k|            break;
  781|  82.5k|        case 4:
  ------------------
  |  Branch (781:9): [True: 82.5k, False: 863k]
  ------------------
  782|  82.5k|            log2nt = 2;
  783|  82.5k|            break;
  784|      0|        default:
  ------------------
  |  Branch (784:9): [True: 0, False: 945k]
  ------------------
  785|      0|            break;
  786|   945k|    }
  787|   945k|    two_nt = 2 * nt;
  788|   945k|    three_nt = 3 * nt;
  789|       |    /* Planar filtering */
  790|  17.2M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (790:18): [True: 16.3M, False: 945k]
  ------------------
  791|  16.3M|    {
  792|   382M|        for(col = 0; col < nt; col++)
  ------------------
  |  Branch (792:22): [True: 365M, False: 16.3M]
  ------------------
  793|   365M|        {
  794|   365M|            pu1_dst[row * dst_strd + col] = ((nt - 1 - col)
  795|   365M|                            * pu1_ref[two_nt - 1 - row]
  796|   365M|                            + (col + 1) * pu1_ref[three_nt + 1]
  797|   365M|                            + (nt - 1 - row) * pu1_ref[two_nt + 1 + col]
  798|   365M|                            + (row + 1) * pu1_ref[nt - 1] + nt) >> (log2nt + 1);
  799|   365M|        }
  800|  16.3M|    }
  801|   945k|}
ihevc_intra_pred_luma_dc:
  848|   434k|{
  849|       |
  850|   434k|    WORD32 acc_dc;
  851|   434k|    WORD32 dc_val, two_dc_val, three_dc_val;
  852|   434k|    WORD32 i;
  853|   434k|    WORD32 row, col;
  854|   434k|    WORD32 log2nt = 5;
  855|   434k|    WORD32 two_nt, three_nt;
  856|   434k|    UNUSED(mode);
  ------------------
  |  |   38|   434k|#define UNUSED(x) ((void)(x))
  ------------------
  857|   434k|    UNUSED(src_strd);
  ------------------
  |  |   38|   434k|#define UNUSED(x) ((void)(x))
  ------------------
  858|   434k|    switch(nt)
  859|   434k|    {
  860|   106k|        case 32:
  ------------------
  |  Branch (860:9): [True: 106k, False: 327k]
  ------------------
  861|   106k|            log2nt = 5;
  862|   106k|            break;
  863|   166k|        case 16:
  ------------------
  |  Branch (863:9): [True: 166k, False: 267k]
  ------------------
  864|   166k|            log2nt = 4;
  865|   166k|            break;
  866|   106k|        case 8:
  ------------------
  |  Branch (866:9): [True: 106k, False: 328k]
  ------------------
  867|   106k|            log2nt = 3;
  868|   106k|            break;
  869|  55.1k|        case 4:
  ------------------
  |  Branch (869:9): [True: 55.1k, False: 379k]
  ------------------
  870|  55.1k|            log2nt = 2;
  871|  55.1k|            break;
  872|      0|        default:
  ------------------
  |  Branch (872:9): [True: 0, False: 434k]
  ------------------
  873|      0|            break;
  874|   434k|    }
  875|   434k|    two_nt = 2 * nt;
  876|   434k|    three_nt = 3 * nt;
  877|       |
  878|   434k|    acc_dc = 0;
  879|       |    /* Calculate DC value for the transform block */
  880|  7.57M|    for(i = nt; i < two_nt; i++)
  ------------------
  |  Branch (880:17): [True: 7.14M, False: 434k]
  ------------------
  881|  7.14M|        acc_dc += pu1_ref[i];
  882|       |
  883|  7.58M|    for(i = (two_nt + 1); i <= three_nt; i++)
  ------------------
  |  Branch (883:27): [True: 7.14M, False: 434k]
  ------------------
  884|  7.14M|        acc_dc += pu1_ref[i];
  885|       |
  886|   434k|    dc_val = (acc_dc + nt) >> (log2nt + 1);
  887|       |
  888|   434k|    two_dc_val = 2 * dc_val;
  889|   434k|    three_dc_val = 3 * dc_val;
  890|       |
  891|       |
  892|   434k|    if(nt == 32)
  ------------------
  |  Branch (892:8): [True: 106k, False: 327k]
  ------------------
  893|   106k|    {
  894|  3.48M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (894:22): [True: 3.38M, False: 106k]
  ------------------
  895|   111M|            for(col = 0; col < nt; col++)
  ------------------
  |  Branch (895:26): [True: 107M, False: 3.38M]
  ------------------
  896|   107M|                pu1_dst[(row * dst_strd) + col] = dc_val;
  897|   106k|    }
  898|   327k|    else
  899|   327k|    {
  900|       |        /* DC filtering for the first top row and first left column */
  901|   327k|        pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
  902|   327k|                        >> 2);
  903|       |
  904|  3.73M|        for(col = 1; col < nt; col++)
  ------------------
  |  Branch (904:22): [True: 3.40M, False: 327k]
  ------------------
  905|  3.40M|            pu1_dst[col] = (pu1_ref[two_nt + 1 + col] + three_dc_val + 2) >> 2;
  906|       |
  907|  3.73M|        for(row = 1; row < nt; row++)
  ------------------
  |  Branch (907:22): [True: 3.40M, False: 327k]
  ------------------
  908|  3.40M|            pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
  909|  3.40M|                            >> 2;
  910|       |
  911|       |        /* Fill the remaining rows with DC value*/
  912|  3.72M|        for(row = 1; row < nt; row++)
  ------------------
  |  Branch (912:22): [True: 3.39M, False: 327k]
  ------------------
  913|  46.3M|            for(col = 1; col < nt; col++)
  ------------------
  |  Branch (913:26): [True: 42.9M, False: 3.39M]
  ------------------
  914|  42.9M|                pu1_dst[(row * dst_strd) + col] = dc_val;
  915|   327k|    }
  916|   434k|}
ihevc_intra_pred_luma_horz:
  964|  46.5k|{
  965|       |
  966|  46.5k|    WORD32 row, col;
  967|  46.5k|    WORD32 two_nt;
  968|  46.5k|    WORD16 s2_predpixel;
  969|  46.5k|    UNUSED(mode);
  ------------------
  |  |   38|  46.5k|#define UNUSED(x) ((void)(x))
  ------------------
  970|  46.5k|    UNUSED(src_strd);
  ------------------
  |  |   38|  46.5k|#define UNUSED(x) ((void)(x))
  ------------------
  971|  46.5k|    two_nt = 2 * nt;
  972|       |
  973|  46.5k|    if(nt == 32)
  ------------------
  |  Branch (973:8): [True: 7.48k, False: 39.0k]
  ------------------
  974|  7.48k|    {
  975|   246k|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (975:22): [True: 239k, False: 7.48k]
  ------------------
  976|  7.89M|            for(col = 0; col < nt; col++)
  ------------------
  |  Branch (976:26): [True: 7.65M, False: 239k]
  ------------------
  977|  7.65M|                pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];
  978|  7.48k|    }
  979|  39.0k|    else
  980|  39.0k|    {
  981|       |        /*Filtering done for the 1st row */
  982|   391k|        for(col = 0; col < nt; col++)
  ------------------
  |  Branch (982:22): [True: 352k, False: 39.0k]
  ------------------
  983|   352k|        {
  984|   352k|            s2_predpixel = pu1_ref[two_nt - 1]
  985|   352k|                            + ((pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt]) >> 1);
  986|   352k|            pu1_dst[col] = CLIP_U8(s2_predpixel);
  ------------------
  |  |   40|   352k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   352k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 11.1k, False: 341k]
  |  |  |  |  |  Branch (40:53): [True: 11.6k, False: 330k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  987|   352k|        }
  988|       |
  989|       |        /* Replication to next rows*/
  990|   352k|        for(row = 1; row < nt; row++)
  ------------------
  |  Branch (990:22): [True: 313k, False: 39.0k]
  ------------------
  991|  4.10M|            for(col = 0; col < nt; col++)
  ------------------
  |  Branch (991:26): [True: 3.79M, False: 313k]
  ------------------
  992|  3.79M|                pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];
  993|  39.0k|    }
  994|  46.5k|}
ihevc_intra_pred_luma_ver:
 1044|   431k|{
 1045|   431k|    WORD32 row, col;
 1046|   431k|    WORD16 s2_predpixel;
 1047|   431k|    WORD32 two_nt = 2 * nt;
 1048|   431k|    UNUSED(mode);
  ------------------
  |  |   38|   431k|#define UNUSED(x) ((void)(x))
  ------------------
 1049|   431k|    UNUSED(src_strd);
  ------------------
  |  |   38|   431k|#define UNUSED(x) ((void)(x))
  ------------------
 1050|       |
 1051|   431k|    if(nt == 32)
  ------------------
  |  Branch (1051:8): [True: 140k, False: 290k]
  ------------------
 1052|   140k|    {
 1053|       |        /* Replication to next columns*/
 1054|  4.57M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1054:22): [True: 4.43M, False: 140k]
  ------------------
 1055|   145M|            for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1055:26): [True: 141M, False: 4.43M]
  ------------------
 1056|   141M|                pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt + 1 + col];
 1057|   140k|    }
 1058|   290k|    else
 1059|   290k|    {
 1060|       |        /*Filtering done for the 1st column */
 1061|  3.63M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1061:22): [True: 3.34M, False: 290k]
  ------------------
 1062|  3.34M|        {
 1063|  3.34M|            s2_predpixel = pu1_ref[two_nt + 1]
 1064|  3.34M|                            + ((pu1_ref[two_nt - 1 - row] - pu1_ref[two_nt]) >> 1);
 1065|  3.34M|            pu1_dst[row * dst_strd] = CLIP_U8(s2_predpixel);
  ------------------
  |  |   40|  3.34M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  3.34M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 117k, False: 3.22M]
  |  |  |  |  |  Branch (40:53): [True: 97.5k, False: 3.12M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1066|  3.34M|        }
 1067|       |
 1068|       |        /* Replication to next columns*/
 1069|  3.62M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1069:22): [True: 3.33M, False: 290k]
  ------------------
 1070|  45.0M|            for(col = 1; col < nt; col++)
  ------------------
  |  Branch (1070:26): [True: 41.7M, False: 3.33M]
  ------------------
 1071|  41.7M|                pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt + 1 + col];
 1072|   290k|    }
 1073|   431k|}
ihevc_intra_pred_luma_mode2:
 1122|   193k|{
 1123|   193k|    WORD32 row, col;
 1124|   193k|    WORD32 two_nt = 2 * nt;
 1125|   193k|    WORD32 intra_pred_ang = 32;
 1126|   193k|    WORD32 idx = 0;
 1127|   193k|    UNUSED(mode);
  ------------------
  |  |   38|   193k|#define UNUSED(x) ((void)(x))
  ------------------
 1128|   193k|    UNUSED(src_strd);
  ------------------
  |  |   38|   193k|#define UNUSED(x) ((void)(x))
  ------------------
 1129|       |    /* For the angle 45, replication is done from the corresponding angle */
 1130|       |    /* intra_pred_ang = tan(angle) in q5 format */
 1131|  3.24M|    for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1131:18): [True: 3.04M, False: 193k]
  ------------------
 1132|  3.04M|    {
 1133|  3.04M|        idx = ((col + 1) * intra_pred_ang) >> 5; /* Use idx++ */
 1134|       |
 1135|  65.7M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1135:22): [True: 62.7M, False: 3.04M]
  ------------------
 1136|  62.7M|            pu1_dst[col + (row * dst_strd)] = pu1_ref[two_nt - row - idx - 1];
 1137|  3.04M|    }
 1138|       |
 1139|   193k|}
ihevc_intra_pred_luma_mode_18_34:
 1186|  75.3k|{
 1187|  75.3k|    WORD32 row, col;
 1188|  75.3k|    WORD32 intra_pred_ang;
 1189|  75.3k|    WORD32 idx = 0;
 1190|  75.3k|    WORD32 two_nt = 2 * nt;
 1191|  75.3k|    UNUSED(src_strd);
  ------------------
  |  |   38|  75.3k|#define UNUSED(x) ((void)(x))
  ------------------
 1192|  75.3k|    intra_pred_ang = 32;    /*Default value*/
 1193|       |
 1194|       |    /* For mode 18, angle is -45degree */
 1195|  75.3k|    if(mode == 18)
  ------------------
  |  Branch (1195:8): [True: 39.2k, False: 36.1k]
  ------------------
 1196|  39.2k|        intra_pred_ang = -32;
 1197|       |    /* For mode 34, angle is 45degree */
 1198|  36.1k|    else if(mode == 34)
  ------------------
  |  Branch (1198:13): [True: 36.1k, False: 18.4E]
  ------------------
 1199|  36.1k|        intra_pred_ang = 32;
 1200|       |    /* For the angle 45 and -45, replication is done from the corresponding angle */
 1201|       |    /* No interpolation is done for 45 degree*/
 1202|  1.00M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1202:18): [True: 924k, False: 75.3k]
  ------------------
 1203|   924k|    {
 1204|   924k|        idx = ((row + 1) * intra_pred_ang) >> 5;
 1205|       |#if OPT
 1206|       |        if(mode == 18)
 1207|       |            idx--;
 1208|       |        if(mode == 34)
 1209|       |            idx++;
 1210|       |#endif
 1211|  18.6M|        for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1211:22): [True: 17.7M, False: 924k]
  ------------------
 1212|  17.7M|            pu1_dst[col + (row * dst_strd)] = pu1_ref[two_nt + col + idx + 1];
 1213|       |
 1214|   924k|    }
 1215|       |
 1216|  75.3k|}
ihevc_intra_pred_luma_mode_3_to_9:
 1263|   359k|{
 1264|   359k|    WORD32 row, col;
 1265|   359k|    WORD32 two_nt = 2 * nt;
 1266|   359k|    WORD32 intra_pred_ang;
 1267|   359k|    WORD32 idx, ref_main_idx;
 1268|   359k|    WORD32 pos, fract;
 1269|   359k|    UNUSED(src_strd);
  ------------------
  |  |   38|   359k|#define UNUSED(x) ((void)(x))
  ------------------
 1270|       |    /* Intra Pred Angle according to the mode */
 1271|   359k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1272|       |
 1273|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1274|       |    /* samples dependent on distance to obtain destination sample */
 1275|       |
 1276|  5.57M|    for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1276:18): [True: 5.21M, False: 359k]
  ------------------
 1277|  5.21M|    {
 1278|  5.21M|        pos = ((col + 1) * intra_pred_ang);
 1279|  5.21M|        idx = pos >> 5;
 1280|  5.21M|        fract = pos & (31);
 1281|       |
 1282|       |        // Do linear filtering
 1283|   115M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1283:22): [True: 110M, False: 5.21M]
  ------------------
 1284|   110M|        {
 1285|   110M|            ref_main_idx = two_nt - row - idx - 1;
 1286|   110M|            pu1_dst[col + (row * dst_strd)] = (((32 - fract)
 1287|   110M|                            * pu1_ref[ref_main_idx]
 1288|   110M|                            + fract * pu1_ref[ref_main_idx - 1] + 16) >> 5);
 1289|   110M|        }
 1290|       |
 1291|  5.21M|    }
 1292|       |
 1293|   359k|}
ihevc_intra_pred_luma_mode_11_to_17:
 1340|   320k|{
 1341|       |    /* This function and ihevc_intra_pred_luma_mode_19_to_25 are same except*/
 1342|       |    /* for ref main & side samples assignment,can be combined for */
 1343|       |    /* optimzation*/
 1344|       |
 1345|   320k|    WORD32 row, col, k;
 1346|   320k|    WORD32 two_nt;
 1347|   320k|    WORD32 intra_pred_ang, inv_ang, inv_ang_sum;
 1348|   320k|    WORD32 idx, ref_main_idx, ref_idx;
 1349|   320k|    WORD32 pos, fract;
 1350|       |
 1351|   320k|    UWORD8 ref_temp[2 * MAX_CU_SIZE + 1];
 1352|   320k|    UWORD8 *ref_main;
 1353|   320k|    UNUSED(src_strd);
  ------------------
  |  |   38|   320k|#define UNUSED(x) ((void)(x))
  ------------------
 1354|   320k|    inv_ang_sum = 128;
 1355|   320k|    two_nt    = 2 * nt;
 1356|       |
 1357|   320k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1358|       |
 1359|   320k|    inv_ang = gai4_ihevc_inv_ang_table[mode - 11];
 1360|       |    /* Intermediate reference samples for negative angle modes */
 1361|       |    /* This have to be removed during optimization*/
 1362|       |    /* For horizontal modes, (ref main = ref left) (ref side = ref above) */
 1363|       |
 1364|   320k|    ref_main = ref_temp + nt - 1;
 1365|  5.19M|    for(k = 0; k < nt + 1; k++)
  ------------------
  |  Branch (1365:16): [True: 4.86M, False: 320k]
  ------------------
 1366|  4.86M|        ref_temp[k + nt - 1] = pu1_ref[two_nt - k];
 1367|       |
 1368|   320k|    ref_main = ref_temp + nt - 1;
 1369|   320k|    ref_idx = (nt * intra_pred_ang) >> 5;
 1370|       |
 1371|       |    /* SIMD Optimization can be done using look-up table for the loop */
 1372|       |    /* For negative angled derive the main reference samples from side */
 1373|       |    /*  reference samples refer to section 8.4.4.2.6 */
 1374|  2.04M|    for(k = -1; k > ref_idx; k--)
  ------------------
  |  Branch (1374:17): [True: 1.72M, False: 320k]
  ------------------
 1375|  1.72M|    {
 1376|  1.72M|        inv_ang_sum += inv_ang;
 1377|  1.72M|        ref_main[k] = pu1_ref[two_nt + (inv_ang_sum >> 8)];
 1378|  1.72M|    }
 1379|       |
 1380|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1381|       |    /* samples dependent on distance to obtain destination sample */
 1382|  4.84M|    for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1382:18): [True: 4.52M, False: 320k]
  ------------------
 1383|  4.52M|    {
 1384|  4.52M|        pos = ((col + 1) * intra_pred_ang);
 1385|  4.52M|        idx = pos >> 5;
 1386|  4.52M|        fract = pos & (31);
 1387|       |
 1388|       |        // Do linear filtering
 1389|   102M|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1389:22): [True: 97.8M, False: 4.52M]
  ------------------
 1390|  97.8M|        {
 1391|  97.8M|            ref_main_idx = row + idx + 1;
 1392|  97.8M|            pu1_dst[col + (dst_strd * row)] = (UWORD8)(((32 - fract)
 1393|  97.8M|                            * ref_main[ref_main_idx]
 1394|  97.8M|                            + fract * ref_main[ref_main_idx + 1] + 16) >> 5);
 1395|       |
 1396|  97.8M|        }
 1397|       |
 1398|  4.52M|    }
 1399|       |
 1400|   320k|}
ihevc_intra_pred_luma_mode_19_to_25:
 1448|   311k|{
 1449|       |
 1450|   311k|    WORD32 row, col, k;
 1451|   311k|    WORD32 two_nt, intra_pred_ang, idx;
 1452|   311k|    WORD32 inv_ang, inv_ang_sum, pos, fract;
 1453|   311k|    WORD32 ref_main_idx, ref_idx;
 1454|   311k|    UWORD8 ref_temp[(2 * MAX_CU_SIZE) + 1];
 1455|   311k|    UWORD8 *ref_main;
 1456|   311k|    UNUSED(src_strd);
  ------------------
  |  |   38|   311k|#define UNUSED(x) ((void)(x))
  ------------------
 1457|   311k|    two_nt = 2 * nt;
 1458|   311k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1459|   311k|    inv_ang = gai4_ihevc_inv_ang_table[mode - 12];
 1460|       |
 1461|       |    /* Intermediate reference samples for negative angle modes */
 1462|       |    /* This have to be removed during optimization*/
 1463|       |    /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 1464|   311k|    ref_main = ref_temp + nt - 1;
 1465|  4.61M|    for(k = 0; k < (nt + 1); k++)
  ------------------
  |  Branch (1465:16): [True: 4.29M, False: 311k]
  ------------------
 1466|  4.29M|        ref_temp[k + nt - 1] = pu1_ref[two_nt + k];
 1467|       |
 1468|   311k|    ref_idx = (nt * intra_pred_ang) >> 5;
 1469|   311k|    inv_ang_sum = 128;
 1470|       |
 1471|       |    /* SIMD Optimization can be done using look-up table for the loop */
 1472|       |    /* For negative angled derive the main reference samples from side */
 1473|       |    /*  reference samples refer to section 8.4.4.2.6 */
 1474|  1.67M|    for(k = -1; k > ref_idx; k--)
  ------------------
  |  Branch (1474:17): [True: 1.36M, False: 311k]
  ------------------
 1475|  1.36M|    {
 1476|  1.36M|        inv_ang_sum += inv_ang;
 1477|  1.36M|        ref_main[k] = pu1_ref[two_nt - (inv_ang_sum >> 8)];
 1478|  1.36M|    }
 1479|       |
 1480|  4.27M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1480:18): [True: 3.96M, False: 311k]
  ------------------
 1481|  3.96M|    {
 1482|  3.96M|        pos = ((row + 1) * intra_pred_ang);
 1483|  3.96M|        idx = pos >> 5;
 1484|  3.96M|        fract = pos & (31);
 1485|       |
 1486|       |        // Do linear filtering
 1487|  78.9M|        for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1487:22): [True: 74.9M, False: 3.96M]
  ------------------
 1488|  74.9M|        {
 1489|  74.9M|            ref_main_idx = col + idx + 1;
 1490|  74.9M|            pu1_dst[(row * dst_strd) + col] = (UWORD8)(((32 - fract)
 1491|  74.9M|                            * ref_main[ref_main_idx]
 1492|  74.9M|                            + fract * ref_main[ref_main_idx + 1] + 16) >> 5);
 1493|       |
 1494|  74.9M|        }
 1495|       |
 1496|  3.96M|    }
 1497|       |
 1498|   311k|}
ihevc_intra_pred_luma_mode_27_to_33:
 1546|   348k|{
 1547|   348k|    WORD32 row, col;
 1548|   348k|    WORD32 two_nt, pos, fract;
 1549|   348k|    WORD32 intra_pred_ang;
 1550|   348k|    WORD32 idx, ref_main_idx;
 1551|   348k|    UNUSED(src_strd);
  ------------------
  |  |   38|   348k|#define UNUSED(x) ((void)(x))
  ------------------
 1552|   348k|    two_nt = 2 * nt;
 1553|   348k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1554|       |
 1555|  4.91M|    for(row = 0; row < nt; row++)
  ------------------
  |  Branch (1555:18): [True: 4.56M, False: 348k]
  ------------------
 1556|  4.56M|    {
 1557|  4.56M|        pos = ((row + 1) * intra_pred_ang);
 1558|  4.56M|        idx = pos >> 5;
 1559|  4.56M|        fract = pos & (31);
 1560|       |
 1561|       |        // Do linear filtering
 1562|  90.9M|        for(col = 0; col < nt; col++)
  ------------------
  |  Branch (1562:22): [True: 86.4M, False: 4.56M]
  ------------------
 1563|  86.4M|        {
 1564|  86.4M|            ref_main_idx = two_nt + col + idx + 1;
 1565|  86.4M|            pu1_dst[col + (row * dst_strd)] = (((32 - fract)
 1566|  86.4M|                            * pu1_ref[ref_main_idx]
 1567|  86.4M|                            + fract * pu1_ref[ref_main_idx + 1] + 16) >> 5);
 1568|  86.4M|        }
 1569|       |
 1570|  4.56M|    }
 1571|       |
 1572|   348k|}

ihevc_itrans_recon_4x4_ttype1:
  108|   139k|{
  109|   139k|    WORD32 i, c[4];
  110|   139k|    WORD32 add;
  111|   139k|    WORD32 shift;
  112|   139k|    WORD16 *pi2_tmp_orig;
  113|   139k|    WORD32 trans_size;
  114|   139k|    UNUSED(zero_rows);
  ------------------
  |  |   38|   139k|#define UNUSED(x) ((void)(x))
  ------------------
  115|   139k|    trans_size = TRANS_SIZE_4;
  ------------------
  |  |  419|   139k|#define TRANS_SIZE_4   4
  ------------------
  116|       |
  117|   139k|    pi2_tmp_orig = pi2_tmp;
  118|       |
  119|       |    /* Inverse Transform 1st stage */
  120|   139k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   139k|#define IT_SHIFT_STAGE_1 7
  ------------------
  121|   139k|    add = 1 << (shift - 1);
  122|       |
  123|   698k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (123:16): [True: 558k, False: 139k]
  ------------------
  124|   558k|    {
  125|       |        /* Checking for Zero Cols */
  126|   558k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (126:12): [True: 284k, False: 274k]
  ------------------
  127|   284k|        {
  128|   284k|            memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  129|   284k|        }
  130|   274k|        else
  131|   274k|        {
  132|       |            // Intermediate Variables
  133|   274k|            c[0] = pi2_src[0] + pi2_src[2 * src_strd];
  134|   274k|            c[1] = pi2_src[2 * src_strd] + pi2_src[3 * src_strd];
  135|   274k|            c[2] = pi2_src[0] - pi2_src[3 * src_strd];
  136|   274k|            c[3] = 74 * pi2_src[src_strd];
  137|       |
  138|   274k|            pi2_tmp[0] =
  139|   274k|                            CLIP_S16((29 * c[0] + 55 * c[1] + c[3] + add) >> shift);
  ------------------
  |  |   53|   274k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   274k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 519, False: 273k]
  |  |  |  |  |  Branch (40:53): [True: 414, False: 273k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|   274k|            pi2_tmp[1] =
  141|   274k|                            CLIP_S16((55 * c[2] - 29 * c[1] + c[3] + add) >> shift);
  ------------------
  |  |   53|   274k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   274k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 600, False: 273k]
  |  |  |  |  |  Branch (40:53): [True: 589, False: 273k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|   274k|            pi2_tmp[2] =
  143|   274k|                            CLIP_S16((74 * (pi2_src[0] - pi2_src[2 * src_strd] + pi2_src[3 * src_strd]) + add) >> shift);
  ------------------
  |  |   53|   274k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   274k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 557, False: 273k]
  |  |  |  |  |  Branch (40:53): [True: 435, False: 273k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|   274k|            pi2_tmp[3] =
  145|   274k|                            CLIP_S16((55 * c[0] + 29 * c[2] - c[3] + add) >> shift);
  ------------------
  |  |   53|   274k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   274k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 886, False: 273k]
  |  |  |  |  |  Branch (40:53): [True: 869, False: 272k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|   274k|        }
  147|   558k|        pi2_src++;
  148|   558k|        pi2_tmp += trans_size;
  149|   558k|        zero_cols = zero_cols >> 1;
  150|   558k|    }
  151|       |
  152|   139k|    pi2_tmp = pi2_tmp_orig;
  153|       |
  154|       |    /* Inverse Transform 2nd stage */
  155|   139k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   139k|#define IT_SHIFT_STAGE_2 12
  ------------------
  156|   139k|    add = 1 << (shift - 1);
  157|       |
  158|   698k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (158:16): [True: 558k, False: 139k]
  ------------------
  159|   558k|    {
  160|   558k|        WORD32 itrans_out;
  161|       |        // Intermediate Variables
  162|   558k|        c[0] = pi2_tmp[0] + pi2_tmp[2 * trans_size];
  163|   558k|        c[1] = pi2_tmp[2 * trans_size] + pi2_tmp[3 * trans_size];
  164|   558k|        c[2] = pi2_tmp[0] - pi2_tmp[3 * trans_size];
  165|   558k|        c[3] = 74 * pi2_tmp[trans_size];
  166|       |
  167|   558k|        itrans_out =
  168|   558k|                        CLIP_S16((29 * c[0] + 55 * c[1] + c[3] + add) >> shift);
  ------------------
  |  |   53|   558k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 558k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 558k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|   558k|        pu1_dst[0] = CLIP_U8((itrans_out + pu1_pred[0]));
  ------------------
  |  |   40|   558k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 48.9k, False: 509k]
  |  |  |  |  |  Branch (40:53): [True: 53.3k, False: 456k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|   558k|        itrans_out =
  171|   558k|                        CLIP_S16((55 * c[2] - 29 * c[1] + c[3] + add) >> shift);
  ------------------
  |  |   53|   558k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 558k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 558k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|   558k|        pu1_dst[1] = CLIP_U8((itrans_out + pu1_pred[1]));
  ------------------
  |  |   40|   558k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 53.9k, False: 504k]
  |  |  |  |  |  Branch (40:53): [True: 61.0k, False: 443k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|   558k|        itrans_out =
  174|   558k|                        CLIP_S16((74 * (pi2_tmp[0] - pi2_tmp[2 * trans_size] + pi2_tmp[3 * trans_size]) + add) >> shift);
  ------------------
  |  |   53|   558k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 558k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 558k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|   558k|        pu1_dst[2] = CLIP_U8((itrans_out + pu1_pred[2]));
  ------------------
  |  |   40|   558k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 53.3k, False: 505k]
  |  |  |  |  |  Branch (40:53): [True: 56.5k, False: 448k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|   558k|        itrans_out =
  177|   558k|                        CLIP_S16((55 * c[0] + 29 * c[2] - c[3] + add) >> shift);
  ------------------
  |  |   53|   558k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 558k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 558k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|   558k|        pu1_dst[3] = CLIP_U8((itrans_out + pu1_pred[3]));
  ------------------
  |  |   40|   558k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   558k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 63.0k, False: 495k]
  |  |  |  |  |  Branch (40:53): [True: 70.1k, False: 425k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|   558k|        pi2_tmp++;
  180|   558k|        pu1_pred += pred_strd;
  181|   558k|        pu1_dst += dst_strd;
  182|   558k|    }
  183|   139k|}
ihevc_itrans_recon_4x4:
  244|  8.24k|{
  245|  8.24k|    WORD32 j;
  246|  8.24k|    WORD32 e[2], o[2];
  247|  8.24k|    WORD32 add;
  248|  8.24k|    WORD32 shift;
  249|  8.24k|    WORD16 *pi2_tmp_orig;
  250|  8.24k|    WORD32 trans_size;
  251|  8.24k|    UNUSED(zero_rows);
  ------------------
  |  |   38|  8.24k|#define UNUSED(x) ((void)(x))
  ------------------
  252|  8.24k|    trans_size = TRANS_SIZE_4;
  ------------------
  |  |  419|  8.24k|#define TRANS_SIZE_4   4
  ------------------
  253|       |
  254|  8.24k|    pi2_tmp_orig = pi2_tmp;
  255|       |
  256|       |    /* Inverse Transform 1st stage */
  257|  8.24k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  8.24k|#define IT_SHIFT_STAGE_1 7
  ------------------
  258|  8.24k|    add = 1 << (shift - 1);
  259|       |
  260|  41.2k|    for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (260:16): [True: 32.9k, False: 8.24k]
  ------------------
  261|  32.9k|    {
  262|       |        /* Checking for Zero Cols */
  263|  32.9k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (263:12): [True: 8.11k, False: 24.8k]
  ------------------
  264|  8.11k|        {
  265|  8.11k|            memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  266|  8.11k|        }
  267|  24.8k|        else
  268|  24.8k|        {
  269|       |
  270|       |            /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  271|  24.8k|            o[0] = g_ai2_ihevc_trans_4[1][0] * pi2_src[src_strd]
  272|  24.8k|                            + g_ai2_ihevc_trans_4[3][0] * pi2_src[3 * src_strd];
  273|  24.8k|            o[1] = g_ai2_ihevc_trans_4[1][1] * pi2_src[src_strd]
  274|  24.8k|                            + g_ai2_ihevc_trans_4[3][1] * pi2_src[3 * src_strd];
  275|  24.8k|            e[0] = g_ai2_ihevc_trans_4[0][0] * pi2_src[0]
  276|  24.8k|                            + g_ai2_ihevc_trans_4[2][0] * pi2_src[2 * src_strd];
  277|  24.8k|            e[1] = g_ai2_ihevc_trans_4[0][1] * pi2_src[0]
  278|  24.8k|                            + g_ai2_ihevc_trans_4[2][1] * pi2_src[2 * src_strd];
  279|       |
  280|  24.8k|            pi2_tmp[0] =
  281|  24.8k|                            CLIP_S16(((e[0] + o[0] + add) >> shift));
  ------------------
  |  |   53|  24.8k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  24.8k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 69, False: 24.7k]
  |  |  |  |  |  Branch (40:53): [True: 43, False: 24.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|  24.8k|            pi2_tmp[1] =
  283|  24.8k|                            CLIP_S16(((e[1] + o[1] + add) >> shift));
  ------------------
  |  |   53|  24.8k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  24.8k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 21, False: 24.8k]
  |  |  |  |  |  Branch (40:53): [True: 19, False: 24.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  24.8k|            pi2_tmp[2] =
  285|  24.8k|                            CLIP_S16(((e[1] - o[1] + add) >> shift));
  ------------------
  |  |   53|  24.8k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  24.8k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 56, False: 24.7k]
  |  |  |  |  |  Branch (40:53): [True: 20, False: 24.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|  24.8k|            pi2_tmp[3] =
  287|  24.8k|                            CLIP_S16(((e[0] - o[0] + add) >> shift));
  ------------------
  |  |   53|  24.8k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  24.8k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 41, False: 24.8k]
  |  |  |  |  |  Branch (40:53): [True: 39, False: 24.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|       |
  289|  24.8k|        }
  290|  32.9k|        pi2_src++;
  291|  32.9k|        pi2_tmp += trans_size;
  292|  32.9k|        zero_cols = zero_cols >> 1;
  293|  32.9k|    }
  294|       |
  295|  8.24k|    pi2_tmp = pi2_tmp_orig;
  296|       |
  297|       |    /* Inverse Transform 2nd stage */
  298|  8.24k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  8.24k|#define IT_SHIFT_STAGE_2 12
  ------------------
  299|  8.24k|    add = 1 << (shift - 1);
  300|       |
  301|  41.2k|    for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (301:16): [True: 32.9k, False: 8.24k]
  ------------------
  302|  32.9k|    {
  303|  32.9k|        WORD32 itrans_out;
  304|       |        /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  305|  32.9k|        o[0] = g_ai2_ihevc_trans_4[1][0] * pi2_tmp[trans_size]
  306|  32.9k|                        + g_ai2_ihevc_trans_4[3][0] * pi2_tmp[3 * trans_size];
  307|  32.9k|        o[1] = g_ai2_ihevc_trans_4[1][1] * pi2_tmp[trans_size]
  308|  32.9k|                        + g_ai2_ihevc_trans_4[3][1] * pi2_tmp[3 * trans_size];
  309|  32.9k|        e[0] = g_ai2_ihevc_trans_4[0][0] * pi2_tmp[0]
  310|  32.9k|                        + g_ai2_ihevc_trans_4[2][0] * pi2_tmp[2 * trans_size];
  311|  32.9k|        e[1] = g_ai2_ihevc_trans_4[0][1] * pi2_tmp[0]
  312|  32.9k|                        + g_ai2_ihevc_trans_4[2][1] * pi2_tmp[2 * trans_size];
  313|       |
  314|  32.9k|        itrans_out =
  315|  32.9k|                        CLIP_S16(((e[0] + o[0] + add) >> shift));
  ------------------
  |  |   53|  32.9k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 32.9k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 32.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|  32.9k|        pu1_dst[0] = CLIP_U8((itrans_out + pu1_pred[0]));
  ------------------
  |  |   40|  32.9k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.58k, False: 29.3k]
  |  |  |  |  |  Branch (40:53): [True: 3.84k, False: 25.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  32.9k|        itrans_out =
  318|  32.9k|                        CLIP_S16(((e[1] + o[1] + add) >> shift));
  ------------------
  |  |   53|  32.9k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 32.9k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 32.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|  32.9k|        pu1_dst[1] = CLIP_U8((itrans_out + pu1_pred[1]));
  ------------------
  |  |   40|  32.9k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.92k, False: 30.0k]
  |  |  |  |  |  Branch (40:53): [True: 3.44k, False: 26.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|  32.9k|        itrans_out =
  321|  32.9k|                        CLIP_S16(((e[1] - o[1] + add) >> shift));
  ------------------
  |  |   53|  32.9k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 32.9k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 32.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|  32.9k|        pu1_dst[2] = CLIP_U8((itrans_out + pu1_pred[2]));
  ------------------
  |  |   40|  32.9k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.92k, False: 30.0k]
  |  |  |  |  |  Branch (40:53): [True: 3.50k, False: 26.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|  32.9k|        itrans_out =
  324|  32.9k|                        CLIP_S16(((e[0] - o[0] + add) >> shift));
  ------------------
  |  |   53|  32.9k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 32.9k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 32.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|  32.9k|        pu1_dst[3] = CLIP_U8((itrans_out + pu1_pred[3]));
  ------------------
  |  |   40|  32.9k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  32.9k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.16k, False: 29.8k]
  |  |  |  |  |  Branch (40:53): [True: 4.01k, False: 25.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  326|       |
  327|  32.9k|        pi2_tmp++;
  328|  32.9k|        pu1_pred += pred_strd;
  329|  32.9k|        pu1_dst += dst_strd;
  330|       |
  331|  32.9k|    }
  332|  8.24k|}

ihevc_itrans_recon_16x16:
  107|   656k|{
  108|   656k|    WORD32 j, k;
  109|   656k|    WORD32 e[8], o[8];
  110|   656k|    WORD32 ee[4], eo[4];
  111|   656k|    WORD32 eee[2], eeo[2];
  112|   656k|    WORD32 add;
  113|   656k|    WORD32 shift;
  114|   656k|    WORD16 *pi2_tmp_orig;
  115|   656k|    WORD32 trans_size;
  116|   656k|    WORD32 zero_rows_2nd_stage = zero_cols;
  117|   656k|    WORD32 row_limit_2nd_stage;
  118|       |
  119|   656k|    if((zero_cols & 0xFFF0) == 0xFFF0)
  ------------------
  |  Branch (119:8): [True: 290k, False: 366k]
  ------------------
  120|   290k|        row_limit_2nd_stage = 4;
  121|   366k|    else if((zero_cols & 0xFF00) == 0xFF00)
  ------------------
  |  Branch (121:13): [True: 179k, False: 186k]
  ------------------
  122|   179k|        row_limit_2nd_stage = 8;
  123|   186k|    else
  124|   186k|        row_limit_2nd_stage = TRANS_SIZE_16;
  ------------------
  |  |  421|   186k|#define TRANS_SIZE_16 16
  ------------------
  125|       |
  126|   656k|    trans_size = TRANS_SIZE_16;
  ------------------
  |  |  421|   656k|#define TRANS_SIZE_16 16
  ------------------
  127|   656k|    pi2_tmp_orig = pi2_tmp;
  128|   656k|    if((zero_rows & 0xFFF0) == 0xFFF0)  /* First 4 rows of input are non-zero */
  ------------------
  |  Branch (128:8): [True: 279k, False: 376k]
  ------------------
  129|   279k|    {
  130|       |        /* Inverse Transform 1st stage */
  131|       |        /************************************************************************************************/
  132|       |        /**********************************START - IT_RECON_16x16****************************************/
  133|       |        /************************************************************************************************/
  134|       |
  135|   279k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   279k|#define IT_SHIFT_STAGE_1 7
  ------------------
  136|   279k|        add = 1 << (shift - 1);
  137|       |
  138|  2.09M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (138:20): [True: 1.81M, False: 279k]
  ------------------
  139|  1.81M|        {
  140|       |            /* Checking for Zero Cols */
  141|  1.81M|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (141:16): [True: 915k, False: 903k]
  ------------------
  142|   915k|            {
  143|   915k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  144|   915k|            }
  145|   903k|            else
  146|   903k|            {
  147|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  148|  8.20M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (148:28): [True: 7.29M, False: 903k]
  ------------------
  149|  7.29M|                {
  150|  7.29M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_src[src_strd]
  151|  7.29M|                                    + g_ai2_ihevc_trans_16[3][k]
  152|  7.29M|                                                    * pi2_src[3 * src_strd];
  153|  7.29M|                }
  154|  4.55M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (154:28): [True: 3.64M, False: 903k]
  ------------------
  155|  3.64M|                {
  156|  3.64M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_src[2 * src_strd];
  157|  3.64M|                }
  158|   903k|                eeo[0] = 0;
  159|   903k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_src[0];
  160|   903k|                eeo[1] = 0;
  161|   903k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_src[0];
  162|       |
  163|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  164|  2.72M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (164:28): [True: 1.82M, False: 903k]
  ------------------
  165|  1.82M|                {
  166|  1.82M|                    ee[k] = eee[k] + eeo[k];
  167|  1.82M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  168|  1.82M|                }
  169|  4.55M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (169:28): [True: 3.64M, False: 903k]
  ------------------
  170|  3.64M|                {
  171|  3.64M|                    e[k] = ee[k] + eo[k];
  172|  3.64M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  173|  3.64M|                }
  174|  8.19M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (174:28): [True: 7.29M, False: 903k]
  ------------------
  175|  7.29M|                {
  176|  7.29M|                    pi2_tmp[k] =
  177|  7.29M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  7.29M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.29M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.16k, False: 7.29M]
  |  |  |  |  |  Branch (40:53): [True: 1.45k, False: 7.29M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|  7.29M|                    pi2_tmp[k + 8] =
  179|  7.29M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  7.29M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.29M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.65k, False: 7.29M]
  |  |  |  |  |  Branch (40:53): [True: 1.56k, False: 7.29M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|  7.29M|                }
  181|   903k|            }
  182|  1.81M|            pi2_src++;
  183|  1.81M|            pi2_tmp += trans_size;
  184|  1.81M|            zero_cols = zero_cols >> 1;
  185|  1.81M|        }
  186|       |
  187|   279k|        pi2_tmp = pi2_tmp_orig;
  188|       |
  189|       |        /* Inverse Transform 2nd stage */
  190|   279k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   279k|#define IT_SHIFT_STAGE_2 12
  ------------------
  191|   279k|        add = 1 << (shift - 1);
  192|       |
  193|   279k|        if((zero_rows_2nd_stage & 0xFFF0) == 0xFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (193:12): [True: 174k, False: 105k]
  ------------------
  194|   174k|        {
  195|  2.89M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (195:24): [True: 2.72M, False: 174k]
  ------------------
  196|  2.72M|            {
  197|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  198|  24.4M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (198:28): [True: 21.7M, False: 2.72M]
  ------------------
  199|  21.7M|                {
  200|  21.7M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  201|  21.7M|                                    + g_ai2_ihevc_trans_16[3][k]
  202|  21.7M|                                                    * pi2_tmp[3 * trans_size];
  203|  21.7M|                }
  204|  13.5M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (204:28): [True: 10.8M, False: 2.72M]
  ------------------
  205|  10.8M|                {
  206|  10.8M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size];
  207|  10.8M|                }
  208|  2.72M|                eeo[0] = 0;
  209|  2.72M|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  210|  2.72M|                eeo[1] = 0;
  211|  2.72M|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  212|       |
  213|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  214|  8.16M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (214:28): [True: 5.43M, False: 2.72M]
  ------------------
  215|  5.43M|                {
  216|  5.43M|                    ee[k] = eee[k] + eeo[k];
  217|  5.43M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  218|  5.43M|                }
  219|  13.6M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (219:28): [True: 10.8M, False: 2.72M]
  ------------------
  220|  10.8M|                {
  221|  10.8M|                    e[k] = ee[k] + eo[k];
  222|  10.8M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  223|  10.8M|                }
  224|  24.2M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (224:28): [True: 21.5M, False: 2.72M]
  ------------------
  225|  21.5M|                {
  226|  21.5M|                    WORD32 itrans_out;
  227|  21.5M|                    itrans_out =
  228|  21.5M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  21.5M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  21.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 21.5M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 21.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|  21.5M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  21.5M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  21.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.33M, False: 19.2M]
  |  |  |  |  |  Branch (40:53): [True: 992k, False: 18.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|  21.5M|                    itrans_out =
  231|  21.5M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  21.5M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  21.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 21.5M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 21.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|  21.5M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  21.5M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  21.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.20M, False: 19.3M]
  |  |  |  |  |  Branch (40:53): [True: 974k, False: 18.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|  21.5M|                }
  234|  2.72M|                pi2_tmp++;
  235|  2.72M|                pu1_pred += pred_strd;
  236|  2.72M|                pu1_dst += dst_strd;
  237|  2.72M|            }
  238|   174k|        }
  239|   105k|        else if((zero_rows_2nd_stage & 0xFF00) == 0xFF00) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (239:17): [True: 68.8k, False: 36.5k]
  ------------------
  240|  68.8k|        {
  241|  1.03M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (241:24): [True: 963k, False: 68.8k]
  ------------------
  242|   963k|            {
  243|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  244|  8.62M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (244:28): [True: 7.65M, False: 963k]
  ------------------
  245|  7.65M|                {
  246|  7.65M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  247|  7.65M|                                    + g_ai2_ihevc_trans_16[3][k]
  248|  7.65M|                                                    * pi2_tmp[3 * trans_size]
  249|  7.65M|                                    + g_ai2_ihevc_trans_16[5][k]
  250|  7.65M|                                                    * pi2_tmp[5 * trans_size]
  251|  7.65M|                                    + g_ai2_ihevc_trans_16[7][k]
  252|  7.65M|                                                    * pi2_tmp[7 * trans_size];
  253|  7.65M|                }
  254|  4.83M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (254:28): [True: 3.87M, False: 963k]
  ------------------
  255|  3.87M|                {
  256|  3.87M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  257|  3.87M|                                    + g_ai2_ihevc_trans_16[6][k]
  258|  3.87M|                                                    * pi2_tmp[6 * trans_size];
  259|  3.87M|                }
  260|   963k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size];
  261|   963k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  262|   963k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size];
  263|   963k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  264|       |
  265|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  266|  2.89M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (266:28): [True: 1.93M, False: 963k]
  ------------------
  267|  1.93M|                {
  268|  1.93M|                    ee[k] = eee[k] + eeo[k];
  269|  1.93M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  270|  1.93M|                }
  271|  4.84M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (271:28): [True: 3.88M, False: 963k]
  ------------------
  272|  3.88M|                {
  273|  3.88M|                    e[k] = ee[k] + eo[k];
  274|  3.88M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  275|  3.88M|                }
  276|  8.41M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (276:28): [True: 7.44M, False: 963k]
  ------------------
  277|  7.44M|                {
  278|  7.44M|                    WORD32 itrans_out;
  279|  7.44M|                    itrans_out =
  280|  7.44M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  7.44M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.44M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 7.44M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 7.44M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|  7.44M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  7.44M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.44M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.41M, False: 6.03M]
  |  |  |  |  |  Branch (40:53): [True: 623k, False: 5.40M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|  7.44M|                    itrans_out =
  283|  7.44M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  7.44M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.44M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 7.44M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 7.44M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  7.44M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  7.44M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.44M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.36M, False: 6.08M]
  |  |  |  |  |  Branch (40:53): [True: 511k, False: 5.56M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|  7.44M|                }
  286|   963k|                pi2_tmp++;
  287|   963k|                pu1_pred += pred_strd;
  288|   963k|                pu1_dst += dst_strd;
  289|   963k|            }
  290|  68.8k|        }
  291|  36.5k|        else /* All rows of output of 1st stage are non-zero */
  292|  36.5k|        {
  293|   603k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (293:24): [True: 566k, False: 36.5k]
  ------------------
  294|   566k|            {
  295|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  296|  5.10M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (296:28): [True: 4.53M, False: 566k]
  ------------------
  297|  4.53M|                {
  298|  4.53M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  299|  4.53M|                                    + g_ai2_ihevc_trans_16[3][k]
  300|  4.53M|                                                    * pi2_tmp[3 * trans_size]
  301|  4.53M|                                    + g_ai2_ihevc_trans_16[5][k]
  302|  4.53M|                                                    * pi2_tmp[5 * trans_size]
  303|  4.53M|                                    + g_ai2_ihevc_trans_16[7][k]
  304|  4.53M|                                                    * pi2_tmp[7 * trans_size]
  305|  4.53M|                                    + g_ai2_ihevc_trans_16[9][k]
  306|  4.53M|                                                    * pi2_tmp[9 * trans_size]
  307|  4.53M|                                    + g_ai2_ihevc_trans_16[11][k]
  308|  4.53M|                                                    * pi2_tmp[11 * trans_size]
  309|  4.53M|                                    + g_ai2_ihevc_trans_16[13][k]
  310|  4.53M|                                                    * pi2_tmp[13 * trans_size]
  311|  4.53M|                                    + g_ai2_ihevc_trans_16[15][k]
  312|  4.53M|                                                    * pi2_tmp[15 * trans_size];
  313|  4.53M|                }
  314|  2.83M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (314:28): [True: 2.26M, False: 566k]
  ------------------
  315|  2.26M|                {
  316|  2.26M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  317|  2.26M|                                    + g_ai2_ihevc_trans_16[6][k]
  318|  2.26M|                                                    * pi2_tmp[6 * trans_size]
  319|  2.26M|                                    + g_ai2_ihevc_trans_16[10][k]
  320|  2.26M|                                                    * pi2_tmp[10 * trans_size]
  321|  2.26M|                                    + g_ai2_ihevc_trans_16[14][k]
  322|  2.26M|                                                    * pi2_tmp[14 * trans_size];
  323|  2.26M|                }
  324|   566k|                eeo[0] =
  325|   566k|                                g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size]
  326|   566k|                                                + g_ai2_ihevc_trans_16[12][0]
  327|   566k|                                                                * pi2_tmp[12
  328|   566k|                                                                                * trans_size];
  329|   566k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0]
  330|   566k|                                + g_ai2_ihevc_trans_16[8][0] * pi2_tmp[8 * trans_size];
  331|   566k|                eeo[1] =
  332|   566k|                                g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size]
  333|   566k|                                                + g_ai2_ihevc_trans_16[12][1]
  334|   566k|                                                                * pi2_tmp[12
  335|   566k|                                                                                * trans_size];
  336|   566k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0]
  337|   566k|                                + g_ai2_ihevc_trans_16[8][1] * pi2_tmp[8 * trans_size];
  338|       |
  339|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  340|  1.70M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (340:28): [True: 1.13M, False: 566k]
  ------------------
  341|  1.13M|                {
  342|  1.13M|                    ee[k] = eee[k] + eeo[k];
  343|  1.13M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  344|  1.13M|                }
  345|  2.83M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (345:28): [True: 2.26M, False: 566k]
  ------------------
  346|  2.26M|                {
  347|  2.26M|                    e[k] = ee[k] + eo[k];
  348|  2.26M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  349|  2.26M|                }
  350|  5.05M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (350:28): [True: 4.48M, False: 566k]
  ------------------
  351|  4.48M|                {
  352|  4.48M|                    WORD32 itrans_out;
  353|  4.48M|                    itrans_out =
  354|  4.48M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  4.48M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  4.48M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 4.48M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 4.48M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|  4.48M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  4.48M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  4.48M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 952k, False: 3.53M]
  |  |  |  |  |  Branch (40:53): [True: 640k, False: 2.89M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|  4.48M|                    itrans_out =
  357|  4.48M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  4.48M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  4.48M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 4.48M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 4.48M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|  4.48M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  4.48M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  4.48M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 841k, False: 3.64M]
  |  |  |  |  |  Branch (40:53): [True: 563k, False: 3.08M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|  4.48M|                }
  360|   566k|                pi2_tmp++;
  361|   566k|                pu1_pred += pred_strd;
  362|   566k|                pu1_dst += dst_strd;
  363|   566k|            }
  364|  36.5k|        }
  365|       |        /************************************************************************************************/
  366|       |        /************************************END - IT_RECON_16x16****************************************/
  367|       |        /************************************************************************************************/
  368|   279k|    }
  369|   376k|    else if((zero_rows & 0xFF00) == 0xFF00)  /* First 8 rows of input are non-zero */
  ------------------
  |  Branch (369:13): [True: 108k, False: 268k]
  ------------------
  370|   108k|    {
  371|       |        /* Inverse Transform 1st stage */
  372|       |        /************************************************************************************************/
  373|       |        /**********************************START - IT_RECON_16x16****************************************/
  374|       |        /************************************************************************************************/
  375|       |
  376|   108k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   108k|#define IT_SHIFT_STAGE_1 7
  ------------------
  377|   108k|        add = 1 << (shift - 1);
  378|       |
  379|   980k|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (379:20): [True: 872k, False: 108k]
  ------------------
  380|   872k|        {
  381|       |            /* Checking for Zero Cols */
  382|   872k|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (382:16): [True: 411k, False: 461k]
  ------------------
  383|   411k|            {
  384|   411k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  385|   411k|            }
  386|   461k|            else
  387|   461k|            {
  388|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  389|  4.21M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (389:28): [True: 3.75M, False: 461k]
  ------------------
  390|  3.75M|                {
  391|  3.75M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_src[src_strd]
  392|  3.75M|                                    + g_ai2_ihevc_trans_16[3][k]
  393|  3.75M|                                                    * pi2_src[3 * src_strd]
  394|  3.75M|                                    + g_ai2_ihevc_trans_16[5][k]
  395|  3.75M|                                                    * pi2_src[5 * src_strd]
  396|  3.75M|                                    + g_ai2_ihevc_trans_16[7][k]
  397|  3.75M|                                                    * pi2_src[7 * src_strd];
  398|  3.75M|                }
  399|  2.33M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (399:28): [True: 1.87M, False: 461k]
  ------------------
  400|  1.87M|                {
  401|  1.87M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_src[2 * src_strd]
  402|  1.87M|                                    + g_ai2_ihevc_trans_16[6][k]
  403|  1.87M|                                                    * pi2_src[6 * src_strd];
  404|  1.87M|                }
  405|   461k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_src[4 * src_strd];
  406|   461k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_src[0];
  407|   461k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_src[4 * src_strd];
  408|   461k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_src[0];
  409|       |
  410|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  411|  1.40M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (411:28): [True: 939k, False: 461k]
  ------------------
  412|   939k|                {
  413|   939k|                    ee[k] = eee[k] + eeo[k];
  414|   939k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  415|   939k|                }
  416|  2.33M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (416:28): [True: 1.87M, False: 461k]
  ------------------
  417|  1.87M|                {
  418|  1.87M|                    e[k] = ee[k] + eo[k];
  419|  1.87M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  420|  1.87M|                }
  421|  4.21M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (421:28): [True: 3.75M, False: 461k]
  ------------------
  422|  3.75M|                {
  423|  3.75M|                    pi2_tmp[k] =
  424|  3.75M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  3.75M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  3.75M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.71k, False: 3.75M]
  |  |  |  |  |  Branch (40:53): [True: 1.69k, False: 3.75M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|  3.75M|                    pi2_tmp[k + 8] =
  426|  3.75M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  3.75M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  3.75M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.59k, False: 3.75M]
  |  |  |  |  |  Branch (40:53): [True: 1.77k, False: 3.75M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|  3.75M|                }
  428|   461k|            }
  429|   872k|            pi2_src++;
  430|   872k|            pi2_tmp += trans_size;
  431|   872k|            zero_cols = zero_cols >> 1;
  432|   872k|        }
  433|       |
  434|   108k|        pi2_tmp = pi2_tmp_orig;
  435|       |
  436|       |        /* Inverse Transform 2nd stage */
  437|   108k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   108k|#define IT_SHIFT_STAGE_2 12
  ------------------
  438|   108k|        add = 1 << (shift - 1);
  439|       |
  440|   108k|        if((zero_rows_2nd_stage & 0xFFF0) == 0xFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (440:12): [True: 55.5k, False: 52.9k]
  ------------------
  441|  55.5k|        {
  442|   900k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (442:24): [True: 844k, False: 55.5k]
  ------------------
  443|   844k|            {
  444|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  445|  7.57M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (445:28): [True: 6.73M, False: 844k]
  ------------------
  446|  6.73M|                {
  447|  6.73M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  448|  6.73M|                                    + g_ai2_ihevc_trans_16[3][k]
  449|  6.73M|                                                    * pi2_tmp[3 * trans_size];
  450|  6.73M|                }
  451|  4.22M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (451:28): [True: 3.37M, False: 844k]
  ------------------
  452|  3.37M|                {
  453|  3.37M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size];
  454|  3.37M|                }
  455|   844k|                eeo[0] = 0;
  456|   844k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  457|   844k|                eeo[1] = 0;
  458|   844k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  459|       |
  460|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  461|  2.53M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (461:28): [True: 1.68M, False: 844k]
  ------------------
  462|  1.68M|                {
  463|  1.68M|                    ee[k] = eee[k] + eeo[k];
  464|  1.68M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  465|  1.68M|                }
  466|  4.22M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (466:28): [True: 3.38M, False: 844k]
  ------------------
  467|  3.38M|                {
  468|  3.38M|                    e[k] = ee[k] + eo[k];
  469|  3.38M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  470|  3.38M|                }
  471|  7.47M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (471:28): [True: 6.63M, False: 844k]
  ------------------
  472|  6.63M|                {
  473|  6.63M|                    WORD32 itrans_out;
  474|  6.63M|                    itrans_out =
  475|  6.63M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  6.63M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  6.63M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 6.63M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 6.63M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|  6.63M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  6.63M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  6.63M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 908k, False: 5.72M]
  |  |  |  |  |  Branch (40:53): [True: 626k, False: 5.09M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|  6.63M|                    itrans_out =
  478|  6.63M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  6.63M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  6.63M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 6.63M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 6.63M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|  6.63M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  6.63M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  6.63M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 860k, False: 5.77M]
  |  |  |  |  |  Branch (40:53): [True: 695k, False: 5.07M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|  6.63M|                }
  481|   844k|                pi2_tmp++;
  482|   844k|                pu1_pred += pred_strd;
  483|   844k|                pu1_dst += dst_strd;
  484|   844k|            }
  485|  55.5k|        }
  486|  52.9k|        else if((zero_rows_2nd_stage & 0xFF00) == 0xFF00) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (486:17): [True: 22.6k, False: 30.3k]
  ------------------
  487|  22.6k|        {
  488|   369k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (488:24): [True: 346k, False: 22.6k]
  ------------------
  489|   346k|            {
  490|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  491|  3.11M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (491:28): [True: 2.77M, False: 346k]
  ------------------
  492|  2.77M|                {
  493|  2.77M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  494|  2.77M|                                    + g_ai2_ihevc_trans_16[3][k]
  495|  2.77M|                                                    * pi2_tmp[3 * trans_size]
  496|  2.77M|                                    + g_ai2_ihevc_trans_16[5][k]
  497|  2.77M|                                                    * pi2_tmp[5 * trans_size]
  498|  2.77M|                                    + g_ai2_ihevc_trans_16[7][k]
  499|  2.77M|                                                    * pi2_tmp[7 * trans_size];
  500|  2.77M|                }
  501|  1.73M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (501:28): [True: 1.39M, False: 346k]
  ------------------
  502|  1.39M|                {
  503|  1.39M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  504|  1.39M|                                    + g_ai2_ihevc_trans_16[6][k]
  505|  1.39M|                                                    * pi2_tmp[6 * trans_size];
  506|  1.39M|                }
  507|   346k|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size];
  508|   346k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  509|   346k|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size];
  510|   346k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  511|       |
  512|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  513|  1.04M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (513:28): [True: 696k, False: 346k]
  ------------------
  514|   696k|                {
  515|   696k|                    ee[k] = eee[k] + eeo[k];
  516|   696k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  517|   696k|                }
  518|  1.74M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (518:28): [True: 1.39M, False: 346k]
  ------------------
  519|  1.39M|                {
  520|  1.39M|                    e[k] = ee[k] + eo[k];
  521|  1.39M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  522|  1.39M|                }
  523|  3.08M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (523:28): [True: 2.74M, False: 346k]
  ------------------
  524|  2.74M|                {
  525|  2.74M|                    WORD32 itrans_out;
  526|  2.74M|                    itrans_out =
  527|  2.74M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  2.74M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  2.74M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 2.74M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 2.74M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  528|  2.74M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  2.74M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  2.74M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 567k, False: 2.17M]
  |  |  |  |  |  Branch (40:53): [True: 412k, False: 1.76M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|  2.74M|                    itrans_out =
  530|  2.74M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  2.74M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  2.74M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 2.74M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 2.74M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|  2.74M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  2.74M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  2.74M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 548k, False: 2.19M]
  |  |  |  |  |  Branch (40:53): [True: 434k, False: 1.75M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|  2.74M|                }
  533|   346k|                pi2_tmp++;
  534|   346k|                pu1_pred += pred_strd;
  535|   346k|                pu1_dst += dst_strd;
  536|   346k|            }
  537|  22.6k|        }
  538|  30.3k|        else /* All rows of output of 1st stage are non-zero */
  539|  30.3k|        {
  540|   472k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (540:24): [True: 441k, False: 30.3k]
  ------------------
  541|   441k|            {
  542|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  543|  3.96M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (543:28): [True: 3.52M, False: 441k]
  ------------------
  544|  3.52M|                {
  545|  3.52M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  546|  3.52M|                                    + g_ai2_ihevc_trans_16[3][k]
  547|  3.52M|                                                    * pi2_tmp[3 * trans_size]
  548|  3.52M|                                    + g_ai2_ihevc_trans_16[5][k]
  549|  3.52M|                                                    * pi2_tmp[5 * trans_size]
  550|  3.52M|                                    + g_ai2_ihevc_trans_16[7][k]
  551|  3.52M|                                                    * pi2_tmp[7 * trans_size]
  552|  3.52M|                                    + g_ai2_ihevc_trans_16[9][k]
  553|  3.52M|                                                    * pi2_tmp[9 * trans_size]
  554|  3.52M|                                    + g_ai2_ihevc_trans_16[11][k]
  555|  3.52M|                                                    * pi2_tmp[11 * trans_size]
  556|  3.52M|                                    + g_ai2_ihevc_trans_16[13][k]
  557|  3.52M|                                                    * pi2_tmp[13 * trans_size]
  558|  3.52M|                                    + g_ai2_ihevc_trans_16[15][k]
  559|  3.52M|                                                    * pi2_tmp[15 * trans_size];
  560|  3.52M|                }
  561|  2.21M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (561:28): [True: 1.77M, False: 441k]
  ------------------
  562|  1.77M|                {
  563|  1.77M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  564|  1.77M|                                    + g_ai2_ihevc_trans_16[6][k]
  565|  1.77M|                                                    * pi2_tmp[6 * trans_size]
  566|  1.77M|                                    + g_ai2_ihevc_trans_16[10][k]
  567|  1.77M|                                                    * pi2_tmp[10 * trans_size]
  568|  1.77M|                                    + g_ai2_ihevc_trans_16[14][k]
  569|  1.77M|                                                    * pi2_tmp[14 * trans_size];
  570|  1.77M|                }
  571|   441k|                eeo[0] =
  572|   441k|                                g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size]
  573|   441k|                                                + g_ai2_ihevc_trans_16[12][0]
  574|   441k|                                                                * pi2_tmp[12
  575|   441k|                                                                                * trans_size];
  576|   441k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0]
  577|   441k|                                + g_ai2_ihevc_trans_16[8][0] * pi2_tmp[8 * trans_size];
  578|   441k|                eeo[1] =
  579|   441k|                                g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size]
  580|   441k|                                                + g_ai2_ihevc_trans_16[12][1]
  581|   441k|                                                                * pi2_tmp[12
  582|   441k|                                                                                * trans_size];
  583|   441k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0]
  584|   441k|                                + g_ai2_ihevc_trans_16[8][1] * pi2_tmp[8 * trans_size];
  585|       |
  586|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  587|  1.33M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (587:28): [True: 889k, False: 441k]
  ------------------
  588|   889k|                {
  589|   889k|                    ee[k] = eee[k] + eeo[k];
  590|   889k|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  591|   889k|                }
  592|  2.22M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (592:28): [True: 1.78M, False: 441k]
  ------------------
  593|  1.78M|                {
  594|  1.78M|                    e[k] = ee[k] + eo[k];
  595|  1.78M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  596|  1.78M|                }
  597|  3.90M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (597:28): [True: 3.46M, False: 441k]
  ------------------
  598|  3.46M|                {
  599|  3.46M|                    WORD32 itrans_out;
  600|  3.46M|                    itrans_out =
  601|  3.46M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  3.46M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 3.46M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 3.46M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  602|  3.46M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  3.46M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 781k, False: 2.68M]
  |  |  |  |  |  Branch (40:53): [True: 264k, False: 2.41M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|  3.46M|                    itrans_out =
  604|  3.46M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  3.46M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 3.46M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 3.46M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|  3.46M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  3.46M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  3.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 596k, False: 2.86M]
  |  |  |  |  |  Branch (40:53): [True: 247k, False: 2.61M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  606|  3.46M|                }
  607|   441k|                pi2_tmp++;
  608|   441k|                pu1_pred += pred_strd;
  609|   441k|                pu1_dst += dst_strd;
  610|   441k|            }
  611|  30.3k|        }
  612|       |        /************************************************************************************************/
  613|       |        /************************************END - IT_RECON_16x16****************************************/
  614|       |        /************************************************************************************************/
  615|   108k|    }
  616|   268k|    else  /* All rows of input are non-zero */
  617|   268k|    {
  618|       |        /* Inverse Transform 1st stage */
  619|       |        /************************************************************************************************/
  620|       |        /**********************************START - IT_RECON_16x16****************************************/
  621|       |        /************************************************************************************************/
  622|       |
  623|   268k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   268k|#define IT_SHIFT_STAGE_1 7
  ------------------
  624|   268k|        add = 1 << (shift - 1);
  625|       |
  626|  3.11M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (626:20): [True: 2.85M, False: 268k]
  ------------------
  627|  2.85M|        {
  628|       |            /* Checking for Zero Cols */
  629|  2.85M|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (629:16): [True: 1.47M, False: 1.37M]
  ------------------
  630|  1.47M|            {
  631|  1.47M|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  632|  1.47M|            }
  633|  1.37M|            else
  634|  1.37M|            {
  635|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  636|  12.4M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (636:28): [True: 11.0M, False: 1.37M]
  ------------------
  637|  11.0M|                {
  638|  11.0M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_src[src_strd]
  639|  11.0M|                                    + g_ai2_ihevc_trans_16[3][k]
  640|  11.0M|                                                    * pi2_src[3 * src_strd]
  641|  11.0M|                                    + g_ai2_ihevc_trans_16[5][k]
  642|  11.0M|                                                    * pi2_src[5 * src_strd]
  643|  11.0M|                                    + g_ai2_ihevc_trans_16[7][k]
  644|  11.0M|                                                    * pi2_src[7 * src_strd]
  645|  11.0M|                                    + g_ai2_ihevc_trans_16[9][k]
  646|  11.0M|                                                    * pi2_src[9 * src_strd]
  647|  11.0M|                                    + g_ai2_ihevc_trans_16[11][k]
  648|  11.0M|                                                    * pi2_src[11 * src_strd]
  649|  11.0M|                                    + g_ai2_ihevc_trans_16[13][k]
  650|  11.0M|                                                    * pi2_src[13 * src_strd]
  651|  11.0M|                                    + g_ai2_ihevc_trans_16[15][k]
  652|  11.0M|                                                    * pi2_src[15 * src_strd];
  653|  11.0M|                }
  654|  6.93M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (654:28): [True: 5.56M, False: 1.37M]
  ------------------
  655|  5.56M|                {
  656|  5.56M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_src[2 * src_strd]
  657|  5.56M|                                    + g_ai2_ihevc_trans_16[6][k]
  658|  5.56M|                                                    * pi2_src[6 * src_strd]
  659|  5.56M|                                    + g_ai2_ihevc_trans_16[10][k]
  660|  5.56M|                                                    * pi2_src[10 * src_strd]
  661|  5.56M|                                    + g_ai2_ihevc_trans_16[14][k]
  662|  5.56M|                                                    * pi2_src[14 * src_strd];
  663|  5.56M|                }
  664|  1.37M|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_src[4 * src_strd]
  665|  1.37M|                                + g_ai2_ihevc_trans_16[12][0]
  666|  1.37M|                                                * pi2_src[12 * src_strd];
  667|  1.37M|                eee[0] =
  668|  1.37M|                                g_ai2_ihevc_trans_16[0][0] * pi2_src[0]
  669|  1.37M|                                                + g_ai2_ihevc_trans_16[8][0]
  670|  1.37M|                                                                * pi2_src[8
  671|  1.37M|                                                                                * src_strd];
  672|  1.37M|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_src[4 * src_strd]
  673|  1.37M|                                + g_ai2_ihevc_trans_16[12][1]
  674|  1.37M|                                                * pi2_src[12 * src_strd];
  675|  1.37M|                eee[1] =
  676|  1.37M|                                g_ai2_ihevc_trans_16[0][1] * pi2_src[0]
  677|  1.37M|                                                + g_ai2_ihevc_trans_16[8][1]
  678|  1.37M|                                                                * pi2_src[8
  679|  1.37M|                                                                                * src_strd];
  680|       |
  681|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  682|  4.15M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (682:28): [True: 2.77M, False: 1.37M]
  ------------------
  683|  2.77M|                {
  684|  2.77M|                    ee[k] = eee[k] + eeo[k];
  685|  2.77M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  686|  2.77M|                }
  687|  6.92M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (687:28): [True: 5.55M, False: 1.37M]
  ------------------
  688|  5.55M|                {
  689|  5.55M|                    e[k] = ee[k] + eo[k];
  690|  5.55M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  691|  5.55M|                }
  692|  12.4M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (692:28): [True: 11.0M, False: 1.37M]
  ------------------
  693|  11.0M|                {
  694|  11.0M|                    pi2_tmp[k] =
  695|  11.0M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  11.0M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  11.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 20.7k, False: 11.0M]
  |  |  |  |  |  Branch (40:53): [True: 19.0k, False: 11.0M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  696|  11.0M|                    pi2_tmp[k + 8] =
  697|  11.0M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  11.0M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  11.0M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 19.6k, False: 11.0M]
  |  |  |  |  |  Branch (40:53): [True: 20.0k, False: 11.0M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  698|  11.0M|                }
  699|  1.37M|            }
  700|  2.85M|            pi2_src++;
  701|  2.85M|            pi2_tmp += trans_size;
  702|  2.85M|            zero_cols = zero_cols >> 1;
  703|  2.85M|        }
  704|       |
  705|   268k|        pi2_tmp = pi2_tmp_orig;
  706|       |
  707|       |        /* Inverse Transform 2nd stage */
  708|   268k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   268k|#define IT_SHIFT_STAGE_2 12
  ------------------
  709|   268k|        add = 1 << (shift - 1);
  710|       |
  711|   268k|        if((zero_rows_2nd_stage & 0xFFF0) == 0xFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (711:12): [True: 60.6k, False: 207k]
  ------------------
  712|  60.6k|        {
  713|  1.00M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (713:24): [True: 947k, False: 60.6k]
  ------------------
  714|   947k|            {
  715|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  716|  8.51M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (716:28): [True: 7.56M, False: 947k]
  ------------------
  717|  7.56M|                {
  718|  7.56M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  719|  7.56M|                                    + g_ai2_ihevc_trans_16[3][k]
  720|  7.56M|                                                    * pi2_tmp[3 * trans_size];
  721|  7.56M|                }
  722|  4.73M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (722:28): [True: 3.78M, False: 947k]
  ------------------
  723|  3.78M|                {
  724|  3.78M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size];
  725|  3.78M|                }
  726|   947k|                eeo[0] = 0;
  727|   947k|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  728|   947k|                eeo[1] = 0;
  729|   947k|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  730|       |
  731|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  732|  2.84M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (732:28): [True: 1.89M, False: 947k]
  ------------------
  733|  1.89M|                {
  734|  1.89M|                    ee[k] = eee[k] + eeo[k];
  735|  1.89M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  736|  1.89M|                }
  737|  4.74M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (737:28): [True: 3.79M, False: 947k]
  ------------------
  738|  3.79M|                {
  739|  3.79M|                    e[k] = ee[k] + eo[k];
  740|  3.79M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  741|  3.79M|                }
  742|  8.45M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (742:28): [True: 7.51M, False: 947k]
  ------------------
  743|  7.51M|                {
  744|  7.51M|                    WORD32 itrans_out;
  745|  7.51M|                    itrans_out =
  746|  7.51M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  7.51M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.51M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 7.51M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 7.51M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|  7.51M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  7.51M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.51M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.63M, False: 5.88M]
  |  |  |  |  |  Branch (40:53): [True: 1.05M, False: 4.82M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  748|  7.51M|                    itrans_out =
  749|  7.51M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  7.51M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  7.51M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 7.51M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 7.51M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|  7.51M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  7.51M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  7.51M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.63M, False: 5.87M]
  |  |  |  |  |  Branch (40:53): [True: 1.06M, False: 4.81M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|  7.51M|                }
  752|   947k|                pi2_tmp++;
  753|   947k|                pu1_pred += pred_strd;
  754|   947k|                pu1_dst += dst_strd;
  755|   947k|            }
  756|  60.6k|        }
  757|   207k|        else if((zero_rows_2nd_stage & 0xFF00) == 0xFF00) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (757:17): [True: 87.9k, False: 119k]
  ------------------
  758|  87.9k|        {
  759|  1.45M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (759:24): [True: 1.36M, False: 87.9k]
  ------------------
  760|  1.36M|            {
  761|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  762|  12.2M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (762:28): [True: 10.8M, False: 1.36M]
  ------------------
  763|  10.8M|                {
  764|  10.8M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  765|  10.8M|                                    + g_ai2_ihevc_trans_16[3][k]
  766|  10.8M|                                                    * pi2_tmp[3 * trans_size]
  767|  10.8M|                                    + g_ai2_ihevc_trans_16[5][k]
  768|  10.8M|                                                    * pi2_tmp[5 * trans_size]
  769|  10.8M|                                    + g_ai2_ihevc_trans_16[7][k]
  770|  10.8M|                                                    * pi2_tmp[7 * trans_size];
  771|  10.8M|                }
  772|  6.83M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (772:28): [True: 5.46M, False: 1.36M]
  ------------------
  773|  5.46M|                {
  774|  5.46M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  775|  5.46M|                                    + g_ai2_ihevc_trans_16[6][k]
  776|  5.46M|                                                    * pi2_tmp[6 * trans_size];
  777|  5.46M|                }
  778|  1.36M|                eeo[0] = g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size];
  779|  1.36M|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0];
  780|  1.36M|                eeo[1] = g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size];
  781|  1.36M|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0];
  782|       |
  783|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  784|  4.09M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (784:28): [True: 2.73M, False: 1.36M]
  ------------------
  785|  2.73M|                {
  786|  2.73M|                    ee[k] = eee[k] + eeo[k];
  787|  2.73M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  788|  2.73M|                }
  789|  6.83M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (789:28): [True: 5.46M, False: 1.36M]
  ------------------
  790|  5.46M|                {
  791|  5.46M|                    e[k] = ee[k] + eo[k];
  792|  5.46M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  793|  5.46M|                }
  794|  12.1M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (794:28): [True: 10.8M, False: 1.36M]
  ------------------
  795|  10.8M|                {
  796|  10.8M|                    WORD32 itrans_out;
  797|  10.8M|                    itrans_out =
  798|  10.8M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  10.8M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 10.8M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 10.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|  10.8M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  10.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.64M, False: 8.18M]
  |  |  |  |  |  Branch (40:53): [True: 557k, False: 7.63M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  800|  10.8M|                    itrans_out =
  801|  10.8M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  10.8M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 10.8M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 10.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|  10.8M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  10.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.00M, False: 7.82M]
  |  |  |  |  |  Branch (40:53): [True: 564k, False: 7.26M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  803|  10.8M|                }
  804|  1.36M|                pi2_tmp++;
  805|  1.36M|                pu1_pred += pred_strd;
  806|  1.36M|                pu1_dst += dst_strd;
  807|  1.36M|            }
  808|  87.9k|        }
  809|   119k|        else /* All rows of output of 1st stage are non-zero */
  810|   119k|        {
  811|  1.98M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (811:24): [True: 1.86M, False: 119k]
  ------------------
  812|  1.86M|            {
  813|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  814|  16.8M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (814:28): [True: 14.9M, False: 1.86M]
  ------------------
  815|  14.9M|                {
  816|  14.9M|                    o[k] = g_ai2_ihevc_trans_16[1][k] * pi2_tmp[trans_size]
  817|  14.9M|                                    + g_ai2_ihevc_trans_16[3][k]
  818|  14.9M|                                                    * pi2_tmp[3 * trans_size]
  819|  14.9M|                                    + g_ai2_ihevc_trans_16[5][k]
  820|  14.9M|                                                    * pi2_tmp[5 * trans_size]
  821|  14.9M|                                    + g_ai2_ihevc_trans_16[7][k]
  822|  14.9M|                                                    * pi2_tmp[7 * trans_size]
  823|  14.9M|                                    + g_ai2_ihevc_trans_16[9][k]
  824|  14.9M|                                                    * pi2_tmp[9 * trans_size]
  825|  14.9M|                                    + g_ai2_ihevc_trans_16[11][k]
  826|  14.9M|                                                    * pi2_tmp[11 * trans_size]
  827|  14.9M|                                    + g_ai2_ihevc_trans_16[13][k]
  828|  14.9M|                                                    * pi2_tmp[13 * trans_size]
  829|  14.9M|                                    + g_ai2_ihevc_trans_16[15][k]
  830|  14.9M|                                                    * pi2_tmp[15 * trans_size];
  831|  14.9M|                }
  832|  9.37M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (832:28): [True: 7.50M, False: 1.86M]
  ------------------
  833|  7.50M|                {
  834|  7.50M|                    eo[k] = g_ai2_ihevc_trans_16[2][k] * pi2_tmp[2 * trans_size]
  835|  7.50M|                                    + g_ai2_ihevc_trans_16[6][k]
  836|  7.50M|                                                    * pi2_tmp[6 * trans_size]
  837|  7.50M|                                    + g_ai2_ihevc_trans_16[10][k]
  838|  7.50M|                                                    * pi2_tmp[10 * trans_size]
  839|  7.50M|                                    + g_ai2_ihevc_trans_16[14][k]
  840|  7.50M|                                                    * pi2_tmp[14 * trans_size];
  841|  7.50M|                }
  842|  1.86M|                eeo[0] =
  843|  1.86M|                                g_ai2_ihevc_trans_16[4][0] * pi2_tmp[4 * trans_size]
  844|  1.86M|                                                + g_ai2_ihevc_trans_16[12][0]
  845|  1.86M|                                                                * pi2_tmp[12
  846|  1.86M|                                                                                * trans_size];
  847|  1.86M|                eee[0] = g_ai2_ihevc_trans_16[0][0] * pi2_tmp[0]
  848|  1.86M|                                + g_ai2_ihevc_trans_16[8][0] * pi2_tmp[8 * trans_size];
  849|  1.86M|                eeo[1] =
  850|  1.86M|                                g_ai2_ihevc_trans_16[4][1] * pi2_tmp[4 * trans_size]
  851|  1.86M|                                                + g_ai2_ihevc_trans_16[12][1]
  852|  1.86M|                                                                * pi2_tmp[12
  853|  1.86M|                                                                                * trans_size];
  854|  1.86M|                eee[1] = g_ai2_ihevc_trans_16[0][1] * pi2_tmp[0]
  855|  1.86M|                                + g_ai2_ihevc_trans_16[8][1] * pi2_tmp[8 * trans_size];
  856|       |
  857|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  858|  5.60M|                for(k = 0; k < 2; k++)
  ------------------
  |  Branch (858:28): [True: 3.73M, False: 1.86M]
  ------------------
  859|  3.73M|                {
  860|  3.73M|                    ee[k] = eee[k] + eeo[k];
  861|  3.73M|                    ee[k + 2] = eee[1 - k] - eeo[1 - k];
  862|  3.73M|                }
  863|  9.35M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (863:28): [True: 7.48M, False: 1.86M]
  ------------------
  864|  7.48M|                {
  865|  7.48M|                    e[k] = ee[k] + eo[k];
  866|  7.48M|                    e[k + 4] = ee[3 - k] - eo[3 - k];
  867|  7.48M|                }
  868|  16.7M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (868:28): [True: 14.8M, False: 1.86M]
  ------------------
  869|  14.8M|                {
  870|  14.8M|                    WORD32 itrans_out;
  871|  14.8M|                    itrans_out =
  872|  14.8M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  14.8M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  14.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 14.8M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 14.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  873|  14.8M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  14.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 4.61M, False: 10.2M]
  |  |  |  |  |  Branch (40:53): [True: 1.74M, False: 8.50M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  874|  14.8M|                    itrans_out =
  875|  14.8M|                                    CLIP_S16(((e[7 - k] - o[7 - k] + add) >> shift));
  ------------------
  |  |   53|  14.8M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  14.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 14.8M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 14.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  876|  14.8M|                    pu1_dst[k + 8] = CLIP_U8((itrans_out + pu1_pred[k + 8]));
  ------------------
  |  |   40|  14.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 4.22M, False: 10.6M]
  |  |  |  |  |  Branch (40:53): [True: 1.67M, False: 8.96M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  877|  14.8M|                }
  878|  1.86M|                pi2_tmp++;
  879|  1.86M|                pu1_pred += pred_strd;
  880|  1.86M|                pu1_dst += dst_strd;
  881|  1.86M|            }
  882|   119k|        }
  883|       |        /************************************************************************************************/
  884|       |        /************************************END - IT_RECON_16x16****************************************/
  885|       |        /************************************************************************************************/
  886|   268k|    }
  887|       |
  888|   656k|}

ihevc_itrans_recon_32x32:
  108|   511k|{
  109|   511k|    WORD32 j, k;
  110|   511k|    WORD32 e[16], o[16];
  111|   511k|    WORD32 ee[8], eo[8];
  112|   511k|    WORD32 eee[4], eeo[4];
  113|   511k|    WORD32 eeee[2], eeeo[2];
  114|   511k|    WORD32 add;
  115|   511k|    WORD32 shift;
  116|   511k|    WORD16 *pi2_tmp_orig;
  117|   511k|    WORD32 trans_size;
  118|   511k|    WORD32 zero_rows_2nd_stage = zero_cols;
  119|   511k|    WORD32 row_limit_2nd_stage;
  120|       |
  121|   511k|    trans_size = TRANS_SIZE_32;
  ------------------
  |  |  422|   511k|#define TRANS_SIZE_32 32
  ------------------
  122|   511k|    pi2_tmp_orig = pi2_tmp;
  123|       |
  124|   511k|    if((zero_cols & 0xFFFFFFF0) == 0xFFFFFFF0)
  ------------------
  |  Branch (124:8): [True: 154k, False: 356k]
  ------------------
  125|   154k|        row_limit_2nd_stage = 4;
  126|   356k|    else if((zero_cols & 0xFFFFFF00) == 0xFFFFFF00)
  ------------------
  |  Branch (126:13): [True: 59.3k, False: 296k]
  ------------------
  127|  59.3k|        row_limit_2nd_stage = 8;
  128|   296k|    else
  129|   296k|        row_limit_2nd_stage = TRANS_SIZE_32;
  ------------------
  |  |  422|   296k|#define TRANS_SIZE_32 32
  ------------------
  130|       |
  131|   511k|    if((zero_rows & 0xFFFFFFF0) == 0xFFFFFFF0)  /* First 4 rows of input are non-zero */
  ------------------
  |  Branch (131:8): [True: 247k, False: 263k]
  ------------------
  132|   247k|    {
  133|       |        /************************************************************************************************/
  134|       |        /**********************************START - IT_RECON_32x32****************************************/
  135|       |        /************************************************************************************************/
  136|       |        /* Inverse Transform 1st stage */
  137|   247k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   247k|#define IT_SHIFT_STAGE_1 7
  ------------------
  138|   247k|        add = 1 << (shift - 1);
  139|       |
  140|  4.97M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (140:20): [True: 4.73M, False: 247k]
  ------------------
  141|  4.73M|        {
  142|       |            /* Checking for Zero Cols */
  143|  4.73M|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (143:16): [True: 2.88M, False: 1.84M]
  ------------------
  144|  2.88M|            {
  145|  2.88M|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  146|  2.88M|            }
  147|  1.84M|            else
  148|  1.84M|            {
  149|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  150|  31.6M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (150:28): [True: 29.7M, False: 1.84M]
  ------------------
  151|  29.7M|                {
  152|  29.7M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_src[src_strd]
  153|  29.7M|                                    + g_ai2_ihevc_trans_32[3][k]
  154|  29.7M|                                                    * pi2_src[3 * src_strd];
  155|  29.7M|                }
  156|  16.7M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (156:28): [True: 14.9M, False: 1.84M]
  ------------------
  157|  14.9M|                {
  158|  14.9M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_src[2 * src_strd];
  159|  14.9M|                }
  160|       |//                for(k = 0; k < 4; k++)
  161|  1.84M|                {
  162|  1.84M|                    eeo[0] = 0;
  163|  1.84M|                    eeo[1] = 0;
  164|  1.84M|                    eeo[2] = 0;
  165|  1.84M|                    eeo[3] = 0;
  166|  1.84M|                }
  167|  1.84M|                eeeo[0] = 0;
  168|  1.84M|                eeeo[1] = 0;
  169|  1.84M|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_src[0];
  170|  1.84M|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_src[0];
  171|       |
  172|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  173|  1.84M|                eee[0] = eeee[0] + eeeo[0];
  174|  1.84M|                eee[3] = eeee[0] - eeeo[0];
  175|  1.84M|                eee[1] = eeee[1] + eeeo[1];
  176|  1.84M|                eee[2] = eeee[1] - eeeo[1];
  177|  9.31M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (177:28): [True: 7.46M, False: 1.84M]
  ------------------
  178|  7.46M|                {
  179|  7.46M|                    ee[k] = eee[k] + eeo[k];
  180|  7.46M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  181|  7.46M|                }
  182|  16.7M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (182:28): [True: 14.9M, False: 1.84M]
  ------------------
  183|  14.9M|                {
  184|  14.9M|                    e[k] = ee[k] + eo[k];
  185|  14.9M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  186|  14.9M|                }
  187|  31.6M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (187:28): [True: 29.7M, False: 1.84M]
  ------------------
  188|  29.7M|                {
  189|  29.7M|                    pi2_tmp[k] =
  190|  29.7M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  29.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  29.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 346, False: 29.7M]
  |  |  |  |  |  Branch (40:53): [True: 446, False: 29.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|  29.7M|                    pi2_tmp[k + 16] =
  192|  29.7M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  29.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  29.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 270, False: 29.7M]
  |  |  |  |  |  Branch (40:53): [True: 322, False: 29.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|  29.7M|                }
  194|  1.84M|            }
  195|  4.73M|            pi2_src++;
  196|  4.73M|            pi2_tmp += trans_size;
  197|  4.73M|            zero_cols = zero_cols >> 1;
  198|  4.73M|        }
  199|       |
  200|   247k|        pi2_tmp = pi2_tmp_orig;
  201|       |
  202|       |        /* Inverse Transform 2nd stage */
  203|   247k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   247k|#define IT_SHIFT_STAGE_2 12
  ------------------
  204|   247k|        add = 1 << (shift - 1);
  205|   247k|        if((zero_rows_2nd_stage & 0xFFFFFFF0) == 0xFFFFFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (205:12): [True: 94.4k, False: 152k]
  ------------------
  206|  94.4k|        {
  207|  3.03M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (207:24): [True: 2.94M, False: 94.4k]
  ------------------
  208|  2.94M|            {
  209|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  210|  49.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (210:28): [True: 46.8M, False: 2.94M]
  ------------------
  211|  46.8M|                {
  212|  46.8M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  213|  46.8M|                                    + g_ai2_ihevc_trans_32[3][k]
  214|  46.8M|                                                    * pi2_tmp[3 * trans_size];
  215|  46.8M|                }
  216|  26.5M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (216:28): [True: 23.5M, False: 2.94M]
  ------------------
  217|  23.5M|                {
  218|  23.5M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size];
  219|  23.5M|                }
  220|       |//                for(k = 0; k < 4; k++)
  221|  2.94M|                {
  222|  2.94M|                    eeo[0] = 0;
  223|  2.94M|                    eeo[1] = 0;
  224|  2.94M|                    eeo[2] = 0;
  225|  2.94M|                    eeo[3] = 0;
  226|  2.94M|                }
  227|  2.94M|                eeeo[0] = 0;
  228|  2.94M|                eeeo[1] = 0;
  229|  2.94M|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
  230|  2.94M|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
  231|       |
  232|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  233|  2.94M|                eee[0] = eeee[0] + eeeo[0];
  234|  2.94M|                eee[3] = eeee[0] - eeeo[0];
  235|  2.94M|                eee[1] = eeee[1] + eeeo[1];
  236|  2.94M|                eee[2] = eeee[1] - eeeo[1];
  237|  14.7M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (237:28): [True: 11.8M, False: 2.94M]
  ------------------
  238|  11.8M|                {
  239|  11.8M|                    ee[k] = eee[k] + eeo[k];
  240|  11.8M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  241|  11.8M|                }
  242|  26.7M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (242:28): [True: 23.8M, False: 2.94M]
  ------------------
  243|  23.8M|                {
  244|  23.8M|                    e[k] = ee[k] + eo[k];
  245|  23.8M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  246|  23.8M|                }
  247|  49.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (247:28): [True: 46.9M, False: 2.94M]
  ------------------
  248|  46.9M|                {
  249|  46.9M|                    WORD32 itrans_out;
  250|  46.9M|                    itrans_out =
  251|  46.9M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  46.9M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  46.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 46.9M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 46.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|  46.9M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  46.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  46.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.16M, False: 43.7M]
  |  |  |  |  |  Branch (40:53): [True: 1.33M, False: 42.4M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|  46.9M|                    itrans_out =
  254|  46.9M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  46.9M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  46.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 46.9M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 46.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  46.9M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  46.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  46.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.04M, False: 43.9M]
  |  |  |  |  |  Branch (40:53): [True: 1.34M, False: 42.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|  46.9M|                }
  257|  2.94M|                pi2_tmp++;
  258|  2.94M|                pu1_pred += pred_strd;
  259|  2.94M|                pu1_dst += dst_strd;
  260|  2.94M|            }
  261|  94.4k|        }
  262|   152k|        else if((zero_rows_2nd_stage & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (262:17): [True: 20.8k, False: 132k]
  ------------------
  263|  20.8k|        {
  264|   683k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (264:24): [True: 663k, False: 20.8k]
  ------------------
  265|   663k|            {
  266|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  267|  11.2M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (267:28): [True: 10.6M, False: 663k]
  ------------------
  268|  10.6M|                {
  269|  10.6M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  270|  10.6M|                                    + g_ai2_ihevc_trans_32[3][k]
  271|  10.6M|                                                    * pi2_tmp[3 * trans_size]
  272|  10.6M|                                    + g_ai2_ihevc_trans_32[5][k]
  273|  10.6M|                                                    * pi2_tmp[5 * trans_size]
  274|  10.6M|                                    + g_ai2_ihevc_trans_32[7][k]
  275|  10.6M|                                                    * pi2_tmp[7 * trans_size];
  276|  10.6M|                }
  277|  5.96M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (277:28): [True: 5.30M, False: 663k]
  ------------------
  278|  5.30M|                {
  279|  5.30M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
  280|  5.30M|                                    + g_ai2_ihevc_trans_32[6][k]
  281|  5.30M|                                                    * pi2_tmp[6 * trans_size];
  282|  5.30M|                }
  283|  3.32M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (283:28): [True: 2.65M, False: 663k]
  ------------------
  284|  2.65M|                {
  285|  2.65M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size];
  286|  2.65M|                }
  287|   663k|                eeeo[0] = 0;
  288|   663k|                eeeo[1] = 0;
  289|   663k|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
  290|   663k|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
  291|       |
  292|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  293|   663k|                eee[0] = eeee[0] + eeeo[0];
  294|   663k|                eee[3] = eeee[0] - eeeo[0];
  295|   663k|                eee[1] = eeee[1] + eeeo[1];
  296|   663k|                eee[2] = eeee[1] - eeeo[1];
  297|  3.32M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (297:28): [True: 2.65M, False: 663k]
  ------------------
  298|  2.65M|                {
  299|  2.65M|                    ee[k] = eee[k] + eeo[k];
  300|  2.65M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  301|  2.65M|                }
  302|  5.97M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (302:28): [True: 5.31M, False: 663k]
  ------------------
  303|  5.31M|                {
  304|  5.31M|                    e[k] = ee[k] + eo[k];
  305|  5.31M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  306|  5.31M|                }
  307|  11.2M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (307:28): [True: 10.5M, False: 663k]
  ------------------
  308|  10.5M|                {
  309|  10.5M|                    WORD32 itrans_out;
  310|  10.5M|                    itrans_out =
  311|  10.5M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  10.5M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  10.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 10.5M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 10.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|  10.5M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  10.5M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  10.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 643k, False: 9.93M]
  |  |  |  |  |  Branch (40:53): [True: 543k, False: 9.39M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|  10.5M|                    itrans_out =
  314|  10.5M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  10.5M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  10.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 10.5M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 10.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|  10.5M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  10.5M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  10.5M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 606k, False: 9.97M]
  |  |  |  |  |  Branch (40:53): [True: 446k, False: 9.52M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|  10.5M|                }
  317|   663k|                pi2_tmp++;
  318|   663k|                pu1_pred += pred_strd;
  319|   663k|                pu1_dst += dst_strd;
  320|   663k|            }
  321|  20.8k|        }
  322|   132k|        else /* All rows of output of 1st stage are non-zero */
  323|   132k|        {
  324|  4.13M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (324:24): [True: 3.99M, False: 132k]
  ------------------
  325|  3.99M|            {
  326|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  327|  67.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (327:28): [True: 63.8M, False: 3.99M]
  ------------------
  328|  63.8M|                {
  329|  63.8M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  330|  63.8M|                                    + g_ai2_ihevc_trans_32[3][k]
  331|  63.8M|                                                    * pi2_tmp[3 * trans_size]
  332|  63.8M|                                    + g_ai2_ihevc_trans_32[5][k]
  333|  63.8M|                                                    * pi2_tmp[5 * trans_size]
  334|  63.8M|                                    + g_ai2_ihevc_trans_32[7][k]
  335|  63.8M|                                                    * pi2_tmp[7 * trans_size]
  336|  63.8M|                                    + g_ai2_ihevc_trans_32[9][k]
  337|  63.8M|                                                    * pi2_tmp[9 * trans_size]
  338|  63.8M|                                    + g_ai2_ihevc_trans_32[11][k]
  339|  63.8M|                                                    * pi2_tmp[11 * trans_size]
  340|  63.8M|                                    + g_ai2_ihevc_trans_32[13][k]
  341|  63.8M|                                                    * pi2_tmp[13 * trans_size]
  342|  63.8M|                                    + g_ai2_ihevc_trans_32[15][k]
  343|  63.8M|                                                    * pi2_tmp[15 * trans_size]
  344|  63.8M|                                    + g_ai2_ihevc_trans_32[17][k]
  345|  63.8M|                                                    * pi2_tmp[17 * trans_size]
  346|  63.8M|                                    + g_ai2_ihevc_trans_32[19][k]
  347|  63.8M|                                                    * pi2_tmp[19 * trans_size]
  348|  63.8M|                                    + g_ai2_ihevc_trans_32[21][k]
  349|  63.8M|                                                    * pi2_tmp[21 * trans_size]
  350|  63.8M|                                    + g_ai2_ihevc_trans_32[23][k]
  351|  63.8M|                                                    * pi2_tmp[23 * trans_size]
  352|  63.8M|                                    + g_ai2_ihevc_trans_32[25][k]
  353|  63.8M|                                                    * pi2_tmp[25 * trans_size]
  354|  63.8M|                                    + g_ai2_ihevc_trans_32[27][k]
  355|  63.8M|                                                    * pi2_tmp[27 * trans_size]
  356|  63.8M|                                    + g_ai2_ihevc_trans_32[29][k]
  357|  63.8M|                                                    * pi2_tmp[29 * trans_size]
  358|  63.8M|                                    + g_ai2_ihevc_trans_32[31][k]
  359|  63.8M|                                                    * pi2_tmp[31 * trans_size];
  360|  63.8M|                }
  361|  36.8M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (361:28): [True: 32.8M, False: 3.99M]
  ------------------
  362|  32.8M|                {
  363|  32.8M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
  364|  32.8M|                                    + g_ai2_ihevc_trans_32[6][k]
  365|  32.8M|                                                    * pi2_tmp[6 * trans_size]
  366|  32.8M|                                    + g_ai2_ihevc_trans_32[10][k]
  367|  32.8M|                                                    * pi2_tmp[10 * trans_size]
  368|  32.8M|                                    + g_ai2_ihevc_trans_32[14][k]
  369|  32.8M|                                                    * pi2_tmp[14 * trans_size]
  370|  32.8M|                                    + g_ai2_ihevc_trans_32[18][k]
  371|  32.8M|                                                    * pi2_tmp[18 * trans_size]
  372|  32.8M|                                    + g_ai2_ihevc_trans_32[22][k]
  373|  32.8M|                                                    * pi2_tmp[22 * trans_size]
  374|  32.8M|                                    + g_ai2_ihevc_trans_32[26][k]
  375|  32.8M|                                                    * pi2_tmp[26 * trans_size]
  376|  32.8M|                                    + g_ai2_ihevc_trans_32[30][k]
  377|  32.8M|                                                    * pi2_tmp[30 * trans_size];
  378|  32.8M|                }
  379|  20.3M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (379:28): [True: 16.3M, False: 3.99M]
  ------------------
  380|  16.3M|                {
  381|  16.3M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size]
  382|  16.3M|                                    + g_ai2_ihevc_trans_32[12][k]
  383|  16.3M|                                                    * pi2_tmp[12 * trans_size]
  384|  16.3M|                                    + g_ai2_ihevc_trans_32[20][k]
  385|  16.3M|                                                    * pi2_tmp[20 * trans_size]
  386|  16.3M|                                    + g_ai2_ihevc_trans_32[28][k]
  387|  16.3M|                                                    * pi2_tmp[28 * trans_size];
  388|  16.3M|                }
  389|  3.99M|                eeeo[0] =
  390|  3.99M|                                g_ai2_ihevc_trans_32[8][0] * pi2_tmp[8 * trans_size]
  391|  3.99M|                                                + g_ai2_ihevc_trans_32[24][0]
  392|  3.99M|                                                                * pi2_tmp[24
  393|  3.99M|                                                                                * trans_size];
  394|  3.99M|                eeeo[1] =
  395|  3.99M|                                g_ai2_ihevc_trans_32[8][1] * pi2_tmp[8 * trans_size]
  396|  3.99M|                                                + g_ai2_ihevc_trans_32[24][1]
  397|  3.99M|                                                                * pi2_tmp[24
  398|  3.99M|                                                                                * trans_size];
  399|  3.99M|                eeee[0] =
  400|  3.99M|                                g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0]
  401|  3.99M|                                                + g_ai2_ihevc_trans_32[16][0]
  402|  3.99M|                                                                * pi2_tmp[16
  403|  3.99M|                                                                                * trans_size];
  404|  3.99M|                eeee[1] =
  405|  3.99M|                                g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0]
  406|  3.99M|                                                + g_ai2_ihevc_trans_32[16][1]
  407|  3.99M|                                                                * pi2_tmp[16
  408|  3.99M|                                                                                * trans_size];
  409|       |
  410|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  411|  3.99M|                eee[0] = eeee[0] + eeeo[0];
  412|  3.99M|                eee[3] = eeee[0] - eeeo[0];
  413|  3.99M|                eee[1] = eeee[1] + eeeo[1];
  414|  3.99M|                eee[2] = eeee[1] - eeeo[1];
  415|  20.5M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (415:28): [True: 16.5M, False: 3.99M]
  ------------------
  416|  16.5M|                {
  417|  16.5M|                    ee[k] = eee[k] + eeo[k];
  418|  16.5M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  419|  16.5M|                }
  420|  36.6M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (420:28): [True: 32.6M, False: 3.99M]
  ------------------
  421|  32.6M|                {
  422|  32.6M|                    e[k] = ee[k] + eo[k];
  423|  32.6M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  424|  32.6M|                }
  425|  67.1M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (425:28): [True: 63.1M, False: 3.99M]
  ------------------
  426|  63.1M|                {
  427|  63.1M|                    WORD32 itrans_out;
  428|  63.1M|                    itrans_out =
  429|  63.1M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  63.1M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  63.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 63.1M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 63.1M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  430|  63.1M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  63.1M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  63.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 12.5M, False: 50.6M]
  |  |  |  |  |  Branch (40:53): [True: 2.88M, False: 47.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|  63.1M|                    itrans_out =
  432|  63.1M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  63.1M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  63.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 63.1M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 63.1M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|  63.1M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  63.1M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  63.1M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 6.86M, False: 56.3M]
  |  |  |  |  |  Branch (40:53): [True: 2.58M, False: 53.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|  63.1M|                }
  435|  3.99M|                pi2_tmp++;
  436|  3.99M|                pu1_pred += pred_strd;
  437|  3.99M|                pu1_dst += dst_strd;
  438|  3.99M|            }
  439|   132k|        }
  440|       |        /************************************************************************************************/
  441|       |        /************************************END - IT_RECON_32x32****************************************/
  442|       |        /************************************************************************************************/
  443|   247k|    }
  444|   263k|    else if((zero_rows & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of input are non-zero */
  ------------------
  |  Branch (444:13): [True: 101k, False: 162k]
  ------------------
  445|   101k|    {
  446|       |        /************************************************************************************************/
  447|       |        /**********************************START - IT_RECON_32x32****************************************/
  448|       |        /************************************************************************************************/
  449|       |        /* Inverse Transform 1st stage */
  450|   101k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   101k|#define IT_SHIFT_STAGE_1 7
  ------------------
  451|   101k|        add = 1 << (shift - 1);
  452|       |
  453|  2.21M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (453:20): [True: 2.11M, False: 101k]
  ------------------
  454|  2.11M|        {
  455|       |            /* Checking for Zero Cols */
  456|  2.11M|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (456:16): [True: 1.68M, False: 434k]
  ------------------
  457|  1.68M|            {
  458|  1.68M|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  459|  1.68M|            }
  460|   434k|            else
  461|   434k|            {
  462|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  463|  7.43M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (463:28): [True: 7.00M, False: 434k]
  ------------------
  464|  7.00M|                {
  465|  7.00M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_src[src_strd]
  466|  7.00M|                                    + g_ai2_ihevc_trans_32[3][k]
  467|  7.00M|                                                    * pi2_src[3 * src_strd]
  468|  7.00M|                                    + g_ai2_ihevc_trans_32[5][k]
  469|  7.00M|                                                    * pi2_src[5 * src_strd]
  470|  7.00M|                                    + g_ai2_ihevc_trans_32[7][k]
  471|  7.00M|                                                    * pi2_src[7 * src_strd];
  472|  7.00M|                }
  473|  3.93M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (473:28): [True: 3.49M, False: 434k]
  ------------------
  474|  3.49M|                {
  475|  3.49M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_src[2 * src_strd]
  476|  3.49M|                                    + g_ai2_ihevc_trans_32[6][k]
  477|  3.49M|                                                    * pi2_src[6 * src_strd];
  478|  3.49M|                }
  479|  2.18M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (479:28): [True: 1.75M, False: 434k]
  ------------------
  480|  1.75M|                {
  481|  1.75M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_src[4 * src_strd];
  482|  1.75M|                }
  483|   434k|                eeeo[0] = 0;
  484|   434k|                eeeo[1] = 0;
  485|   434k|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_src[0];
  486|   434k|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_src[0];
  487|       |
  488|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  489|   434k|                eee[0] = eeee[0] + eeeo[0];
  490|   434k|                eee[3] = eeee[0] - eeeo[0];
  491|   434k|                eee[1] = eeee[1] + eeeo[1];
  492|   434k|                eee[2] = eeee[1] - eeeo[1];
  493|  2.18M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (493:28): [True: 1.75M, False: 434k]
  ------------------
  494|  1.75M|                {
  495|  1.75M|                    ee[k] = eee[k] + eeo[k];
  496|  1.75M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  497|  1.75M|                }
  498|  3.93M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (498:28): [True: 3.50M, False: 434k]
  ------------------
  499|  3.50M|                {
  500|  3.50M|                    e[k] = ee[k] + eo[k];
  501|  3.50M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  502|  3.50M|                }
  503|  7.43M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (503:28): [True: 6.99M, False: 434k]
  ------------------
  504|  6.99M|                {
  505|  6.99M|                    pi2_tmp[k] =
  506|  6.99M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  6.99M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  6.99M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.72k, False: 6.99M]
  |  |  |  |  |  Branch (40:53): [True: 1.57k, False: 6.99M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|  6.99M|                    pi2_tmp[k + 16] =
  508|  6.99M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  6.99M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  6.99M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 2.27k, False: 6.99M]
  |  |  |  |  |  Branch (40:53): [True: 1.81k, False: 6.99M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|  6.99M|                }
  510|   434k|            }
  511|  2.11M|            pi2_src++;
  512|  2.11M|            pi2_tmp += trans_size;
  513|  2.11M|            zero_cols = zero_cols >> 1;
  514|  2.11M|        }
  515|       |
  516|   101k|        pi2_tmp = pi2_tmp_orig;
  517|       |
  518|       |        /* Inverse Transform 2nd stage */
  519|   101k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   101k|#define IT_SHIFT_STAGE_2 12
  ------------------
  520|   101k|        add = 1 << (shift - 1);
  521|   101k|        if((zero_rows_2nd_stage & 0xFFFFFFF0) == 0xFFFFFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (521:12): [True: 28.6k, False: 72.9k]
  ------------------
  522|  28.6k|        {
  523|   934k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (523:24): [True: 905k, False: 28.6k]
  ------------------
  524|   905k|            {
  525|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  526|  15.3M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (526:28): [True: 14.4M, False: 905k]
  ------------------
  527|  14.4M|                {
  528|  14.4M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  529|  14.4M|                                    + g_ai2_ihevc_trans_32[3][k]
  530|  14.4M|                                                    * pi2_tmp[3 * trans_size];
  531|  14.4M|                }
  532|  8.16M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (532:28): [True: 7.25M, False: 905k]
  ------------------
  533|  7.25M|                {
  534|  7.25M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size];
  535|  7.25M|                }
  536|       |//                for(k = 0; k < 4; k++)
  537|   905k|                {
  538|   905k|                    eeo[0] = 0;
  539|   905k|                    eeo[1] = 0;
  540|   905k|                    eeo[2] = 0;
  541|   905k|                    eeo[3] = 0;
  542|   905k|                }
  543|   905k|                eeeo[0] = 0;
  544|   905k|                eeeo[1] = 0;
  545|   905k|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
  546|   905k|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
  547|       |
  548|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  549|   905k|                eee[0] = eeee[0] + eeeo[0];
  550|   905k|                eee[3] = eeee[0] - eeeo[0];
  551|   905k|                eee[1] = eeee[1] + eeeo[1];
  552|   905k|                eee[2] = eeee[1] - eeeo[1];
  553|  4.53M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (553:28): [True: 3.63M, False: 905k]
  ------------------
  554|  3.63M|                {
  555|  3.63M|                    ee[k] = eee[k] + eeo[k];
  556|  3.63M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  557|  3.63M|                }
  558|  8.16M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (558:28): [True: 7.25M, False: 905k]
  ------------------
  559|  7.25M|                {
  560|  7.25M|                    e[k] = ee[k] + eo[k];
  561|  7.25M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  562|  7.25M|                }
  563|  15.2M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (563:28): [True: 14.3M, False: 905k]
  ------------------
  564|  14.3M|                {
  565|  14.3M|                    WORD32 itrans_out;
  566|  14.3M|                    itrans_out =
  567|  14.3M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  14.3M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 14.3M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 14.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|  14.3M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 944k, False: 13.4M]
  |  |  |  |  |  Branch (40:53): [True: 735k, False: 12.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  569|  14.3M|                    itrans_out =
  570|  14.3M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  14.3M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 14.3M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 14.3M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|  14.3M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 978k, False: 13.4M]
  |  |  |  |  |  Branch (40:53): [True: 648k, False: 12.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  572|  14.3M|                }
  573|   905k|                pi2_tmp++;
  574|   905k|                pu1_pred += pred_strd;
  575|   905k|                pu1_dst += dst_strd;
  576|   905k|            }
  577|  28.6k|        }
  578|  72.9k|        else if((zero_rows_2nd_stage & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (578:17): [True: 13.7k, False: 59.1k]
  ------------------
  579|  13.7k|        {
  580|   446k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (580:24): [True: 432k, False: 13.7k]
  ------------------
  581|   432k|            {
  582|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  583|  7.29M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (583:28): [True: 6.85M, False: 432k]
  ------------------
  584|  6.85M|                {
  585|  6.85M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  586|  6.85M|                                    + g_ai2_ihevc_trans_32[3][k]
  587|  6.85M|                                                    * pi2_tmp[3 * trans_size]
  588|  6.85M|                                    + g_ai2_ihevc_trans_32[5][k]
  589|  6.85M|                                                    * pi2_tmp[5 * trans_size]
  590|  6.85M|                                    + g_ai2_ihevc_trans_32[7][k]
  591|  6.85M|                                                    * pi2_tmp[7 * trans_size];
  592|  6.85M|                }
  593|  3.88M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (593:28): [True: 3.45M, False: 432k]
  ------------------
  594|  3.45M|                {
  595|  3.45M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
  596|  3.45M|                                    + g_ai2_ihevc_trans_32[6][k]
  597|  3.45M|                                                    * pi2_tmp[6 * trans_size];
  598|  3.45M|                }
  599|  2.16M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (599:28): [True: 1.73M, False: 432k]
  ------------------
  600|  1.73M|                {
  601|  1.73M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size];
  602|  1.73M|                }
  603|   432k|                eeeo[0] = 0;
  604|   432k|                eeeo[1] = 0;
  605|   432k|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
  606|   432k|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
  607|       |
  608|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  609|   432k|                eee[0] = eeee[0] + eeeo[0];
  610|   432k|                eee[3] = eeee[0] - eeeo[0];
  611|   432k|                eee[1] = eeee[1] + eeeo[1];
  612|   432k|                eee[2] = eeee[1] - eeeo[1];
  613|  2.16M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (613:28): [True: 1.72M, False: 432k]
  ------------------
  614|  1.72M|                {
  615|  1.72M|                    ee[k] = eee[k] + eeo[k];
  616|  1.72M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  617|  1.72M|                }
  618|  3.87M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (618:28): [True: 3.44M, False: 432k]
  ------------------
  619|  3.44M|                {
  620|  3.44M|                    e[k] = ee[k] + eo[k];
  621|  3.44M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  622|  3.44M|                }
  623|  7.25M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (623:28): [True: 6.82M, False: 432k]
  ------------------
  624|  6.82M|                {
  625|  6.82M|                    WORD32 itrans_out;
  626|  6.82M|                    itrans_out =
  627|  6.82M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  6.82M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  6.82M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 6.82M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 6.82M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|  6.82M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  6.82M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  6.82M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 767k, False: 6.05M]
  |  |  |  |  |  Branch (40:53): [True: 409k, False: 5.64M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  629|  6.82M|                    itrans_out =
  630|  6.82M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  6.82M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  6.82M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 6.82M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 6.82M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|  6.82M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  6.82M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  6.82M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 794k, False: 6.02M]
  |  |  |  |  |  Branch (40:53): [True: 391k, False: 5.63M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  632|  6.82M|                }
  633|   432k|                pi2_tmp++;
  634|   432k|                pu1_pred += pred_strd;
  635|   432k|                pu1_dst += dst_strd;
  636|   432k|            }
  637|  13.7k|        }
  638|  59.1k|        else /* All rows of output of 1st stage are non-zero */
  639|  59.1k|        {
  640|  1.60M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (640:24): [True: 1.54M, False: 59.1k]
  ------------------
  641|  1.54M|            {
  642|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  643|  25.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (643:28): [True: 24.2M, False: 1.54M]
  ------------------
  644|  24.2M|                {
  645|  24.2M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  646|  24.2M|                                    + g_ai2_ihevc_trans_32[3][k]
  647|  24.2M|                                                    * pi2_tmp[3 * trans_size]
  648|  24.2M|                                    + g_ai2_ihevc_trans_32[5][k]
  649|  24.2M|                                                    * pi2_tmp[5 * trans_size]
  650|  24.2M|                                    + g_ai2_ihevc_trans_32[7][k]
  651|  24.2M|                                                    * pi2_tmp[7 * trans_size]
  652|  24.2M|                                    + g_ai2_ihevc_trans_32[9][k]
  653|  24.2M|                                                    * pi2_tmp[9 * trans_size]
  654|  24.2M|                                    + g_ai2_ihevc_trans_32[11][k]
  655|  24.2M|                                                    * pi2_tmp[11 * trans_size]
  656|  24.2M|                                    + g_ai2_ihevc_trans_32[13][k]
  657|  24.2M|                                                    * pi2_tmp[13 * trans_size]
  658|  24.2M|                                    + g_ai2_ihevc_trans_32[15][k]
  659|  24.2M|                                                    * pi2_tmp[15 * trans_size]
  660|  24.2M|                                    + g_ai2_ihevc_trans_32[17][k]
  661|  24.2M|                                                    * pi2_tmp[17 * trans_size]
  662|  24.2M|                                    + g_ai2_ihevc_trans_32[19][k]
  663|  24.2M|                                                    * pi2_tmp[19 * trans_size]
  664|  24.2M|                                    + g_ai2_ihevc_trans_32[21][k]
  665|  24.2M|                                                    * pi2_tmp[21 * trans_size]
  666|  24.2M|                                    + g_ai2_ihevc_trans_32[23][k]
  667|  24.2M|                                                    * pi2_tmp[23 * trans_size]
  668|  24.2M|                                    + g_ai2_ihevc_trans_32[25][k]
  669|  24.2M|                                                    * pi2_tmp[25 * trans_size]
  670|  24.2M|                                    + g_ai2_ihevc_trans_32[27][k]
  671|  24.2M|                                                    * pi2_tmp[27 * trans_size]
  672|  24.2M|                                    + g_ai2_ihevc_trans_32[29][k]
  673|  24.2M|                                                    * pi2_tmp[29 * trans_size]
  674|  24.2M|                                    + g_ai2_ihevc_trans_32[31][k]
  675|  24.2M|                                                    * pi2_tmp[31 * trans_size];
  676|  24.2M|                }
  677|  14.8M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (677:28): [True: 13.3M, False: 1.54M]
  ------------------
  678|  13.3M|                {
  679|  13.3M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
  680|  13.3M|                                    + g_ai2_ihevc_trans_32[6][k]
  681|  13.3M|                                                    * pi2_tmp[6 * trans_size]
  682|  13.3M|                                    + g_ai2_ihevc_trans_32[10][k]
  683|  13.3M|                                                    * pi2_tmp[10 * trans_size]
  684|  13.3M|                                    + g_ai2_ihevc_trans_32[14][k]
  685|  13.3M|                                                    * pi2_tmp[14 * trans_size]
  686|  13.3M|                                    + g_ai2_ihevc_trans_32[18][k]
  687|  13.3M|                                                    * pi2_tmp[18 * trans_size]
  688|  13.3M|                                    + g_ai2_ihevc_trans_32[22][k]
  689|  13.3M|                                                    * pi2_tmp[22 * trans_size]
  690|  13.3M|                                    + g_ai2_ihevc_trans_32[26][k]
  691|  13.3M|                                                    * pi2_tmp[26 * trans_size]
  692|  13.3M|                                    + g_ai2_ihevc_trans_32[30][k]
  693|  13.3M|                                                    * pi2_tmp[30 * trans_size];
  694|  13.3M|                }
  695|  8.69M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (695:28): [True: 7.15M, False: 1.54M]
  ------------------
  696|  7.15M|                {
  697|  7.15M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size]
  698|  7.15M|                                    + g_ai2_ihevc_trans_32[12][k]
  699|  7.15M|                                                    * pi2_tmp[12 * trans_size]
  700|  7.15M|                                    + g_ai2_ihevc_trans_32[20][k]
  701|  7.15M|                                                    * pi2_tmp[20 * trans_size]
  702|  7.15M|                                    + g_ai2_ihevc_trans_32[28][k]
  703|  7.15M|                                                    * pi2_tmp[28 * trans_size];
  704|  7.15M|                }
  705|  1.54M|                eeeo[0] =
  706|  1.54M|                                g_ai2_ihevc_trans_32[8][0] * pi2_tmp[8 * trans_size]
  707|  1.54M|                                                + g_ai2_ihevc_trans_32[24][0]
  708|  1.54M|                                                                * pi2_tmp[24
  709|  1.54M|                                                                                * trans_size];
  710|  1.54M|                eeeo[1] =
  711|  1.54M|                                g_ai2_ihevc_trans_32[8][1] * pi2_tmp[8 * trans_size]
  712|  1.54M|                                                + g_ai2_ihevc_trans_32[24][1]
  713|  1.54M|                                                                * pi2_tmp[24
  714|  1.54M|                                                                                * trans_size];
  715|  1.54M|                eeee[0] =
  716|  1.54M|                                g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0]
  717|  1.54M|                                                + g_ai2_ihevc_trans_32[16][0]
  718|  1.54M|                                                                * pi2_tmp[16
  719|  1.54M|                                                                                * trans_size];
  720|  1.54M|                eeee[1] =
  721|  1.54M|                                g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0]
  722|  1.54M|                                                + g_ai2_ihevc_trans_32[16][1]
  723|  1.54M|                                                                * pi2_tmp[16
  724|  1.54M|                                                                                * trans_size];
  725|       |
  726|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  727|  1.54M|                eee[0] = eeee[0] + eeeo[0];
  728|  1.54M|                eee[3] = eeee[0] - eeeo[0];
  729|  1.54M|                eee[1] = eeee[1] + eeeo[1];
  730|  1.54M|                eee[2] = eeee[1] - eeeo[1];
  731|  8.66M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (731:28): [True: 7.11M, False: 1.54M]
  ------------------
  732|  7.11M|                {
  733|  7.11M|                    ee[k] = eee[k] + eeo[k];
  734|  7.11M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  735|  7.11M|                }
  736|  15.6M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (736:28): [True: 14.1M, False: 1.54M]
  ------------------
  737|  14.1M|                {
  738|  14.1M|                    e[k] = ee[k] + eo[k];
  739|  14.1M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  740|  14.1M|                }
  741|  24.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (741:28): [True: 23.2M, False: 1.54M]
  ------------------
  742|  23.2M|                {
  743|  23.2M|                    WORD32 itrans_out;
  744|  23.2M|                    itrans_out =
  745|  23.2M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  23.2M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  23.2M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 23.2M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 23.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  746|  23.2M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  23.2M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  23.2M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 7.01M, False: 16.2M]
  |  |  |  |  |  Branch (40:53): [True: 1.36M, False: 14.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|  23.2M|                    itrans_out =
  748|  23.2M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  23.2M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  23.2M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 23.2M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 23.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|  23.2M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  23.2M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  23.2M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 6.91M, False: 16.3M]
  |  |  |  |  |  Branch (40:53): [True: 1.30M, False: 15.0M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  750|  23.2M|                }
  751|  1.54M|                pi2_tmp++;
  752|  1.54M|                pu1_pred += pred_strd;
  753|  1.54M|                pu1_dst += dst_strd;
  754|  1.54M|            }
  755|  59.1k|        }
  756|       |        /************************************************************************************************/
  757|       |        /************************************END - IT_RECON_32x32****************************************/
  758|       |        /************************************************************************************************/
  759|   101k|    }
  760|   162k|    else  /* All rows of input are non-zero */
  761|   162k|    {
  762|       |        /************************************************************************************************/
  763|       |        /**********************************START - IT_RECON_32x32****************************************/
  764|       |        /************************************************************************************************/
  765|       |        /* Inverse Transform 1st stage */
  766|   162k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   162k|#define IT_SHIFT_STAGE_1 7
  ------------------
  767|   162k|        add = 1 << (shift - 1);
  768|       |
  769|  3.81M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (769:20): [True: 3.65M, False: 162k]
  ------------------
  770|  3.65M|        {
  771|       |            /* Checking for Zero Cols */
  772|  3.65M|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (772:16): [True: 2.50M, False: 1.15M]
  ------------------
  773|  2.50M|            {
  774|  2.50M|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  775|  2.50M|            }
  776|  1.15M|            else
  777|  1.15M|            {
  778|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  779|  19.7M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (779:28): [True: 18.5M, False: 1.15M]
  ------------------
  780|  18.5M|                {
  781|  18.5M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_src[src_strd]
  782|  18.5M|                                    + g_ai2_ihevc_trans_32[3][k]
  783|  18.5M|                                                    * pi2_src[3 * src_strd]
  784|  18.5M|                                    + g_ai2_ihevc_trans_32[5][k]
  785|  18.5M|                                                    * pi2_src[5 * src_strd]
  786|  18.5M|                                    + g_ai2_ihevc_trans_32[7][k]
  787|  18.5M|                                                    * pi2_src[7 * src_strd]
  788|  18.5M|                                    + g_ai2_ihevc_trans_32[9][k]
  789|  18.5M|                                                    * pi2_src[9 * src_strd]
  790|  18.5M|                                    + g_ai2_ihevc_trans_32[11][k]
  791|  18.5M|                                                    * pi2_src[11 * src_strd]
  792|  18.5M|                                    + g_ai2_ihevc_trans_32[13][k]
  793|  18.5M|                                                    * pi2_src[13 * src_strd]
  794|  18.5M|                                    + g_ai2_ihevc_trans_32[15][k]
  795|  18.5M|                                                    * pi2_src[15 * src_strd]
  796|  18.5M|                                    + g_ai2_ihevc_trans_32[17][k]
  797|  18.5M|                                                    * pi2_src[17 * src_strd]
  798|  18.5M|                                    + g_ai2_ihevc_trans_32[19][k]
  799|  18.5M|                                                    * pi2_src[19 * src_strd]
  800|  18.5M|                                    + g_ai2_ihevc_trans_32[21][k]
  801|  18.5M|                                                    * pi2_src[21 * src_strd]
  802|  18.5M|                                    + g_ai2_ihevc_trans_32[23][k]
  803|  18.5M|                                                    * pi2_src[23 * src_strd]
  804|  18.5M|                                    + g_ai2_ihevc_trans_32[25][k]
  805|  18.5M|                                                    * pi2_src[25 * src_strd]
  806|  18.5M|                                    + g_ai2_ihevc_trans_32[27][k]
  807|  18.5M|                                                    * pi2_src[27 * src_strd]
  808|  18.5M|                                    + g_ai2_ihevc_trans_32[29][k]
  809|  18.5M|                                                    * pi2_src[29 * src_strd]
  810|  18.5M|                                    + g_ai2_ihevc_trans_32[31][k]
  811|  18.5M|                                                    * pi2_src[31 * src_strd];
  812|  18.5M|                }
  813|  10.5M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (813:28): [True: 9.37M, False: 1.15M]
  ------------------
  814|  9.37M|                {
  815|  9.37M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_src[2 * src_strd]
  816|  9.37M|                                    + g_ai2_ihevc_trans_32[6][k]
  817|  9.37M|                                                    * pi2_src[6 * src_strd]
  818|  9.37M|                                    + g_ai2_ihevc_trans_32[10][k]
  819|  9.37M|                                                    * pi2_src[10 * src_strd]
  820|  9.37M|                                    + g_ai2_ihevc_trans_32[14][k]
  821|  9.37M|                                                    * pi2_src[14 * src_strd]
  822|  9.37M|                                    + g_ai2_ihevc_trans_32[18][k]
  823|  9.37M|                                                    * pi2_src[18 * src_strd]
  824|  9.37M|                                    + g_ai2_ihevc_trans_32[22][k]
  825|  9.37M|                                                    * pi2_src[22 * src_strd]
  826|  9.37M|                                    + g_ai2_ihevc_trans_32[26][k]
  827|  9.37M|                                                    * pi2_src[26 * src_strd]
  828|  9.37M|                                    + g_ai2_ihevc_trans_32[30][k]
  829|  9.37M|                                                    * pi2_src[30 * src_strd];
  830|  9.37M|                }
  831|  5.86M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (831:28): [True: 4.71M, False: 1.15M]
  ------------------
  832|  4.71M|                {
  833|  4.71M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_src[4 * src_strd]
  834|  4.71M|                                    + g_ai2_ihevc_trans_32[12][k]
  835|  4.71M|                                                    * pi2_src[12 * src_strd]
  836|  4.71M|                                    + g_ai2_ihevc_trans_32[20][k]
  837|  4.71M|                                                    * pi2_src[20 * src_strd]
  838|  4.71M|                                    + g_ai2_ihevc_trans_32[28][k]
  839|  4.71M|                                                    * pi2_src[28 * src_strd];
  840|  4.71M|                }
  841|  1.15M|                eeeo[0] = g_ai2_ihevc_trans_32[8][0] * pi2_src[8 * src_strd]
  842|  1.15M|                                + g_ai2_ihevc_trans_32[24][0]
  843|  1.15M|                                                * pi2_src[24 * src_strd];
  844|  1.15M|                eeeo[1] = g_ai2_ihevc_trans_32[8][1] * pi2_src[8 * src_strd]
  845|  1.15M|                                + g_ai2_ihevc_trans_32[24][1]
  846|  1.15M|                                                * pi2_src[24 * src_strd];
  847|  1.15M|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_src[0]
  848|  1.15M|                                + g_ai2_ihevc_trans_32[16][0]
  849|  1.15M|                                                * pi2_src[16 * src_strd];
  850|  1.15M|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_src[0]
  851|  1.15M|                                + g_ai2_ihevc_trans_32[16][1]
  852|  1.15M|                                                * pi2_src[16 * src_strd];
  853|       |
  854|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  855|  1.15M|                eee[0] = eeee[0] + eeeo[0];
  856|  1.15M|                eee[3] = eeee[0] - eeeo[0];
  857|  1.15M|                eee[1] = eeee[1] + eeeo[1];
  858|  1.15M|                eee[2] = eeee[1] - eeeo[1];
  859|  5.85M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (859:28): [True: 4.69M, False: 1.15M]
  ------------------
  860|  4.69M|                {
  861|  4.69M|                    ee[k] = eee[k] + eeo[k];
  862|  4.69M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  863|  4.69M|                }
  864|  10.5M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (864:28): [True: 9.38M, False: 1.15M]
  ------------------
  865|  9.38M|                {
  866|  9.38M|                    e[k] = ee[k] + eo[k];
  867|  9.38M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  868|  9.38M|                }
  869|  19.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (869:28): [True: 18.7M, False: 1.15M]
  ------------------
  870|  18.7M|                {
  871|  18.7M|                    pi2_tmp[k] =
  872|  18.7M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  18.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  18.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 10.1k, False: 18.7M]
  |  |  |  |  |  Branch (40:53): [True: 7.37k, False: 18.6M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  873|  18.7M|                    pi2_tmp[k + 16] =
  874|  18.7M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  18.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  18.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 6.54k, False: 18.7M]
  |  |  |  |  |  Branch (40:53): [True: 7.99k, False: 18.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  875|  18.7M|                }
  876|  1.15M|            }
  877|  3.65M|            pi2_src++;
  878|  3.65M|            pi2_tmp += trans_size;
  879|  3.65M|            zero_cols = zero_cols >> 1;
  880|  3.65M|        }
  881|       |
  882|   162k|        pi2_tmp = pi2_tmp_orig;
  883|       |
  884|       |        /* Inverse Transform 2nd stage */
  885|   162k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   162k|#define IT_SHIFT_STAGE_2 12
  ------------------
  886|   162k|        add = 1 << (shift - 1);
  887|   162k|        if((zero_rows_2nd_stage & 0xFFFFFFF0) == 0xFFFFFFF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (887:12): [True: 31.9k, False: 130k]
  ------------------
  888|  31.9k|        {
  889|  1.02M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (889:24): [True: 993k, False: 31.9k]
  ------------------
  890|   993k|            {
  891|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  892|  16.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (892:28): [True: 15.8M, False: 993k]
  ------------------
  893|  15.8M|                {
  894|  15.8M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  895|  15.8M|                                    + g_ai2_ihevc_trans_32[3][k]
  896|  15.8M|                                                    * pi2_tmp[3 * trans_size];
  897|  15.8M|                }
  898|  8.96M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (898:28): [True: 7.96M, False: 993k]
  ------------------
  899|  7.96M|                {
  900|  7.96M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size];
  901|  7.96M|                }
  902|       |//                for(k = 0; k < 4; k++)
  903|   993k|                {
  904|   993k|                    eeo[0] = 0;
  905|   993k|                    eeo[1] = 0;
  906|   993k|                    eeo[2] = 0;
  907|   993k|                    eeo[3] = 0;
  908|   993k|                }
  909|   993k|                eeeo[0] = 0;
  910|   993k|                eeeo[1] = 0;
  911|   993k|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
  912|   993k|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
  913|       |
  914|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  915|   993k|                eee[0] = eeee[0] + eeeo[0];
  916|   993k|                eee[3] = eeee[0] - eeeo[0];
  917|   993k|                eee[1] = eeee[1] + eeeo[1];
  918|   993k|                eee[2] = eeee[1] - eeeo[1];
  919|  4.98M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (919:28): [True: 3.99M, False: 993k]
  ------------------
  920|  3.99M|                {
  921|  3.99M|                    ee[k] = eee[k] + eeo[k];
  922|  3.99M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  923|  3.99M|                }
  924|  8.92M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (924:28): [True: 7.92M, False: 993k]
  ------------------
  925|  7.92M|                {
  926|  7.92M|                    e[k] = ee[k] + eo[k];
  927|  7.92M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  928|  7.92M|                }
  929|  16.7M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (929:28): [True: 15.7M, False: 993k]
  ------------------
  930|  15.7M|                {
  931|  15.7M|                    WORD32 itrans_out;
  932|  15.7M|                    itrans_out =
  933|  15.7M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  15.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  15.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 15.7M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 15.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  934|  15.7M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  15.7M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  15.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.09M, False: 14.6M]
  |  |  |  |  |  Branch (40:53): [True: 627k, False: 14.0M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|  15.7M|                    itrans_out =
  936|  15.7M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  15.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  15.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 15.7M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 15.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  937|  15.7M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  15.7M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  15.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 981k, False: 14.7M]
  |  |  |  |  |  Branch (40:53): [True: 578k, False: 14.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  938|  15.7M|                }
  939|   993k|                pi2_tmp++;
  940|   993k|                pu1_pred += pred_strd;
  941|   993k|                pu1_dst += dst_strd;
  942|   993k|            }
  943|  31.9k|        }
  944|   130k|        else if((zero_rows_2nd_stage & 0xFFFFFF00) == 0xFFFFFF00) /* First 8 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (944:17): [True: 24.6k, False: 105k]
  ------------------
  945|  24.6k|        {
  946|   724k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (946:24): [True: 699k, False: 24.6k]
  ------------------
  947|   699k|            {
  948|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  949|  11.7M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (949:28): [True: 11.0M, False: 699k]
  ------------------
  950|  11.0M|                {
  951|  11.0M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
  952|  11.0M|                                    + g_ai2_ihevc_trans_32[3][k]
  953|  11.0M|                                                    * pi2_tmp[3 * trans_size]
  954|  11.0M|                                    + g_ai2_ihevc_trans_32[5][k]
  955|  11.0M|                                                    * pi2_tmp[5 * trans_size]
  956|  11.0M|                                    + g_ai2_ihevc_trans_32[7][k]
  957|  11.0M|                                                    * pi2_tmp[7 * trans_size];
  958|  11.0M|                }
  959|  6.41M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (959:28): [True: 5.71M, False: 699k]
  ------------------
  960|  5.71M|                {
  961|  5.71M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
  962|  5.71M|                                    + g_ai2_ihevc_trans_32[6][k]
  963|  5.71M|                                                    * pi2_tmp[6 * trans_size];
  964|  5.71M|                }
  965|  3.61M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (965:28): [True: 2.91M, False: 699k]
  ------------------
  966|  2.91M|                {
  967|  2.91M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size];
  968|  2.91M|                }
  969|   699k|                eeeo[0] = 0;
  970|   699k|                eeeo[1] = 0;
  971|   699k|                eeee[0] = g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0];
  972|   699k|                eeee[1] = g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0];
  973|       |
  974|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  975|   699k|                eee[0] = eeee[0] + eeeo[0];
  976|   699k|                eee[3] = eeee[0] - eeeo[0];
  977|   699k|                eee[1] = eeee[1] + eeeo[1];
  978|   699k|                eee[2] = eeee[1] - eeeo[1];
  979|  3.64M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (979:28): [True: 2.94M, False: 699k]
  ------------------
  980|  2.94M|                {
  981|  2.94M|                    ee[k] = eee[k] + eeo[k];
  982|  2.94M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
  983|  2.94M|                }
  984|  6.41M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (984:28): [True: 5.71M, False: 699k]
  ------------------
  985|  5.71M|                {
  986|  5.71M|                    e[k] = ee[k] + eo[k];
  987|  5.71M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
  988|  5.71M|                }
  989|  11.5M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (989:28): [True: 10.8M, False: 699k]
  ------------------
  990|  10.8M|                {
  991|  10.8M|                    WORD32 itrans_out;
  992|  10.8M|                    itrans_out =
  993|  10.8M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  10.8M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 10.8M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 10.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  994|  10.8M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  10.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.55M, False: 9.30M]
  |  |  |  |  |  Branch (40:53): [True: 829k, False: 8.47M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|  10.8M|                    itrans_out =
  996|  10.8M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  10.8M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 10.8M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 10.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|  10.8M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  10.8M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  10.8M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.46M, False: 9.39M]
  |  |  |  |  |  Branch (40:53): [True: 748k, False: 8.64M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  998|  10.8M|                }
  999|   699k|                pi2_tmp++;
 1000|   699k|                pu1_pred += pred_strd;
 1001|   699k|                pu1_dst += dst_strd;
 1002|   699k|            }
 1003|  24.6k|        }
 1004|   105k|        else /* All rows of output of 1st stage are non-zero */
 1005|   105k|        {
 1006|  3.18M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (1006:24): [True: 3.08M, False: 105k]
  ------------------
 1007|  3.08M|            {
 1008|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
 1009|  51.9M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (1009:28): [True: 48.8M, False: 3.08M]
  ------------------
 1010|  48.8M|                {
 1011|  48.8M|                    o[k] = g_ai2_ihevc_trans_32[1][k] * pi2_tmp[trans_size]
 1012|  48.8M|                                    + g_ai2_ihevc_trans_32[3][k]
 1013|  48.8M|                                                    * pi2_tmp[3 * trans_size]
 1014|  48.8M|                                    + g_ai2_ihevc_trans_32[5][k]
 1015|  48.8M|                                                    * pi2_tmp[5 * trans_size]
 1016|  48.8M|                                    + g_ai2_ihevc_trans_32[7][k]
 1017|  48.8M|                                                    * pi2_tmp[7 * trans_size]
 1018|  48.8M|                                    + g_ai2_ihevc_trans_32[9][k]
 1019|  48.8M|                                                    * pi2_tmp[9 * trans_size]
 1020|  48.8M|                                    + g_ai2_ihevc_trans_32[11][k]
 1021|  48.8M|                                                    * pi2_tmp[11 * trans_size]
 1022|  48.8M|                                    + g_ai2_ihevc_trans_32[13][k]
 1023|  48.8M|                                                    * pi2_tmp[13 * trans_size]
 1024|  48.8M|                                    + g_ai2_ihevc_trans_32[15][k]
 1025|  48.8M|                                                    * pi2_tmp[15 * trans_size]
 1026|  48.8M|                                    + g_ai2_ihevc_trans_32[17][k]
 1027|  48.8M|                                                    * pi2_tmp[17 * trans_size]
 1028|  48.8M|                                    + g_ai2_ihevc_trans_32[19][k]
 1029|  48.8M|                                                    * pi2_tmp[19 * trans_size]
 1030|  48.8M|                                    + g_ai2_ihevc_trans_32[21][k]
 1031|  48.8M|                                                    * pi2_tmp[21 * trans_size]
 1032|  48.8M|                                    + g_ai2_ihevc_trans_32[23][k]
 1033|  48.8M|                                                    * pi2_tmp[23 * trans_size]
 1034|  48.8M|                                    + g_ai2_ihevc_trans_32[25][k]
 1035|  48.8M|                                                    * pi2_tmp[25 * trans_size]
 1036|  48.8M|                                    + g_ai2_ihevc_trans_32[27][k]
 1037|  48.8M|                                                    * pi2_tmp[27 * trans_size]
 1038|  48.8M|                                    + g_ai2_ihevc_trans_32[29][k]
 1039|  48.8M|                                                    * pi2_tmp[29 * trans_size]
 1040|  48.8M|                                    + g_ai2_ihevc_trans_32[31][k]
 1041|  48.8M|                                                    * pi2_tmp[31 * trans_size];
 1042|  48.8M|                }
 1043|  28.4M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (1043:28): [True: 25.3M, False: 3.08M]
  ------------------
 1044|  25.3M|                {
 1045|  25.3M|                    eo[k] = g_ai2_ihevc_trans_32[2][k] * pi2_tmp[2 * trans_size]
 1046|  25.3M|                                    + g_ai2_ihevc_trans_32[6][k]
 1047|  25.3M|                                                    * pi2_tmp[6 * trans_size]
 1048|  25.3M|                                    + g_ai2_ihevc_trans_32[10][k]
 1049|  25.3M|                                                    * pi2_tmp[10 * trans_size]
 1050|  25.3M|                                    + g_ai2_ihevc_trans_32[14][k]
 1051|  25.3M|                                                    * pi2_tmp[14 * trans_size]
 1052|  25.3M|                                    + g_ai2_ihevc_trans_32[18][k]
 1053|  25.3M|                                                    * pi2_tmp[18 * trans_size]
 1054|  25.3M|                                    + g_ai2_ihevc_trans_32[22][k]
 1055|  25.3M|                                                    * pi2_tmp[22 * trans_size]
 1056|  25.3M|                                    + g_ai2_ihevc_trans_32[26][k]
 1057|  25.3M|                                                    * pi2_tmp[26 * trans_size]
 1058|  25.3M|                                    + g_ai2_ihevc_trans_32[30][k]
 1059|  25.3M|                                                    * pi2_tmp[30 * trans_size];
 1060|  25.3M|                }
 1061|  16.1M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (1061:28): [True: 13.0M, False: 3.08M]
  ------------------
 1062|  13.0M|                {
 1063|  13.0M|                    eeo[k] = g_ai2_ihevc_trans_32[4][k] * pi2_tmp[4 * trans_size]
 1064|  13.0M|                                    + g_ai2_ihevc_trans_32[12][k]
 1065|  13.0M|                                                    * pi2_tmp[12 * trans_size]
 1066|  13.0M|                                    + g_ai2_ihevc_trans_32[20][k]
 1067|  13.0M|                                                    * pi2_tmp[20 * trans_size]
 1068|  13.0M|                                    + g_ai2_ihevc_trans_32[28][k]
 1069|  13.0M|                                                    * pi2_tmp[28 * trans_size];
 1070|  13.0M|                }
 1071|  3.08M|                eeeo[0] =
 1072|  3.08M|                                g_ai2_ihevc_trans_32[8][0] * pi2_tmp[8 * trans_size]
 1073|  3.08M|                                                + g_ai2_ihevc_trans_32[24][0]
 1074|  3.08M|                                                                * pi2_tmp[24
 1075|  3.08M|                                                                                * trans_size];
 1076|  3.08M|                eeeo[1] =
 1077|  3.08M|                                g_ai2_ihevc_trans_32[8][1] * pi2_tmp[8 * trans_size]
 1078|  3.08M|                                                + g_ai2_ihevc_trans_32[24][1]
 1079|  3.08M|                                                                * pi2_tmp[24
 1080|  3.08M|                                                                                * trans_size];
 1081|  3.08M|                eeee[0] =
 1082|  3.08M|                                g_ai2_ihevc_trans_32[0][0] * pi2_tmp[0]
 1083|  3.08M|                                                + g_ai2_ihevc_trans_32[16][0]
 1084|  3.08M|                                                                * pi2_tmp[16
 1085|  3.08M|                                                                                * trans_size];
 1086|  3.08M|                eeee[1] =
 1087|  3.08M|                                g_ai2_ihevc_trans_32[0][1] * pi2_tmp[0]
 1088|  3.08M|                                                + g_ai2_ihevc_trans_32[16][1]
 1089|  3.08M|                                                                * pi2_tmp[16
 1090|  3.08M|                                                                                * trans_size];
 1091|       |
 1092|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
 1093|  3.08M|                eee[0] = eeee[0] + eeeo[0];
 1094|  3.08M|                eee[3] = eeee[0] - eeeo[0];
 1095|  3.08M|                eee[1] = eeee[1] + eeeo[1];
 1096|  3.08M|                eee[2] = eeee[1] - eeeo[1];
 1097|  15.9M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (1097:28): [True: 12.8M, False: 3.08M]
  ------------------
 1098|  12.8M|                {
 1099|  12.8M|                    ee[k] = eee[k] + eeo[k];
 1100|  12.8M|                    ee[k + 4] = eee[3 - k] - eeo[3 - k];
 1101|  12.8M|                }
 1102|  28.6M|                for(k = 0; k < 8; k++)
  ------------------
  |  Branch (1102:28): [True: 25.5M, False: 3.08M]
  ------------------
 1103|  25.5M|                {
 1104|  25.5M|                    e[k] = ee[k] + eo[k];
 1105|  25.5M|                    e[k + 8] = ee[7 - k] - eo[7 - k];
 1106|  25.5M|                }
 1107|  51.8M|                for(k = 0; k < 16; k++)
  ------------------
  |  Branch (1107:28): [True: 48.7M, False: 3.08M]
  ------------------
 1108|  48.7M|                {
 1109|  48.7M|                    WORD32 itrans_out;
 1110|  48.7M|                    itrans_out =
 1111|  48.7M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  48.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  48.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 48.7M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 48.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1112|  48.7M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  48.7M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  48.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 11.0M, False: 37.7M]
  |  |  |  |  |  Branch (40:53): [True: 4.66M, False: 33.1M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1113|  48.7M|                    itrans_out =
 1114|  48.7M|                                    CLIP_S16(((e[15 - k] - o[15 - k] + add) >> shift));
  ------------------
  |  |   53|  48.7M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  48.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 48.7M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 48.7M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1115|  48.7M|                    pu1_dst[k + 16] = CLIP_U8((itrans_out + pu1_pred[k + 16]));
  ------------------
  |  |   40|  48.7M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  48.7M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 10.9M, False: 37.8M]
  |  |  |  |  |  Branch (40:53): [True: 4.57M, False: 33.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1116|  48.7M|                }
 1117|  3.08M|                pi2_tmp++;
 1118|  3.08M|                pu1_pred += pred_strd;
 1119|  3.08M|                pu1_dst += dst_strd;
 1120|  3.08M|            }
 1121|   105k|        }
 1122|       |        /************************************************************************************************/
 1123|       |        /************************************END - IT_RECON_32x32****************************************/
 1124|       |        /************************************************************************************************/
 1125|   162k|    }
 1126|   511k|}

ihevc_itrans_recon_8x8:
  107|   253k|{
  108|   253k|    WORD32 j, k;
  109|   253k|    WORD32 e[4], o[4];
  110|   253k|    WORD32 ee[2], eo[2];
  111|   253k|    WORD32 add;
  112|   253k|    WORD32 shift;
  113|   253k|    WORD16 *pi2_tmp_orig;
  114|   253k|    WORD32 trans_size;
  115|   253k|    WORD32 zero_rows_2nd_stage = zero_cols;
  116|   253k|    WORD32 row_limit_2nd_stage;
  117|       |
  118|   253k|    trans_size = TRANS_SIZE_8;
  ------------------
  |  |  420|   253k|#define TRANS_SIZE_8   8
  ------------------
  119|       |
  120|   253k|    pi2_tmp_orig = pi2_tmp;
  121|       |
  122|   253k|    if((zero_cols & 0xF0) == 0xF0)
  ------------------
  |  Branch (122:8): [True: 180k, False: 73.4k]
  ------------------
  123|   180k|        row_limit_2nd_stage = 4;
  124|  73.4k|    else
  125|  73.4k|        row_limit_2nd_stage = TRANS_SIZE_8;
  ------------------
  |  |  420|  73.4k|#define TRANS_SIZE_8   8
  ------------------
  126|       |
  127|       |
  128|   253k|    if((zero_rows & 0xF0) == 0xF0) /* First 4 rows of input are non-zero */
  ------------------
  |  Branch (128:8): [True: 195k, False: 58.0k]
  ------------------
  129|   195k|    {
  130|       |        /************************************************************************************************/
  131|       |        /**********************************START - IT_RECON_8x8******************************************/
  132|       |        /************************************************************************************************/
  133|       |
  134|       |        /* Inverse Transform 1st stage */
  135|   195k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   195k|#define IT_SHIFT_STAGE_1 7
  ------------------
  136|   195k|        add = 1 << (shift - 1);
  137|       |
  138|  1.19M|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (138:20): [True: 1.00M, False: 195k]
  ------------------
  139|  1.00M|        {
  140|       |            /* Checking for Zero Cols */
  141|  1.00M|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (141:16): [True: 462k, False: 539k]
  ------------------
  142|   462k|            {
  143|   462k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  144|   462k|            }
  145|   539k|            else
  146|   539k|            {
  147|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  148|  2.70M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (148:28): [True: 2.16M, False: 539k]
  ------------------
  149|  2.16M|                {
  150|  2.16M|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_src[src_strd]
  151|  2.16M|                                    + g_ai2_ihevc_trans_8[3][k]
  152|  2.16M|                                                    * pi2_src[3 * src_strd];
  153|  2.16M|                }
  154|   539k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_src[2 * src_strd];
  155|   539k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_src[2 * src_strd];
  156|   539k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_src[0];
  157|   539k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_src[0];
  158|       |
  159|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  160|   539k|                e[0] = ee[0] + eo[0];
  161|   539k|                e[3] = ee[0] - eo[0];
  162|   539k|                e[1] = ee[1] + eo[1];
  163|   539k|                e[2] = ee[1] - eo[1];
  164|  2.70M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (164:28): [True: 2.16M, False: 539k]
  ------------------
  165|  2.16M|                {
  166|  2.16M|                    pi2_tmp[k] =
  167|  2.16M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  2.16M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  2.16M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.58k, False: 2.16M]
  |  |  |  |  |  Branch (40:53): [True: 1.56k, False: 2.15M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|  2.16M|                    pi2_tmp[k + 4] =
  169|  2.16M|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|  2.16M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  2.16M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.45k, False: 2.16M]
  |  |  |  |  |  Branch (40:53): [True: 1.48k, False: 2.15M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|  2.16M|                }
  171|   539k|            }
  172|  1.00M|            pi2_src++;
  173|  1.00M|            pi2_tmp += trans_size;
  174|  1.00M|            zero_cols = zero_cols >> 1;
  175|  1.00M|        }
  176|       |
  177|   195k|        pi2_tmp = pi2_tmp_orig;
  178|       |
  179|       |        /* Inverse Transform 2nd stage */
  180|   195k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   195k|#define IT_SHIFT_STAGE_2 12
  ------------------
  181|   195k|        add = 1 << (shift - 1);
  182|   195k|        if((zero_rows_2nd_stage & 0xF0) == 0xF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (182:12): [True: 139k, False: 55.6k]
  ------------------
  183|   139k|        {
  184|  1.25M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (184:24): [True: 1.11M, False: 139k]
  ------------------
  185|  1.11M|            {
  186|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  187|  5.56M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (187:28): [True: 4.45M, False: 1.11M]
  ------------------
  188|  4.45M|                {
  189|  4.45M|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
  190|  4.45M|                                    + g_ai2_ihevc_trans_8[3][k] * pi2_tmp[3 * trans_size];
  191|  4.45M|                }
  192|  1.11M|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size];
  193|  1.11M|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size];
  194|  1.11M|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0];
  195|  1.11M|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0];
  196|       |
  197|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  198|  1.11M|                e[0] = ee[0] + eo[0];
  199|  1.11M|                e[3] = ee[0] - eo[0];
  200|  1.11M|                e[1] = ee[1] + eo[1];
  201|  1.11M|                e[2] = ee[1] - eo[1];
  202|  5.56M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (202:28): [True: 4.45M, False: 1.11M]
  ------------------
  203|  4.45M|                {
  204|  4.45M|                    WORD32 itrans_out;
  205|  4.45M|                    itrans_out =
  206|  4.45M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  4.45M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  4.45M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 4.45M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 4.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|  4.45M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  4.45M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  4.45M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 826k, False: 3.62M]
  |  |  |  |  |  Branch (40:53): [True: 389k, False: 3.23M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|  4.45M|                    itrans_out =
  209|  4.45M|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|  4.45M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  4.45M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 4.45M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 4.45M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  4.45M|                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
  ------------------
  |  |   40|  4.45M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  4.45M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 845k, False: 3.60M]
  |  |  |  |  |  Branch (40:53): [True: 392k, False: 3.21M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|  4.45M|                }
  212|  1.11M|                pi2_tmp++;
  213|  1.11M|                pu1_pred += pred_strd;
  214|  1.11M|                pu1_dst += dst_strd;
  215|  1.11M|            }
  216|   139k|        }
  217|  55.6k|        else /* All rows of output of 1st stage are non-zero */
  218|  55.6k|        {
  219|   498k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (219:24): [True: 442k, False: 55.6k]
  ------------------
  220|   442k|            {
  221|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  222|  2.21M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (222:28): [True: 1.77M, False: 442k]
  ------------------
  223|  1.77M|                {
  224|  1.77M|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
  225|  1.77M|                                    + g_ai2_ihevc_trans_8[3][k]
  226|  1.77M|                                                    * pi2_tmp[3 * trans_size]
  227|  1.77M|                                    + g_ai2_ihevc_trans_8[5][k]
  228|  1.77M|                                                    * pi2_tmp[5 * trans_size]
  229|  1.77M|                                    + g_ai2_ihevc_trans_8[7][k]
  230|  1.77M|                                                    * pi2_tmp[7 * trans_size];
  231|  1.77M|                }
  232|       |
  233|   442k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size]
  234|   442k|                                + g_ai2_ihevc_trans_8[6][0] * pi2_tmp[6 * trans_size];
  235|   442k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size]
  236|   442k|                                + g_ai2_ihevc_trans_8[6][1] * pi2_tmp[6 * trans_size];
  237|   442k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0]
  238|   442k|                                + g_ai2_ihevc_trans_8[4][0] * pi2_tmp[4 * trans_size];
  239|   442k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0]
  240|   442k|                                + g_ai2_ihevc_trans_8[4][1] * pi2_tmp[4 * trans_size];
  241|       |
  242|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  243|   442k|                e[0] = ee[0] + eo[0];
  244|   442k|                e[3] = ee[0] - eo[0];
  245|   442k|                e[1] = ee[1] + eo[1];
  246|   442k|                e[2] = ee[1] - eo[1];
  247|  2.21M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (247:28): [True: 1.76M, False: 442k]
  ------------------
  248|  1.76M|                {
  249|  1.76M|                    WORD32 itrans_out;
  250|  1.76M|                    itrans_out =
  251|  1.76M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  1.76M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.76M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.76M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.76M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|  1.76M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  1.76M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.76M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 571k, False: 1.19M]
  |  |  |  |  |  Branch (40:53): [True: 130k, False: 1.06M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|  1.76M|                    itrans_out =
  254|  1.76M|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|  1.76M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.76M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.76M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.76M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  1.76M|                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
  ------------------
  |  |   40|  1.76M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.76M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 709k, False: 1.06M]
  |  |  |  |  |  Branch (40:53): [True: 127k, False: 933k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|  1.76M|                }
  257|   442k|                pi2_tmp++;
  258|   442k|                pu1_pred += pred_strd;
  259|   442k|                pu1_dst += dst_strd;
  260|   442k|            }
  261|  55.6k|        }
  262|       |        /************************************************************************************************/
  263|       |        /************************************END - IT_RECON_8x8******************************************/
  264|       |        /************************************************************************************************/
  265|   195k|    }
  266|  58.0k|    else /* All rows of input are non-zero */
  267|  58.0k|    {
  268|       |        /************************************************************************************************/
  269|       |        /**********************************START - IT_RECON_8x8******************************************/
  270|       |        /************************************************************************************************/
  271|       |
  272|       |        /* Inverse Transform 1st stage */
  273|  58.0k|        shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  58.0k|#define IT_SHIFT_STAGE_1 7
  ------------------
  274|  58.0k|        add = 1 << (shift - 1);
  275|       |
  276|   361k|        for(j = 0; j < row_limit_2nd_stage; j++)
  ------------------
  |  Branch (276:20): [True: 303k, False: 58.0k]
  ------------------
  277|   303k|        {
  278|       |            /* Checking for Zero Cols */
  279|   303k|            if((zero_cols & 1) == 1)
  ------------------
  |  Branch (279:16): [True: 119k, False: 183k]
  ------------------
  280|   119k|            {
  281|   119k|                memset(pi2_tmp, 0, trans_size * sizeof(WORD16));
  282|   119k|            }
  283|   183k|            else
  284|   183k|            {
  285|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  286|   921k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (286:28): [True: 737k, False: 183k]
  ------------------
  287|   737k|                {
  288|   737k|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_src[src_strd]
  289|   737k|                                    + g_ai2_ihevc_trans_8[3][k]
  290|   737k|                                                    * pi2_src[3 * src_strd]
  291|   737k|                                    + g_ai2_ihevc_trans_8[5][k]
  292|   737k|                                                    * pi2_src[5 * src_strd]
  293|   737k|                                    + g_ai2_ihevc_trans_8[7][k]
  294|   737k|                                                    * pi2_src[7 * src_strd];
  295|   737k|                }
  296|       |
  297|   183k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_src[2 * src_strd]
  298|   183k|                                + g_ai2_ihevc_trans_8[6][0] * pi2_src[6 * src_strd];
  299|   183k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_src[2 * src_strd]
  300|   183k|                                + g_ai2_ihevc_trans_8[6][1] * pi2_src[6 * src_strd];
  301|   183k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_src[0]
  302|   183k|                                + g_ai2_ihevc_trans_8[4][0] * pi2_src[4 * src_strd];
  303|   183k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_src[0]
  304|   183k|                                + g_ai2_ihevc_trans_8[4][1] * pi2_src[4 * src_strd];
  305|       |
  306|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  307|   183k|                e[0] = ee[0] + eo[0];
  308|   183k|                e[3] = ee[0] - eo[0];
  309|   183k|                e[1] = ee[1] + eo[1];
  310|   183k|                e[2] = ee[1] - eo[1];
  311|   921k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (311:28): [True: 737k, False: 183k]
  ------------------
  312|   737k|                {
  313|   737k|                    pi2_tmp[k] =
  314|   737k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   737k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   737k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 4.15k, False: 733k]
  |  |  |  |  |  Branch (40:53): [True: 3.43k, False: 729k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|   737k|                    pi2_tmp[k + 4] =
  316|   737k|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|   737k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   737k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.44k, False: 733k]
  |  |  |  |  |  Branch (40:53): [True: 3.58k, False: 730k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|   737k|                }
  318|   183k|            }
  319|   303k|            pi2_src++;
  320|   303k|            pi2_tmp += trans_size;
  321|   303k|            zero_cols = zero_cols >> 1;
  322|   303k|        }
  323|       |
  324|  58.0k|        pi2_tmp = pi2_tmp_orig;
  325|       |
  326|       |        /* Inverse Transform 2nd stage */
  327|  58.0k|        shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  58.0k|#define IT_SHIFT_STAGE_2 12
  ------------------
  328|  58.0k|        add = 1 << (shift - 1);
  329|  58.0k|        if((zero_rows_2nd_stage & 0xF0) == 0xF0) /* First 4 rows of output of 1st stage are non-zero */
  ------------------
  |  Branch (329:12): [True: 40.1k, False: 17.9k]
  ------------------
  330|  40.1k|        {
  331|   358k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (331:24): [True: 318k, False: 40.1k]
  ------------------
  332|   318k|            {
  333|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  334|  1.59M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (334:28): [True: 1.27M, False: 318k]
  ------------------
  335|  1.27M|                {
  336|  1.27M|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
  337|  1.27M|                                    + g_ai2_ihevc_trans_8[3][k] * pi2_tmp[3 * trans_size];
  338|  1.27M|                }
  339|   318k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size];
  340|   318k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size];
  341|   318k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0];
  342|   318k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0];
  343|       |
  344|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  345|   318k|                e[0] = ee[0] + eo[0];
  346|   318k|                e[3] = ee[0] - eo[0];
  347|   318k|                e[1] = ee[1] + eo[1];
  348|   318k|                e[2] = ee[1] - eo[1];
  349|  1.59M|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (349:28): [True: 1.27M, False: 318k]
  ------------------
  350|  1.27M|                {
  351|  1.27M|                    WORD32 itrans_out;
  352|  1.27M|                    itrans_out =
  353|  1.27M|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|  1.27M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.27M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.27M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.27M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|  1.27M|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|  1.27M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.27M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 344k, False: 929k]
  |  |  |  |  |  Branch (40:53): [True: 123k, False: 805k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|  1.27M|                    itrans_out =
  356|  1.27M|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|  1.27M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  1.27M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 1.27M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 1.27M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|  1.27M|                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
  ------------------
  |  |   40|  1.27M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.27M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 358k, False: 915k]
  |  |  |  |  |  Branch (40:53): [True: 123k, False: 792k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|  1.27M|                }
  359|   318k|                pi2_tmp++;
  360|   318k|                pu1_pred += pred_strd;
  361|   318k|                pu1_dst += dst_strd;
  362|   318k|            }
  363|  40.1k|        }
  364|  17.9k|        else /* All rows of output of 1st stage are non-zero */
  365|  17.9k|        {
  366|   161k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (366:24): [True: 143k, False: 17.9k]
  ------------------
  367|   143k|            {
  368|       |                /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
  369|   717k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (369:28): [True: 574k, False: 143k]
  ------------------
  370|   574k|                {
  371|   574k|                    o[k] = g_ai2_ihevc_trans_8[1][k] * pi2_tmp[trans_size]
  372|   574k|                                    + g_ai2_ihevc_trans_8[3][k]
  373|   574k|                                                    * pi2_tmp[3 * trans_size]
  374|   574k|                                    + g_ai2_ihevc_trans_8[5][k]
  375|   574k|                                                    * pi2_tmp[5 * trans_size]
  376|   574k|                                    + g_ai2_ihevc_trans_8[7][k]
  377|   574k|                                                    * pi2_tmp[7 * trans_size];
  378|   574k|                }
  379|       |
  380|   143k|                eo[0] = g_ai2_ihevc_trans_8[2][0] * pi2_tmp[2 * trans_size]
  381|   143k|                                + g_ai2_ihevc_trans_8[6][0] * pi2_tmp[6 * trans_size];
  382|   143k|                eo[1] = g_ai2_ihevc_trans_8[2][1] * pi2_tmp[2 * trans_size]
  383|   143k|                                + g_ai2_ihevc_trans_8[6][1] * pi2_tmp[6 * trans_size];
  384|   143k|                ee[0] = g_ai2_ihevc_trans_8[0][0] * pi2_tmp[0]
  385|   143k|                                + g_ai2_ihevc_trans_8[4][0] * pi2_tmp[4 * trans_size];
  386|   143k|                ee[1] = g_ai2_ihevc_trans_8[0][1] * pi2_tmp[0]
  387|   143k|                                + g_ai2_ihevc_trans_8[4][1] * pi2_tmp[4 * trans_size];
  388|       |
  389|       |                /* Combining e and o terms at each hierarchy levels to calculate the final spatial domain vector */
  390|   143k|                e[0] = ee[0] + eo[0];
  391|   143k|                e[3] = ee[0] - eo[0];
  392|   143k|                e[1] = ee[1] + eo[1];
  393|   143k|                e[2] = ee[1] - eo[1];
  394|   717k|                for(k = 0; k < 4; k++)
  ------------------
  |  Branch (394:28): [True: 573k, False: 143k]
  ------------------
  395|   573k|                {
  396|   573k|                    WORD32 itrans_out;
  397|   573k|                    itrans_out =
  398|   573k|                                    CLIP_S16(((e[k] + o[k] + add) >> shift));
  ------------------
  |  |   53|   573k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   573k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 573k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 573k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  399|   573k|                    pu1_dst[k] = CLIP_U8((itrans_out + pu1_pred[k]));
  ------------------
  |  |   40|   573k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   573k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 152k, False: 420k]
  |  |  |  |  |  Branch (40:53): [True: 77.2k, False: 343k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|   573k|                    itrans_out =
  401|   573k|                                    CLIP_S16(((e[3 - k] - o[3 - k] + add) >> shift));
  ------------------
  |  |   53|   573k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   573k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 573k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 573k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|   573k|                    pu1_dst[k + 4] = CLIP_U8((itrans_out + pu1_pred[k + 4]));
  ------------------
  |  |   40|   573k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   573k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 142k, False: 431k]
  |  |  |  |  |  Branch (40:53): [True: 78.5k, False: 353k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  403|   573k|                }
  404|   143k|                pi2_tmp++;
  405|   143k|                pu1_pred += pred_strd;
  406|   143k|                pu1_dst += dst_strd;
  407|   143k|            }
  408|  17.9k|        }
  409|       |        /************************************************************************************************/
  410|       |        /************************************END - IT_RECON_8x8******************************************/
  411|       |        /************************************************************************************************/
  412|  58.0k|    }
  413|   253k|}

ihevc_memcpy:
   76|  27.6M|{
   77|  27.6M|    memcpy(pu1_dst, pu1_src, num_bytes);
   78|  27.6M|}
ihevc_memcpy_mul_8:
   82|  8.90M|{
   83|  8.90M|    memcpy(pu1_dst, pu1_src, num_bytes);
   84|  8.90M|}
ihevc_memset:
  112|  9.07M|{
  113|  9.07M|    memset(pu1_dst, value, num_bytes);
  114|  9.07M|}
ihevc_memset_mul_8:
  118|  8.53M|{
  119|  8.53M|    memset(pu1_dst, value, num_bytes);
  120|  8.53M|}
ihevc_memset_16bit:
  148|  4.15M|{
  149|  4.15M|    UWORD32 i;
  150|  20.8M|    for(i = 0; i < num_words; i++)
  ------------------
  |  Branch (150:16): [True: 16.6M, False: 4.15M]
  ------------------
  151|  16.6M|    {
  152|  16.6M|        *pu2_dst++ = value;
  153|  16.6M|    }
  154|  4.15M|}

ihevc_pad_top:
  272|  10.7k|{
  273|  10.7k|    WORD32 row;
  274|       |
  275|   653k|    for(row = 1; row <= pad_size; row++)
  ------------------
  |  Branch (275:18): [True: 642k, False: 10.7k]
  ------------------
  276|   642k|    {
  277|   642k|        memcpy(pu1_src - row * src_strd, pu1_src, wd);
  278|   642k|    }
  279|  10.7k|}
ihevc_pad_bottom:
  326|  10.7k|{
  327|  10.7k|    WORD32 row;
  328|       |
  329|   653k|    for(row = 1; row <= pad_size; row++)
  ------------------
  |  Branch (329:18): [True: 642k, False: 10.7k]
  ------------------
  330|   642k|    {
  331|   642k|        memcpy(pu1_src + (row - 1) * src_strd,
  332|   642k|               pu1_src - 1 * src_strd, wd);
  333|   642k|    }
  334|  10.7k|}
ihevc_pad_left_luma:
  381|   126k|{
  382|   126k|    WORD32 row;
  383|       |
  384|  4.79M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (384:18): [True: 4.67M, False: 126k]
  ------------------
  385|  4.67M|    {
  386|  4.67M|        memset(pu1_src - pad_size, *pu1_src, pad_size);
  387|       |
  388|  4.67M|        pu1_src += src_strd;
  389|  4.67M|    }
  390|   126k|}
ihevc_pad_left_chroma:
  437|   132k|{
  438|   132k|    WORD32 row;
  439|   132k|    WORD32 col;
  440|   132k|    UWORD16 *pu2_src = (UWORD16 *)pu1_src;
  441|       |
  442|   132k|    src_strd >>= 1;
  443|   132k|    pad_size >>= 1;
  444|       |
  445|  2.53M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (445:18): [True: 2.39M, False: 132k]
  ------------------
  446|  2.39M|    {
  447|  2.39M|        UWORD16 u2_uv_val;
  448|       |
  449|  2.39M|        u2_uv_val = pu2_src[0];
  450|  98.3M|        for(col = -pad_size; col < 0; col++)
  ------------------
  |  Branch (450:30): [True: 95.9M, False: 2.39M]
  ------------------
  451|  95.9M|            pu2_src[col] = u2_uv_val;
  452|       |
  453|  2.39M|        pu2_src += src_strd;
  454|  2.39M|    }
  455|   132k|}
ihevc_pad_right_luma:
  502|   126k|{
  503|   126k|    WORD32 row;
  504|       |
  505|  4.79M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (505:18): [True: 4.67M, False: 126k]
  ------------------
  506|  4.67M|    {
  507|  4.67M|        memset(pu1_src, *(pu1_src - 1), pad_size);
  508|       |
  509|  4.67M|        pu1_src += src_strd;
  510|  4.67M|    }
  511|   126k|}
ihevc_pad_right_chroma:
  558|   126k|{
  559|   126k|    WORD32 row;
  560|   126k|    WORD32 col;
  561|   126k|    UWORD16 *pu2_src = (UWORD16 *)pu1_src;
  562|       |
  563|   126k|    src_strd >>= 1;
  564|   126k|    pad_size >>= 1;
  565|       |
  566|  2.52M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (566:18): [True: 2.39M, False: 126k]
  ------------------
  567|  2.39M|    {
  568|  2.39M|        UWORD16 u2_uv_val;
  569|       |
  570|  2.39M|        u2_uv_val = pu2_src[-1];
  571|  98.3M|        for(col = 0; col < pad_size; col++)
  ------------------
  |  Branch (571:22): [True: 95.9M, False: 2.39M]
  ------------------
  572|  95.9M|            pu2_src[col] = u2_uv_val;
  573|       |
  574|  2.39M|        pu2_src += src_strd;
  575|  2.39M|    }
  576|   126k|}

ihevc_recon_4x4_ttype1:
  101|   120k|{
  102|   120k|    WORD32 i, j;
  103|   120k|    WORD32 trans_size;
  104|       |
  105|   120k|    trans_size = TRANS_SIZE_4;
  ------------------
  |  |  419|   120k|#define TRANS_SIZE_4   4
  ------------------
  106|       |
  107|       |    /* Reconstruction */
  108|       |
  109|   600k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (109:16): [True: 480k, False: 120k]
  ------------------
  110|   480k|    {
  111|       |        /* Checking for Zero Cols */
  112|   480k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (112:12): [True: 179k, False: 300k]
  ------------------
  113|   179k|        {
  114|   899k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (114:24): [True: 719k, False: 179k]
  ------------------
  115|   719k|            {
  116|   719k|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  117|   719k|            }
  118|   179k|        }
  119|   300k|        else
  120|   300k|        {
  121|  1.50M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (121:24): [True: 1.20M, False: 300k]
  ------------------
  122|  1.20M|            {
  123|  1.20M|                pu1_dst[j * dst_strd] =
  124|  1.20M|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|  1.20M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  1.20M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 188k, False: 1.01M]
  |  |  |  |  |  Branch (40:53): [True: 61.5k, False: 953k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|  1.20M|            }
  126|   300k|        }
  127|   480k|        pi2_src++;
  128|   480k|        pu1_dst++;
  129|   480k|        pu1_pred++;
  130|   480k|        zero_cols = zero_cols >> 1;
  131|   480k|    }
  132|   120k|}
ihevc_recon_4x4:
  183|  4.00k|{
  184|  4.00k|    WORD32 i, j;
  185|  4.00k|    WORD32 trans_size;
  186|       |
  187|  4.00k|    trans_size = TRANS_SIZE_4;
  ------------------
  |  |  419|  4.00k|#define TRANS_SIZE_4   4
  ------------------
  188|       |
  189|       |    /* Reconstruction */
  190|       |
  191|  20.0k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (191:16): [True: 16.0k, False: 4.00k]
  ------------------
  192|  16.0k|    {
  193|       |        /* Checking for Zero Cols */
  194|  16.0k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (194:12): [True: 6.89k, False: 9.10k]
  ------------------
  195|  6.89k|        {
  196|  34.4k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (196:24): [True: 27.5k, False: 6.89k]
  ------------------
  197|  27.5k|            {
  198|  27.5k|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  199|  27.5k|            }
  200|  6.89k|        }
  201|  9.10k|        else
  202|  9.10k|        {
  203|  45.5k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (203:24): [True: 36.4k, False: 9.10k]
  ------------------
  204|  36.4k|            {
  205|  36.4k|                pu1_dst[j * dst_strd] =
  206|  36.4k|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|  36.4k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  36.4k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.11k, False: 33.3k]
  |  |  |  |  |  Branch (40:53): [True: 3.57k, False: 29.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|  36.4k|            }
  208|  9.10k|        }
  209|  16.0k|        pi2_src++;
  210|  16.0k|        pu1_dst++;
  211|  16.0k|        pu1_pred++;
  212|  16.0k|        zero_cols = zero_cols >> 1;
  213|  16.0k|    }
  214|  4.00k|}
ihevc_recon_8x8:
  265|  21.4k|{
  266|  21.4k|    WORD32 i, j;
  267|  21.4k|    WORD32 trans_size;
  268|       |
  269|  21.4k|    trans_size = TRANS_SIZE_8;
  ------------------
  |  |  420|  21.4k|#define TRANS_SIZE_8   8
  ------------------
  270|       |
  271|       |    /* Reconstruction */
  272|       |
  273|   192k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (273:16): [True: 171k, False: 21.4k]
  ------------------
  274|   171k|    {
  275|       |        /* Checking for Zero Cols */
  276|   171k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (276:12): [True: 104k, False: 66.7k]
  ------------------
  277|   104k|        {
  278|   939k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (278:24): [True: 835k, False: 104k]
  ------------------
  279|   835k|            {
  280|   835k|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  281|   835k|            }
  282|   104k|        }
  283|  66.7k|        else
  284|  66.7k|        {
  285|   600k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (285:24): [True: 534k, False: 66.7k]
  ------------------
  286|   534k|            {
  287|   534k|                pu1_dst[j * dst_strd] =
  288|   534k|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|   534k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   534k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.64k, False: 532k]
  |  |  |  |  |  Branch (40:53): [True: 2.40k, False: 530k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|   534k|            }
  290|  66.7k|        }
  291|   171k|        pi2_src++;
  292|   171k|        pu1_dst++;
  293|   171k|        pu1_pred++;
  294|   171k|        zero_cols = zero_cols >> 1;
  295|   171k|    }
  296|  21.4k|}
ihevc_recon_16x16:
  347|  13.0k|{
  348|  13.0k|    WORD32 i, j;
  349|  13.0k|    WORD32 trans_size;
  350|       |
  351|  13.0k|    trans_size = TRANS_SIZE_16;
  ------------------
  |  |  421|  13.0k|#define TRANS_SIZE_16 16
  ------------------
  352|       |
  353|       |    /* Reconstruction */
  354|       |
  355|   220k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (355:16): [True: 207k, False: 13.0k]
  ------------------
  356|   207k|    {
  357|       |        /* Checking for Zero Cols */
  358|   207k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (358:12): [True: 180k, False: 27.5k]
  ------------------
  359|   180k|        {
  360|  3.06M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (360:24): [True: 2.88M, False: 180k]
  ------------------
  361|  2.88M|            {
  362|  2.88M|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  363|  2.88M|            }
  364|   180k|        }
  365|  27.5k|        else
  366|  27.5k|        {
  367|   471k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (367:24): [True: 443k, False: 27.5k]
  ------------------
  368|   443k|            {
  369|   443k|                pu1_dst[j * dst_strd] =
  370|   443k|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|   443k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   443k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 678, False: 442k]
  |  |  |  |  |  Branch (40:53): [True: 1.06k, False: 441k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|   443k|            }
  372|  27.5k|        }
  373|   207k|        pi2_src++;
  374|   207k|        pu1_dst++;
  375|   207k|        pu1_pred++;
  376|   207k|        zero_cols = zero_cols >> 1;
  377|   207k|    }
  378|  13.0k|}
ihevc_recon_32x32:
  429|  4.91k|{
  430|  4.91k|    WORD32 i, j;
  431|  4.91k|    WORD32 trans_size;
  432|       |
  433|  4.91k|    trans_size = TRANS_SIZE_32;
  ------------------
  |  |  422|  4.91k|#define TRANS_SIZE_32 32
  ------------------
  434|       |
  435|       |    /* Reconstruction */
  436|       |
  437|   161k|    for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (437:16): [True: 157k, False: 4.91k]
  ------------------
  438|   157k|    {
  439|       |        /* Checking for Zero Cols */
  440|   157k|        if((zero_cols & 1) == 1)
  ------------------
  |  Branch (440:12): [True: 128k, False: 28.6k]
  ------------------
  441|   128k|        {
  442|  4.23M|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (442:24): [True: 4.10M, False: 128k]
  ------------------
  443|  4.10M|            {
  444|  4.10M|                pu1_dst[j * dst_strd] = pu1_pred[j * pred_strd];
  445|  4.10M|            }
  446|   128k|        }
  447|  28.6k|        else
  448|  28.6k|        {
  449|   946k|            for(j = 0; j < trans_size; j++)
  ------------------
  |  Branch (449:24): [True: 917k, False: 28.6k]
  ------------------
  450|   917k|            {
  451|   917k|                pu1_dst[j * dst_strd] =
  452|   917k|                                CLIP_U8(pi2_src[j * src_strd] + pu1_pred[j * pred_strd]);
  ------------------
  |  |   40|   917k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   917k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.21k, False: 916k]
  |  |  |  |  |  Branch (40:53): [True: 2.76k, False: 913k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  453|   917k|            }
  454|  28.6k|        }
  455|   157k|        pi2_src++;
  456|   157k|        pu1_dst++;
  457|   157k|        pu1_pred++;
  458|   157k|        zero_cols = zero_cols >> 1;
  459|   157k|    }
  460|  4.91k|}

ihevc_sao_band_offset_luma:
   81|  42.5k|{
   82|  42.5k|    WORD32 band_shift;
   83|  42.5k|    WORD32 band_table[NUM_BAND_TABLE];
   84|  42.5k|    WORD32 i;
   85|  42.5k|    WORD32 row, col;
   86|       |
   87|       |    /* Updating left and top and top-left */
   88|  1.35M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (88:18): [True: 1.31M, False: 42.5k]
  ------------------
   89|  1.31M|    {
   90|  1.31M|        pu1_src_left[row] = pu1_src[row * src_strd + (wd - 1)];
   91|  1.31M|    }
   92|  42.5k|    pu1_src_top_left[0] = pu1_src_top[wd - 1];
   93|  1.38M|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (93:18): [True: 1.34M, False: 42.5k]
  ------------------
   94|  1.34M|    {
   95|  1.34M|        pu1_src_top[col] = pu1_src[(ht - 1) * src_strd + col];
   96|  1.34M|    }
   97|       |
   98|  42.5k|    band_shift = BIT_DEPTH_LUMA - 5;
  ------------------
  |  |  270|  42.5k|#define BIT_DEPTH_LUMA      BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  42.5k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
   99|  1.40M|    for(i = 0; i < NUM_BAND_TABLE; i++)
  ------------------
  |  |   56|  1.40M|#define NUM_BAND_TABLE  32
  ------------------
  |  Branch (99:16): [True: 1.36M, False: 42.5k]
  ------------------
  100|  1.36M|    {
  101|  1.36M|        band_table[i] = 0;
  102|  1.36M|    }
  103|   212k|    for(i = 0; i < 4; i++)
  ------------------
  |  Branch (103:16): [True: 170k, False: 42.5k]
  ------------------
  104|   170k|    {
  105|   170k|        band_table[(i + sao_band_pos) & 31] = i + 1;
  106|   170k|    }
  107|       |
  108|  1.34M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (108:18): [True: 1.30M, False: 42.5k]
  ------------------
  109|  1.30M|    {
  110|  43.2M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (110:22): [True: 41.9M, False: 1.30M]
  ------------------
  111|  41.9M|        {
  112|  41.9M|            WORD32 band_idx;
  113|       |
  114|  41.9M|            band_idx = band_table[pu1_src[col] >> band_shift];
  115|  41.9M|            pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[band_idx], 0, (1 << (band_shift + 5)) - 1);
  ------------------
  |  |   40|  41.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 28.8k, False: 41.9M]
  |  |  |  Branch (40:53): [True: 111k, False: 41.8M]
  |  |  ------------------
  ------------------
  116|  41.9M|        }
  117|  1.30M|        pu1_src += src_strd;
  118|  1.30M|    }
  119|  42.5k|}
ihevc_sao_band_offset_chroma:
  135|  30.7k|{
  136|  30.7k|    WORD32 band_shift;
  137|  30.7k|    WORD32 band_table_u[NUM_BAND_TABLE];
  138|  30.7k|    WORD32 band_table_v[NUM_BAND_TABLE];
  139|  30.7k|    WORD32 i;
  140|  30.7k|    WORD32 row, col;
  141|       |
  142|       |    /* Updating left and top and top-left */
  143|   504k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (143:18): [True: 473k, False: 30.7k]
  ------------------
  144|   473k|    {
  145|   473k|        pu1_src_left[2 * row] = pu1_src[row * src_strd + (wd - 2)];
  146|   473k|        pu1_src_left[2 * row + 1] = pu1_src[row * src_strd + (wd - 1)];
  147|   473k|    }
  148|  30.7k|    pu1_src_top_left[0] = pu1_src_top[wd - 2];
  149|  30.7k|    pu1_src_top_left[1] = pu1_src_top[wd - 1];
  150|   996k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (150:18): [True: 965k, False: 30.7k]
  ------------------
  151|   965k|    {
  152|   965k|        pu1_src_top[col] = pu1_src[(ht - 1) * src_strd + col];
  153|   965k|    }
  154|       |
  155|       |
  156|  30.7k|    band_shift = BIT_DEPTH_CHROMA - 5;
  ------------------
  |  |  271|  30.7k|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  30.7k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  157|  1.01M|    for(i = 0; i < NUM_BAND_TABLE; i++)
  ------------------
  |  |   56|  1.01M|#define NUM_BAND_TABLE  32
  ------------------
  |  Branch (157:16): [True: 984k, False: 30.7k]
  ------------------
  158|   984k|    {
  159|   984k|        band_table_u[i] = 0;
  160|   984k|        band_table_v[i] = 0;
  161|   984k|    }
  162|   153k|    for(i = 0; i < 4; i++)
  ------------------
  |  Branch (162:16): [True: 123k, False: 30.7k]
  ------------------
  163|   123k|    {
  164|   123k|        band_table_u[(i + sao_band_pos_u) & 31] = i + 1;
  165|   123k|        band_table_v[(i + sao_band_pos_v) & 31] = i + 1;
  166|   123k|    }
  167|       |
  168|   497k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (168:18): [True: 466k, False: 30.7k]
  ------------------
  169|   466k|    {
  170|  15.4M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (170:22): [True: 14.9M, False: 466k]
  ------------------
  171|  14.9M|        {
  172|  14.9M|            WORD32 band_idx;
  173|  14.9M|            WORD8 *pi1_sao_offset;
  174|       |
  175|  14.9M|            pi1_sao_offset = (0 == col % 2) ? pi1_sao_offset_u : pi1_sao_offset_v;
  ------------------
  |  Branch (175:30): [True: 7.46M, False: 7.46M]
  ------------------
  176|  14.9M|            band_idx = (0 == col % 2) ? band_table_u[pu1_src[col] >> band_shift] : band_table_v[pu1_src[col] >> band_shift];
  ------------------
  |  Branch (176:24): [True: 7.46M, False: 7.46M]
  ------------------
  177|  14.9M|            pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[band_idx], 0, (1 << (band_shift + 5)) - 1);
  ------------------
  |  |   40|  14.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 8.80k, False: 14.9M]
  |  |  |  Branch (40:53): [True: 19.6k, False: 14.9M]
  |  |  ------------------
  ------------------
  178|  14.9M|        }
  179|   466k|        pu1_src += src_strd;
  180|   466k|    }
  181|  30.7k|}
ihevc_sao_edge_offset_class0:
  197|  8.74k|{
  198|  8.74k|    WORD32 row, col;
  199|  8.74k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  200|  8.74k|    UWORD8 au1_src_left_tmp[MAX_CTB_SIZE];
  201|  8.74k|    WORD8 u1_sign_left, u1_sign_right;
  202|  8.74k|    WORD32 bit_depth;
  203|  8.74k|    UNUSED(pu1_src_top_right);
  ------------------
  |  |   38|  8.74k|#define UNUSED(x) ((void)(x))
  ------------------
  204|  8.74k|    UNUSED(pu1_src_bot_left);
  ------------------
  |  |   38|  8.74k|#define UNUSED(x) ((void)(x))
  ------------------
  205|  8.74k|    bit_depth = BIT_DEPTH_LUMA;
  ------------------
  |  |  270|  8.74k|#define BIT_DEPTH_LUMA      BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  8.74k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  206|       |
  207|       |    /* Initialize the mask values */
  208|  8.74k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  8.74k|#define MAX_CTB_SIZE        64
  ------------------
  209|       |
  210|       |    /* Update top and top-left arrays */
  211|  8.74k|    *pu1_src_top_left = pu1_src_top[wd - 1];
  212|   284k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (212:18): [True: 275k, False: 8.74k]
  ------------------
  213|   275k|    {
  214|   275k|        au1_src_left_tmp[row] = pu1_src[row * src_strd + wd - 1];
  215|   275k|    }
  216|   288k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (216:18): [True: 279k, False: 8.74k]
  ------------------
  217|   279k|    {
  218|   279k|        pu1_src_top[col] = pu1_src[(ht - 1) * src_strd + col];
  219|   279k|    }
  220|       |
  221|       |    /* Update masks based on the availability flags */
  222|  8.74k|    if(0 == pu1_avail[0])
  ------------------
  |  Branch (222:8): [True: 678, False: 8.07k]
  ------------------
  223|    678|    {
  224|    678|        au1_mask[0] = 0;
  225|    678|    }
  226|  8.74k|    if(0 == pu1_avail[1])
  ------------------
  |  Branch (226:8): [True: 387, False: 8.36k]
  ------------------
  227|    387|    {
  228|    387|        au1_mask[wd - 1] = 0;
  229|    387|    }
  230|       |
  231|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
  232|  8.74k|    {
  233|   281k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (233:22): [True: 272k, False: 8.74k]
  ------------------
  234|   272k|        {
  235|   272k|            u1_sign_left = SIGN(pu1_src[0] - pu1_src_left[row]);
  ------------------
  |  |   44|   272k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 200k, False: 72.3k]
  |  |  |  Branch (44:34): [True: 84.9k, False: 115k]
  |  |  ------------------
  ------------------
  236|  9.06M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (236:26): [True: 8.79M, False: 272k]
  ------------------
  237|  8.79M|            {
  238|  8.79M|                WORD32 edge_idx;
  239|       |
  240|  8.79M|                u1_sign_right = SIGN(pu1_src[col] - pu1_src[col + 1]);
  ------------------
  |  |   44|  8.79M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 6.76M, False: 2.03M]
  |  |  |  Branch (44:34): [True: 2.08M, False: 4.67M]
  |  |  ------------------
  ------------------
  241|  8.79M|                edge_idx = 2 + u1_sign_left + u1_sign_right;
  242|  8.79M|                u1_sign_left = -u1_sign_right;
  243|       |
  244|  8.79M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col];
  245|       |
  246|  8.79M|                if(0 != edge_idx)
  ------------------
  |  Branch (246:20): [True: 2.20M, False: 6.58M]
  ------------------
  247|  2.20M|                {
  248|  2.20M|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  2.20M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.01k, False: 2.20M]
  |  |  |  Branch (40:53): [True: 1.11k, False: 2.20M]
  |  |  ------------------
  ------------------
  249|  2.20M|                }
  250|  8.79M|            }
  251|       |
  252|   272k|            pu1_src += src_strd;
  253|   272k|        }
  254|  8.74k|    }
  255|       |
  256|       |    /* Update left array */
  257|   284k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (257:18): [True: 275k, False: 8.74k]
  ------------------
  258|   275k|    {
  259|   275k|        pu1_src_left[row] = au1_src_left_tmp[row];
  260|   275k|    }
  261|       |
  262|  8.74k|}
ihevc_sao_edge_offset_class0_chroma:
  280|  6.82k|{
  281|  6.82k|    WORD32 row, col;
  282|  6.82k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  283|  6.82k|    UWORD8 au1_src_left_tmp[2 * MAX_CTB_SIZE];
  284|  6.82k|    WORD8 u1_sign_left_u, u1_sign_right_u;
  285|  6.82k|    WORD8 u1_sign_left_v, u1_sign_right_v;
  286|  6.82k|    WORD32 bit_depth;
  287|  6.82k|    UNUSED(pu1_src_top_right);
  ------------------
  |  |   38|  6.82k|#define UNUSED(x) ((void)(x))
  ------------------
  288|  6.82k|    UNUSED(pu1_src_bot_left);
  ------------------
  |  |   38|  6.82k|#define UNUSED(x) ((void)(x))
  ------------------
  289|  6.82k|    bit_depth = BIT_DEPTH_CHROMA;
  ------------------
  |  |  271|  6.82k|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  6.82k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  290|       |
  291|       |    /* Initialize the mask values */
  292|  6.82k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  6.82k|#define MAX_CTB_SIZE        64
  ------------------
  293|       |
  294|       |    /* Update left, top and top-left arrays */
  295|  6.82k|    pu1_src_top_left[0] = pu1_src_top[wd - 2];
  296|  6.82k|    pu1_src_top_left[1] = pu1_src_top[wd - 1];
  297|   111k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (297:18): [True: 104k, False: 6.82k]
  ------------------
  298|   104k|    {
  299|   104k|        au1_src_left_tmp[2 * row] = pu1_src[row * src_strd + wd - 2];
  300|   104k|        au1_src_left_tmp[2 * row + 1] = pu1_src[row * src_strd + wd - 1];
  301|   104k|    }
  302|   229k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (302:18): [True: 222k, False: 6.82k]
  ------------------
  303|   222k|    {
  304|   222k|        pu1_src_top[col] = pu1_src[(ht - 1) * src_strd + col];
  305|   222k|    }
  306|       |
  307|       |    /* Update masks based on the availability flags */
  308|  6.82k|    if(0 == pu1_avail[0])
  ------------------
  |  Branch (308:8): [True: 727, False: 6.10k]
  ------------------
  309|    727|    {
  310|    727|        au1_mask[0] = 0;
  311|    727|    }
  312|  6.82k|    if(0 == pu1_avail[1])
  ------------------
  |  Branch (312:8): [True: 569, False: 6.26k]
  ------------------
  313|    569|    {
  314|    569|        au1_mask[(wd - 1) >> 1] = 0;
  315|    569|    }
  316|       |
  317|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
  318|  6.82k|    {
  319|   111k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (319:22): [True: 104k, False: 6.82k]
  ------------------
  320|   104k|        {
  321|   104k|            u1_sign_left_u = SIGN(pu1_src[0] - pu1_src_left[2 * row]);
  ------------------
  |  |   44|   104k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 82.5k, False: 22.1k]
  |  |  |  Branch (44:34): [True: 17.6k, False: 64.8k]
  |  |  ------------------
  ------------------
  322|   104k|            u1_sign_left_v = SIGN(pu1_src[1] - pu1_src_left[2 * row + 1]);
  ------------------
  |  |   44|   104k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 86.7k, False: 17.8k]
  |  |  |  Branch (44:34): [True: 18.2k, False: 68.5k]
  |  |  ------------------
  ------------------
  323|  3.60M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (323:26): [True: 3.50M, False: 104k]
  ------------------
  324|  3.50M|            {
  325|  3.50M|                WORD32 edge_idx;
  326|  3.50M|                WORD8 *pi1_sao_offset;
  327|       |
  328|  3.50M|                if(0 == col % 2)
  ------------------
  |  Branch (328:20): [True: 1.75M, False: 1.75M]
  ------------------
  329|  1.75M|                {
  330|  1.75M|                    pi1_sao_offset = pi1_sao_offset_u;
  331|  1.75M|                    u1_sign_right_u = SIGN(pu1_src[col] - pu1_src[col + 2]);
  ------------------
  |  |   44|  1.75M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 1.52M, False: 226k]
  |  |  |  Branch (44:34): [True: 211k, False: 1.31M]
  |  |  ------------------
  ------------------
  332|  1.75M|                    edge_idx = 2 + u1_sign_left_u + u1_sign_right_u;
  333|  1.75M|                    u1_sign_left_u = -u1_sign_right_u;
  334|  1.75M|                }
  335|  1.75M|                else
  336|  1.75M|                {
  337|  1.75M|                    pi1_sao_offset = pi1_sao_offset_v;
  338|  1.75M|                    u1_sign_right_v = SIGN(pu1_src[col] - pu1_src[col + 2]);
  ------------------
  |  |   44|  1.75M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 1.55M, False: 199k]
  |  |  |  Branch (44:34): [True: 196k, False: 1.35M]
  |  |  ------------------
  ------------------
  339|  1.75M|                    edge_idx = 2 + u1_sign_left_v + u1_sign_right_v;
  340|  1.75M|                    u1_sign_left_v = -u1_sign_right_v;
  341|  1.75M|                }
  342|       |
  343|  3.50M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col >> 1];
  344|       |
  345|  3.50M|                if(0 != edge_idx)
  ------------------
  |  Branch (345:20): [True: 593k, False: 2.90M]
  ------------------
  346|   593k|                {
  347|   593k|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|   593k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 142, False: 593k]
  |  |  |  Branch (40:53): [True: 48, False: 593k]
  |  |  ------------------
  ------------------
  348|   593k|                }
  349|  3.50M|            }
  350|       |
  351|   104k|            pu1_src += src_strd;
  352|   104k|        }
  353|  6.82k|    }
  354|       |
  355|   216k|    for(row = 0; row < 2 * ht; row++)
  ------------------
  |  Branch (355:18): [True: 209k, False: 6.82k]
  ------------------
  356|   209k|    {
  357|   209k|        pu1_src_left[row] = au1_src_left_tmp[row];
  358|   209k|    }
  359|       |
  360|  6.82k|}
ihevc_sao_edge_offset_class1:
  376|  7.65k|{
  377|  7.65k|    WORD32 row, col;
  378|  7.65k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  379|  7.65k|    UWORD8 au1_src_top_tmp[MAX_CTB_SIZE];
  380|  7.65k|    WORD8 au1_sign_up[MAX_CTB_SIZE];
  381|  7.65k|    WORD8 u1_sign_down;
  382|  7.65k|    WORD32 bit_depth;
  383|  7.65k|    UNUSED(pu1_src_top_right);
  ------------------
  |  |   38|  7.65k|#define UNUSED(x) ((void)(x))
  ------------------
  384|  7.65k|    UNUSED(pu1_src_bot_left);
  ------------------
  |  |   38|  7.65k|#define UNUSED(x) ((void)(x))
  ------------------
  385|       |
  386|  7.65k|    bit_depth = BIT_DEPTH_LUMA;
  ------------------
  |  |  270|  7.65k|#define BIT_DEPTH_LUMA      BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  7.65k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  387|       |
  388|       |    /* Initialize the mask values */
  389|  7.65k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  7.65k|#define MAX_CTB_SIZE        64
  ------------------
  390|       |
  391|       |    /* Update left, top and top-left arrays */
  392|  7.65k|    *pu1_src_top_left = pu1_src_top[wd - 1];
  393|   247k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (393:18): [True: 239k, False: 7.65k]
  ------------------
  394|   239k|    {
  395|   239k|        pu1_src_left[row] = pu1_src[row * src_strd + wd - 1];
  396|   239k|    }
  397|   250k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (397:18): [True: 243k, False: 7.65k]
  ------------------
  398|   243k|    {
  399|   243k|        au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col];
  400|   243k|    }
  401|       |
  402|       |    /* Update height and source pointers based on the availability flags */
  403|  7.65k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (403:8): [True: 575, False: 7.08k]
  ------------------
  404|    575|    {
  405|    575|        pu1_src += src_strd;
  406|    575|        ht--;
  407|  17.4k|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (407:22): [True: 16.8k, False: 575]
  ------------------
  408|  16.8k|        {
  409|  16.8k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src[col - src_strd]);
  ------------------
  |  |   44|  16.8k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 13.6k, False: 3.20k]
  |  |  |  Branch (44:34): [True: 5.81k, False: 7.85k]
  |  |  ------------------
  ------------------
  410|  16.8k|        }
  411|    575|    }
  412|  7.08k|    else
  413|  7.08k|    {
  414|   233k|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (414:22): [True: 226k, False: 7.08k]
  ------------------
  415|   226k|        {
  416|   226k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src_top[col]);
  ------------------
  |  |   44|   226k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 166k, False: 60.2k]
  |  |  |  Branch (44:34): [True: 54.7k, False: 111k]
  |  |  ------------------
  ------------------
  417|   226k|        }
  418|  7.08k|    }
  419|  7.65k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (419:8): [True: 864, False: 6.79k]
  ------------------
  420|    864|    {
  421|    864|        ht--;
  422|    864|    }
  423|       |
  424|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
  425|  7.65k|    {
  426|   243k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (426:22): [True: 235k, False: 7.65k]
  ------------------
  427|   235k|        {
  428|  7.72M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (428:26): [True: 7.48M, False: 235k]
  ------------------
  429|  7.48M|            {
  430|  7.48M|                WORD32 edge_idx;
  431|       |
  432|  7.48M|                u1_sign_down = SIGN(pu1_src[col] - pu1_src[col + src_strd]);
  ------------------
  |  |   44|  7.48M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 6.04M, False: 1.44M]
  |  |  |  Branch (44:34): [True: 1.51M, False: 4.52M]
  |  |  ------------------
  ------------------
  433|  7.48M|                edge_idx = 2 + au1_sign_up[col] + u1_sign_down;
  434|  7.48M|                au1_sign_up[col] = -u1_sign_down;
  435|       |
  436|  7.48M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col];
  437|       |
  438|  7.48M|                if(0 != edge_idx)
  ------------------
  |  Branch (438:20): [True: 1.62M, False: 5.85M]
  ------------------
  439|  1.62M|                {
  440|  1.62M|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.62M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.86k, False: 1.62M]
  |  |  |  Branch (40:53): [True: 1.39k, False: 1.62M]
  |  |  ------------------
  ------------------
  441|  1.62M|                }
  442|  7.48M|            }
  443|       |
  444|   235k|            pu1_src += src_strd;
  445|   235k|        }
  446|  7.65k|    }
  447|       |
  448|   250k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (448:18): [True: 242k, False: 7.65k]
  ------------------
  449|   242k|    {
  450|   242k|        pu1_src_top[col] = au1_src_top_tmp[col];
  451|   242k|    }
  452|       |
  453|  7.65k|}
ihevc_sao_edge_offset_class1_chroma:
  470|  7.50k|{
  471|  7.50k|    WORD32 row, col;
  472|  7.50k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  473|  7.50k|    UWORD8 au1_src_top_tmp[MAX_CTB_SIZE];
  474|  7.50k|    WORD8 au1_sign_up[MAX_CTB_SIZE];
  475|  7.50k|    WORD8 u1_sign_down;
  476|  7.50k|    WORD32 bit_depth;
  477|  7.50k|    UNUSED(pu1_src_top_right);
  ------------------
  |  |   38|  7.50k|#define UNUSED(x) ((void)(x))
  ------------------
  478|  7.50k|    UNUSED(pu1_src_bot_left);
  ------------------
  |  |   38|  7.50k|#define UNUSED(x) ((void)(x))
  ------------------
  479|       |
  480|  7.50k|    bit_depth = BIT_DEPTH_CHROMA;
  ------------------
  |  |  271|  7.50k|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  7.50k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  481|       |
  482|       |    /* Initialize the mask values */
  483|  7.50k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  7.50k|#define MAX_CTB_SIZE        64
  ------------------
  484|       |
  485|       |    /* Update left, top and top-left arrays */
  486|  7.50k|    pu1_src_top_left[0] = pu1_src_top[wd - 2];
  487|  7.50k|    pu1_src_top_left[1] = pu1_src_top[wd - 1];
  488|   123k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (488:18): [True: 115k, False: 7.50k]
  ------------------
  489|   115k|    {
  490|   115k|        pu1_src_left[2 * row] = pu1_src[row * src_strd + wd - 2];
  491|   115k|        pu1_src_left[2 * row + 1] = pu1_src[row * src_strd + wd - 1];
  492|   115k|    }
  493|   252k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (493:18): [True: 244k, False: 7.50k]
  ------------------
  494|   244k|    {
  495|   244k|        au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col];
  496|   244k|    }
  497|       |
  498|       |    /* Update height and source pointers based on the availability flags */
  499|  7.50k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (499:8): [True: 1.18k, False: 6.32k]
  ------------------
  500|  1.18k|    {
  501|  1.18k|        pu1_src += src_strd;
  502|  1.18k|        ht--;
  503|  40.9k|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (503:22): [True: 39.8k, False: 1.18k]
  ------------------
  504|  39.8k|        {
  505|  39.8k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src[col - src_strd]);
  ------------------
  |  |   44|  39.8k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 38.4k, False: 1.36k]
  |  |  |  Branch (44:34): [True: 1.17k, False: 37.2k]
  |  |  ------------------
  ------------------
  506|  39.8k|        }
  507|  1.18k|    }
  508|  6.32k|    else
  509|  6.32k|    {
  510|   211k|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (510:22): [True: 205k, False: 6.32k]
  ------------------
  511|   205k|        {
  512|   205k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src_top[col]);
  ------------------
  |  |   44|   205k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 166k, False: 38.9k]
  |  |  |  Branch (44:34): [True: 27.6k, False: 138k]
  |  |  ------------------
  ------------------
  513|   205k|        }
  514|  6.32k|    }
  515|  7.50k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (515:8): [True: 208, False: 7.29k]
  ------------------
  516|    208|    {
  517|    208|        ht--;
  518|    208|    }
  519|       |
  520|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
  521|  7.50k|    {
  522|   121k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (522:22): [True: 114k, False: 7.50k]
  ------------------
  523|   114k|        {
  524|  3.90M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (524:26): [True: 3.79M, False: 114k]
  ------------------
  525|  3.79M|            {
  526|  3.79M|                WORD32 edge_idx;
  527|  3.79M|                WORD8 *pi1_sao_offset;
  528|       |
  529|  3.79M|                pi1_sao_offset = (0 == col % 2) ? pi1_sao_offset_u : pi1_sao_offset_v;
  ------------------
  |  Branch (529:34): [True: 1.89M, False: 1.89M]
  ------------------
  530|       |
  531|  3.79M|                u1_sign_down = SIGN(pu1_src[col] - pu1_src[col + src_strd]);
  ------------------
  |  |   44|  3.79M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.45M, False: 334k]
  |  |  |  Branch (44:34): [True: 370k, False: 3.08M]
  |  |  ------------------
  ------------------
  532|  3.79M|                edge_idx = 2 + au1_sign_up[col] + u1_sign_down;
  533|  3.79M|                au1_sign_up[col] = -u1_sign_down;
  534|       |
  535|  3.79M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col >> 1];
  536|       |
  537|  3.79M|                if(0 != edge_idx)
  ------------------
  |  Branch (537:20): [True: 534k, False: 3.25M]
  ------------------
  538|   534k|                {
  539|   534k|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|   534k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 74, False: 534k]
  |  |  |  Branch (40:53): [True: 59, False: 534k]
  |  |  ------------------
  ------------------
  540|   534k|                }
  541|  3.79M|            }
  542|       |
  543|   114k|            pu1_src += src_strd;
  544|   114k|        }
  545|  7.50k|    }
  546|       |
  547|   252k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (547:18): [True: 244k, False: 7.50k]
  ------------------
  548|   244k|    {
  549|   244k|        pu1_src_top[col] = au1_src_top_tmp[col];
  550|   244k|    }
  551|       |
  552|  7.50k|}
ihevc_sao_edge_offset_class2:
  568|  4.65k|{
  569|  4.65k|    WORD32 row, col;
  570|  4.65k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  571|  4.65k|    UWORD8 au1_src_left_tmp[MAX_CTB_SIZE], au1_src_top_tmp[MAX_CTB_SIZE];
  572|  4.65k|    UWORD8 u1_src_top_left_tmp;
  573|  4.65k|    WORD8 au1_sign_up[MAX_CTB_SIZE + 1], au1_sign_up_tmp[MAX_CTB_SIZE + 1];
  574|  4.65k|    WORD8 u1_sign_down;
  575|  4.65k|    WORD8 *pu1_sign_up;
  576|  4.65k|    WORD8 *pu1_sign_up_tmp;
  577|  4.65k|    UWORD8 *pu1_src_left_cpy;
  578|       |
  579|  4.65k|    WORD32 bit_depth;
  580|  4.65k|    UWORD8 u1_pos_0_0_tmp;
  581|  4.65k|    UWORD8 u1_pos_wd_ht_tmp;
  582|  4.65k|    UNUSED(pu1_src_top_right);
  ------------------
  |  |   38|  4.65k|#define UNUSED(x) ((void)(x))
  ------------------
  583|  4.65k|    UNUSED(pu1_src_bot_left);
  ------------------
  |  |   38|  4.65k|#define UNUSED(x) ((void)(x))
  ------------------
  584|       |
  585|  4.65k|    bit_depth = BIT_DEPTH_LUMA;
  ------------------
  |  |  270|  4.65k|#define BIT_DEPTH_LUMA      BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  4.65k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  586|  4.65k|    pu1_sign_up = au1_sign_up;
  587|  4.65k|    pu1_sign_up_tmp = au1_sign_up_tmp;
  588|  4.65k|    pu1_src_left_cpy = pu1_src_left;
  589|       |
  590|       |    /* Initialize the mask values */
  591|  4.65k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  4.65k|#define MAX_CTB_SIZE        64
  ------------------
  592|       |
  593|       |    /* Update left, top and top-left arrays */
  594|  4.65k|    u1_src_top_left_tmp = pu1_src_top[wd - 1];
  595|   146k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (595:18): [True: 141k, False: 4.65k]
  ------------------
  596|   141k|    {
  597|   141k|        au1_src_left_tmp[row] = pu1_src[row * src_strd + wd - 1];
  598|   141k|    }
  599|   147k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (599:18): [True: 143k, False: 4.65k]
  ------------------
  600|   143k|    {
  601|   143k|        au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col];
  602|   143k|    }
  603|       |
  604|       |
  605|       |    /* If top-left is available, process separately */
  606|  4.65k|    if(0 != pu1_avail[4])
  ------------------
  |  Branch (606:8): [True: 3.74k, False: 910]
  ------------------
  607|  3.74k|    {
  608|  3.74k|        WORD32 edge_idx;
  609|       |
  610|  3.74k|        edge_idx = 2 + SIGN(pu1_src[0] - pu1_src_top_left[0]) +
  ------------------
  |  |   44|  3.74k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 2.46k, False: 1.28k]
  |  |  |  Branch (44:34): [True: 1.00k, False: 1.46k]
  |  |  ------------------
  ------------------
  611|  3.74k|                        SIGN(pu1_src[0] - pu1_src[1 + src_strd]);
  ------------------
  |  |   44|  3.74k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 2.68k, False: 1.06k]
  |  |  |  Branch (44:34): [True: 1.00k, False: 1.67k]
  |  |  ------------------
  ------------------
  612|       |
  613|  3.74k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
  614|       |
  615|  3.74k|        if(0 != edge_idx)
  ------------------
  |  Branch (615:12): [True: 1.15k, False: 2.58k]
  ------------------
  616|  1.15k|        {
  617|  1.15k|            u1_pos_0_0_tmp = CLIP3(pu1_src[0] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.15k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.15k]
  |  |  |  Branch (40:53): [True: 0, False: 1.15k]
  |  |  ------------------
  ------------------
  618|  1.15k|        }
  619|  2.58k|        else
  620|  2.58k|        {
  621|  2.58k|            u1_pos_0_0_tmp = pu1_src[0];
  622|  2.58k|        }
  623|  3.74k|    }
  624|    910|    else
  625|    910|    {
  626|    910|        u1_pos_0_0_tmp = pu1_src[0];
  627|    910|    }
  628|       |
  629|       |    /* If bottom-right is available, process separately */
  630|  4.65k|    if(0 != pu1_avail[7])
  ------------------
  |  Branch (630:8): [True: 3.86k, False: 790]
  ------------------
  631|  3.86k|    {
  632|  3.86k|        WORD32 edge_idx;
  633|       |
  634|  3.86k|        edge_idx = 2 + SIGN(pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd - 1 - src_strd]) +
  ------------------
  |  |   44|  3.86k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 2.99k, False: 876]
  |  |  |  Branch (44:34): [True: 974, False: 2.01k]
  |  |  ------------------
  ------------------
  635|  3.86k|                        SIGN(pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd + 1 + src_strd]);
  ------------------
  |  |   44|  3.86k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 2.79k, False: 1.06k]
  |  |  |  Branch (44:34): [True: 1.32k, False: 1.46k]
  |  |  ------------------
  ------------------
  636|       |
  637|  3.86k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
  638|       |
  639|  3.86k|        if(0 != edge_idx)
  ------------------
  |  Branch (639:12): [True: 1.43k, False: 2.43k]
  ------------------
  640|  1.43k|        {
  641|  1.43k|            u1_pos_wd_ht_tmp = CLIP3(pu1_src[wd - 1 + (ht - 1) * src_strd] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.43k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.43k]
  |  |  |  Branch (40:53): [True: 1, False: 1.43k]
  |  |  ------------------
  ------------------
  642|  1.43k|        }
  643|  2.43k|        else
  644|  2.43k|        {
  645|  2.43k|            u1_pos_wd_ht_tmp = pu1_src[wd - 1 + (ht - 1) * src_strd];
  646|  2.43k|        }
  647|  3.86k|    }
  648|    790|    else
  649|    790|    {
  650|    790|        u1_pos_wd_ht_tmp = pu1_src[wd - 1 + (ht - 1) * src_strd];
  651|    790|    }
  652|       |
  653|       |    /* If Left is not available */
  654|  4.65k|    if(0 == pu1_avail[0])
  ------------------
  |  Branch (654:8): [True: 423, False: 4.23k]
  ------------------
  655|    423|    {
  656|    423|        au1_mask[0] = 0;
  657|    423|    }
  658|       |
  659|       |    /* If Top is not available */
  660|  4.65k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (660:8): [True: 546, False: 4.11k]
  ------------------
  661|    546|    {
  662|    546|        pu1_src += src_strd;
  663|    546|        ht--;
  664|    546|        pu1_src_left_cpy += 1;
  665|  14.9k|        for(col = 1; col < wd; col++)
  ------------------
  |  Branch (665:22): [True: 14.4k, False: 546]
  ------------------
  666|  14.4k|        {
  667|  14.4k|            pu1_sign_up[col] = SIGN(pu1_src[col] - pu1_src[col - 1 - src_strd]);
  ------------------
  |  |   44|  14.4k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 12.0k, False: 2.34k]
  |  |  |  Branch (44:34): [True: 2.06k, False: 10.0k]
  |  |  ------------------
  ------------------
  668|  14.4k|        }
  669|    546|    }
  670|  4.11k|    else
  671|  4.11k|    {
  672|   128k|        for(col = 1; col < wd; col++)
  ------------------
  |  Branch (672:22): [True: 124k, False: 4.11k]
  ------------------
  673|   124k|        {
  674|   124k|            pu1_sign_up[col] = SIGN(pu1_src[col] - pu1_src_top[col - 1]);
  ------------------
  |  |   44|   124k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 87.8k, False: 36.2k]
  |  |  |  Branch (44:34): [True: 31.5k, False: 56.3k]
  |  |  ------------------
  ------------------
  675|   124k|        }
  676|  4.11k|    }
  677|       |
  678|       |    /* If Right is not available */
  679|  4.65k|    if(0 == pu1_avail[1])
  ------------------
  |  Branch (679:8): [True: 276, False: 4.38k]
  ------------------
  680|    276|    {
  681|    276|        au1_mask[wd - 1] = 0;
  682|    276|    }
  683|       |
  684|       |    /* If Bottom is not available */
  685|  4.65k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (685:8): [True: 594, False: 4.06k]
  ------------------
  686|    594|    {
  687|    594|        ht--;
  688|    594|    }
  689|       |
  690|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
  691|  4.65k|    {
  692|   144k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (692:22): [True: 139k, False: 4.65k]
  ------------------
  693|   139k|        {
  694|   139k|            pu1_sign_up[0] = SIGN(pu1_src[0] - pu1_src_left_cpy[row - 1]);
  ------------------
  |  |   44|   139k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 97.6k, False: 42.2k]
  |  |  |  Branch (44:34): [True: 39.9k, False: 57.7k]
  |  |  ------------------
  ------------------
  695|  4.59M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (695:26): [True: 4.45M, False: 139k]
  ------------------
  696|  4.45M|            {
  697|  4.45M|                WORD32 edge_idx;
  698|       |
  699|  4.45M|                u1_sign_down = SIGN(pu1_src[col] - pu1_src[col + 1 + src_strd]);
  ------------------
  |  |   44|  4.45M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.40M, False: 1.05M]
  |  |  |  Branch (44:34): [True: 1.09M, False: 2.30M]
  |  |  ------------------
  ------------------
  700|  4.45M|                edge_idx = 2 + pu1_sign_up[col] + u1_sign_down;
  701|  4.45M|                pu1_sign_up_tmp[col + 1] = -u1_sign_down;
  702|       |
  703|  4.45M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col];
  704|       |
  705|  4.45M|                if(0 != edge_idx)
  ------------------
  |  Branch (705:20): [True: 1.23M, False: 3.22M]
  ------------------
  706|  1.23M|                {
  707|  1.23M|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.23M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 2.22k, False: 1.23M]
  |  |  |  Branch (40:53): [True: 1.50k, False: 1.23M]
  |  |  ------------------
  ------------------
  708|  1.23M|                }
  709|  4.45M|            }
  710|       |
  711|       |            /* Swapping pu1_sign_up_tmp and pu1_sign_up */
  712|   139k|            {
  713|   139k|                WORD8 *pu1_swap_tmp = pu1_sign_up;
  714|   139k|                pu1_sign_up = pu1_sign_up_tmp;
  715|   139k|                pu1_sign_up_tmp = pu1_swap_tmp;
  716|   139k|            }
  717|       |
  718|   139k|            pu1_src += src_strd;
  719|   139k|        }
  720|       |
  721|  4.65k|        pu1_src[-(pu1_avail[2] ? ht : ht + 1) * src_strd] = u1_pos_0_0_tmp;
  ------------------
  |  Branch (721:19): [True: 4.11k, False: 543]
  ------------------
  722|  4.65k|        pu1_src[(pu1_avail[3] ? wd - 1 - src_strd : wd - 1)] = u1_pos_wd_ht_tmp;
  ------------------
  |  Branch (722:18): [True: 4.06k, False: 591]
  ------------------
  723|  4.65k|    }
  724|       |
  725|  4.65k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (725:8): [True: 546, False: 4.11k]
  ------------------
  726|    546|        ht++;
  727|  4.65k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (727:8): [True: 594, False: 4.06k]
  ------------------
  728|    594|        ht++;
  729|  4.65k|    *pu1_src_top_left = u1_src_top_left_tmp;
  730|   146k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (730:18): [True: 141k, False: 4.65k]
  ------------------
  731|   141k|    {
  732|   141k|        pu1_src_left[row] = au1_src_left_tmp[row];
  733|   141k|    }
  734|   147k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (734:18): [True: 143k, False: 4.65k]
  ------------------
  735|   143k|    {
  736|   143k|        pu1_src_top[col] = au1_src_top_tmp[col];
  737|   143k|    }
  738|       |
  739|  4.65k|}
ihevc_sao_edge_offset_class2_chroma:
  757|  7.36k|{
  758|  7.36k|    WORD32 row, col;
  759|  7.36k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  760|  7.36k|    UWORD8 au1_src_left_tmp[2 * MAX_CTB_SIZE], au1_src_top_tmp[MAX_CTB_SIZE];
  761|  7.36k|    UWORD8 au1_src_top_left_tmp[2];
  762|  7.36k|    WORD8 au1_sign_up[MAX_CTB_SIZE + 2], au1_sign_up_tmp[MAX_CTB_SIZE + 2];
  763|  7.36k|    WORD8 u1_sign_down;
  764|  7.36k|    WORD8 *pu1_sign_up;
  765|  7.36k|    WORD8 *pu1_sign_up_tmp;
  766|  7.36k|    UWORD8 *pu1_src_left_cpy;
  767|       |
  768|  7.36k|    WORD32 bit_depth;
  769|       |
  770|  7.36k|    UWORD8 u1_pos_0_0_tmp_u;
  771|  7.36k|    UWORD8 u1_pos_0_0_tmp_v;
  772|  7.36k|    UWORD8 u1_pos_wd_ht_tmp_u;
  773|  7.36k|    UWORD8 u1_pos_wd_ht_tmp_v;
  774|  7.36k|    UNUSED(pu1_src_top_right);
  ------------------
  |  |   38|  7.36k|#define UNUSED(x) ((void)(x))
  ------------------
  775|  7.36k|    UNUSED(pu1_src_bot_left);
  ------------------
  |  |   38|  7.36k|#define UNUSED(x) ((void)(x))
  ------------------
  776|       |
  777|       |
  778|  7.36k|    bit_depth = BIT_DEPTH_CHROMA;
  ------------------
  |  |  271|  7.36k|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  7.36k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  779|  7.36k|    pu1_sign_up = au1_sign_up;
  780|  7.36k|    pu1_sign_up_tmp = au1_sign_up_tmp;
  781|  7.36k|    pu1_src_left_cpy = pu1_src_left;
  782|       |
  783|       |    /* Initialize the mask values */
  784|  7.36k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  7.36k|#define MAX_CTB_SIZE        64
  ------------------
  785|       |
  786|       |    /* Update left, top and top-left arrays */
  787|  7.36k|    au1_src_top_left_tmp[0] = pu1_src_top[wd - 2];
  788|  7.36k|    au1_src_top_left_tmp[1] = pu1_src_top[wd - 1];
  789|   122k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (789:18): [True: 114k, False: 7.36k]
  ------------------
  790|   114k|    {
  791|   114k|        au1_src_left_tmp[2 * row] = pu1_src[row * src_strd + wd - 2];
  792|   114k|        au1_src_left_tmp[2 * row + 1] = pu1_src[row * src_strd + wd - 1];
  793|   114k|    }
  794|   245k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (794:18): [True: 238k, False: 7.36k]
  ------------------
  795|   238k|    {
  796|   238k|        au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col];
  797|   238k|    }
  798|       |
  799|       |
  800|       |    /* If top-left is available, process separately */
  801|  7.36k|    if(0 != pu1_avail[4])
  ------------------
  |  Branch (801:8): [True: 5.39k, False: 1.96k]
  ------------------
  802|  5.39k|    {
  803|  5.39k|        WORD32 edge_idx;
  804|       |
  805|       |        /* U */
  806|  5.39k|        edge_idx = 2 + SIGN(pu1_src[0] - pu1_src_top_left[0]) +
  ------------------
  |  |   44|  5.39k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 4.05k, False: 1.33k]
  |  |  |  Branch (44:34): [True: 940, False: 3.11k]
  |  |  ------------------
  ------------------
  807|  5.39k|                        SIGN(pu1_src[0] - pu1_src[2 + src_strd]);
  ------------------
  |  |   44|  5.39k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 4.45k, False: 944]
  |  |  |  Branch (44:34): [True: 934, False: 3.51k]
  |  |  ------------------
  ------------------
  808|       |
  809|  5.39k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
  810|       |
  811|  5.39k|        if(0 != edge_idx)
  ------------------
  |  Branch (811:12): [True: 1.46k, False: 3.93k]
  ------------------
  812|  1.46k|        {
  813|  1.46k|            u1_pos_0_0_tmp_u = CLIP3(pu1_src[0] + pi1_sao_offset_u[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.46k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 3, False: 1.45k]
  |  |  |  Branch (40:53): [True: 0, False: 1.45k]
  |  |  ------------------
  ------------------
  814|  1.46k|        }
  815|  3.93k|        else
  816|  3.93k|        {
  817|  3.93k|            u1_pos_0_0_tmp_u = pu1_src[0];
  818|  3.93k|        }
  819|       |
  820|       |        /* V */
  821|  5.39k|        edge_idx = 2 + SIGN(pu1_src[1] - pu1_src_top_left[1]) +
  ------------------
  |  |   44|  5.39k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 4.27k, False: 1.11k]
  |  |  |  Branch (44:34): [True: 1.07k, False: 3.20k]
  |  |  ------------------
  ------------------
  822|  5.39k|                        SIGN(pu1_src[1] - pu1_src[1 + 2 + src_strd]);
  ------------------
  |  |   44|  5.39k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 4.55k, False: 845]
  |  |  |  Branch (44:34): [True: 1.04k, False: 3.50k]
  |  |  ------------------
  ------------------
  823|       |
  824|  5.39k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
  825|       |
  826|  5.39k|        if(0 != edge_idx)
  ------------------
  |  Branch (826:12): [True: 1.38k, False: 4.00k]
  ------------------
  827|  1.38k|        {
  828|  1.38k|            u1_pos_0_0_tmp_v = CLIP3(pu1_src[1] + pi1_sao_offset_v[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.38k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.38k]
  |  |  |  Branch (40:53): [True: 1, False: 1.38k]
  |  |  ------------------
  ------------------
  829|  1.38k|        }
  830|  4.00k|        else
  831|  4.00k|        {
  832|  4.00k|            u1_pos_0_0_tmp_v = pu1_src[1];
  833|  4.00k|        }
  834|  5.39k|    }
  835|  1.96k|    else
  836|  1.96k|    {
  837|  1.96k|        u1_pos_0_0_tmp_u = pu1_src[0];
  838|  1.96k|        u1_pos_0_0_tmp_v = pu1_src[1];
  839|  1.96k|    }
  840|       |
  841|       |    /* If bottom-right is available, process separately */
  842|  7.36k|    if(0 != pu1_avail[7])
  ------------------
  |  Branch (842:8): [True: 6.42k, False: 935]
  ------------------
  843|  6.42k|    {
  844|  6.42k|        WORD32 edge_idx;
  845|       |
  846|       |        /* U */
  847|  6.42k|        edge_idx = 2 + SIGN(pu1_src[wd - 2 + (ht - 1) * src_strd] - pu1_src[wd - 2 + (ht - 1) * src_strd - 2 - src_strd]) +
  ------------------
  |  |   44|  6.42k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 5.03k, False: 1.39k]
  |  |  |  Branch (44:34): [True: 987, False: 4.04k]
  |  |  ------------------
  ------------------
  848|  6.42k|                        SIGN(pu1_src[wd - 2 + (ht - 1) * src_strd] - pu1_src[wd - 2 + (ht - 1) * src_strd + 2 + src_strd]);
  ------------------
  |  |   44|  6.42k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 5.17k, False: 1.25k]
  |  |  |  Branch (44:34): [True: 1.62k, False: 3.54k]
  |  |  ------------------
  ------------------
  849|       |
  850|  6.42k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
  851|       |
  852|  6.42k|        if(0 != edge_idx)
  ------------------
  |  Branch (852:12): [True: 1.46k, False: 4.96k]
  ------------------
  853|  1.46k|        {
  854|  1.46k|            u1_pos_wd_ht_tmp_u = CLIP3(pu1_src[wd - 2 + (ht - 1) * src_strd] + pi1_sao_offset_u[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.46k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 3, False: 1.46k]
  |  |  |  Branch (40:53): [True: 0, False: 1.46k]
  |  |  ------------------
  ------------------
  855|  1.46k|        }
  856|  4.96k|        else
  857|  4.96k|        {
  858|  4.96k|            u1_pos_wd_ht_tmp_u = pu1_src[wd - 2 + (ht - 1) * src_strd];
  859|  4.96k|        }
  860|       |
  861|       |        /* V */
  862|  6.42k|        edge_idx = 2 + SIGN(pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd - 2 - src_strd]) +
  ------------------
  |  |   44|  6.42k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 5.16k, False: 1.25k]
  |  |  |  Branch (44:34): [True: 1.02k, False: 4.14k]
  |  |  ------------------
  ------------------
  863|  6.42k|                        SIGN(pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd + 2 + src_strd]);
  ------------------
  |  |   44|  6.42k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 5.26k, False: 1.15k]
  |  |  |  Branch (44:34): [True: 1.60k, False: 3.66k]
  |  |  ------------------
  ------------------
  864|       |
  865|  6.42k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
  866|       |
  867|  6.42k|        if(0 != edge_idx)
  ------------------
  |  Branch (867:12): [True: 1.62k, False: 4.80k]
  ------------------
  868|  1.62k|        {
  869|  1.62k|            u1_pos_wd_ht_tmp_v = CLIP3(pu1_src[wd - 1 + (ht - 1) * src_strd] + pi1_sao_offset_v[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.62k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.62k]
  |  |  |  Branch (40:53): [True: 1, False: 1.61k]
  |  |  ------------------
  ------------------
  870|  1.62k|        }
  871|  4.80k|        else
  872|  4.80k|        {
  873|  4.80k|            u1_pos_wd_ht_tmp_v = pu1_src[wd - 1 + (ht - 1) * src_strd];
  874|  4.80k|        }
  875|  6.42k|    }
  876|    935|    else
  877|    935|    {
  878|    935|        u1_pos_wd_ht_tmp_u = pu1_src[wd - 2 + (ht - 1) * src_strd];
  879|    935|        u1_pos_wd_ht_tmp_v = pu1_src[wd - 1 + (ht - 1) * src_strd];
  880|    935|    }
  881|       |
  882|       |    /* If Left is not available */
  883|  7.36k|    if(0 == pu1_avail[0])
  ------------------
  |  Branch (883:8): [True: 1.11k, False: 6.24k]
  ------------------
  884|  1.11k|    {
  885|  1.11k|        au1_mask[0] = 0;
  886|  1.11k|    }
  887|       |
  888|       |    /* If Top is not available */
  889|  7.36k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (889:8): [True: 1.02k, False: 6.33k]
  ------------------
  890|  1.02k|    {
  891|  1.02k|        pu1_src += src_strd;
  892|  1.02k|        pu1_src_left_cpy += 2;
  893|  1.02k|        ht--;
  894|  30.9k|        for(col = 2; col < wd; col++)
  ------------------
  |  Branch (894:22): [True: 29.9k, False: 1.02k]
  ------------------
  895|  29.9k|        {
  896|  29.9k|            pu1_sign_up[col] = SIGN(pu1_src[col] - pu1_src[col - 2 - src_strd]);
  ------------------
  |  |   44|  29.9k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 28.7k, False: 1.21k]
  |  |  |  Branch (44:34): [True: 1.68k, False: 27.0k]
  |  |  ------------------
  ------------------
  897|  29.9k|        }
  898|  1.02k|    }
  899|  6.33k|    else
  900|  6.33k|    {
  901|   200k|        for(col = 2; col < wd; col++)
  ------------------
  |  Branch (901:22): [True: 193k, False: 6.33k]
  ------------------
  902|   193k|        {
  903|   193k|            pu1_sign_up[col] = SIGN(pu1_src[col] - pu1_src_top[col - 2]);
  ------------------
  |  |   44|   193k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 159k, False: 34.6k]
  |  |  |  Branch (44:34): [True: 34.8k, False: 124k]
  |  |  ------------------
  ------------------
  904|   193k|        }
  905|  6.33k|    }
  906|       |
  907|       |    /* If Right is not available */
  908|  7.36k|    if(0 == pu1_avail[1])
  ------------------
  |  Branch (908:8): [True: 445, False: 6.91k]
  ------------------
  909|    445|    {
  910|    445|        au1_mask[(wd - 1) >> 1] = 0;
  911|    445|    }
  912|       |
  913|       |    /* If Bottom is not available */
  914|  7.36k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (914:8): [True: 501, False: 6.85k]
  ------------------
  915|    501|    {
  916|    501|        ht--;
  917|    501|    }
  918|       |
  919|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
  920|  7.36k|    {
  921|   120k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (921:22): [True: 113k, False: 7.36k]
  ------------------
  922|   113k|        {
  923|   113k|            pu1_sign_up[0] = SIGN(pu1_src[0] - pu1_src_left_cpy[2 * (row - 1)]);
  ------------------
  |  |   44|   113k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 89.0k, False: 23.9k]
  |  |  |  Branch (44:34): [True: 21.7k, False: 67.3k]
  |  |  ------------------
  ------------------
  924|   113k|            pu1_sign_up[1] = SIGN(pu1_src[1] - pu1_src_left_cpy[2 * (row - 1) + 1]);
  ------------------
  |  |   44|   113k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 92.2k, False: 20.8k]
  |  |  |  Branch (44:34): [True: 24.2k, False: 67.9k]
  |  |  ------------------
  ------------------
  925|  3.83M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (925:26): [True: 3.72M, False: 113k]
  ------------------
  926|  3.72M|            {
  927|  3.72M|                WORD32 edge_idx;
  928|  3.72M|                WORD8 *pi1_sao_offset;
  929|       |
  930|  3.72M|                pi1_sao_offset = (0 == col % 2) ? pi1_sao_offset_u : pi1_sao_offset_v;
  ------------------
  |  Branch (930:34): [True: 1.86M, False: 1.86M]
  ------------------
  931|       |
  932|  3.72M|                u1_sign_down = SIGN(pu1_src[col] - pu1_src[col + 2 + src_strd]);
  ------------------
  |  |   44|  3.72M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.21M, False: 511k]
  |  |  |  Branch (44:34): [True: 513k, False: 2.69M]
  |  |  ------------------
  ------------------
  933|  3.72M|                edge_idx = 2 + pu1_sign_up[col] + u1_sign_down;
  934|  3.72M|                pu1_sign_up_tmp[col + 2] = -u1_sign_down;
  935|       |
  936|  3.72M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col >> 1];
  937|       |
  938|  3.72M|                if(0 != edge_idx)
  ------------------
  |  Branch (938:20): [True: 742k, False: 2.98M]
  ------------------
  939|   742k|                {
  940|   742k|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|   742k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 202, False: 742k]
  |  |  |  Branch (40:53): [True: 115, False: 742k]
  |  |  ------------------
  ------------------
  941|   742k|                }
  942|  3.72M|            }
  943|       |
  944|       |            /* Swapping pu1_sign_up_tmp and pu1_sign_up */
  945|   113k|            {
  946|   113k|                WORD8 *pu1_swap_tmp = pu1_sign_up;
  947|   113k|                pu1_sign_up = pu1_sign_up_tmp;
  948|   113k|                pu1_sign_up_tmp = pu1_swap_tmp;
  949|   113k|            }
  950|       |
  951|   113k|            pu1_src += src_strd;
  952|   113k|        }
  953|       |
  954|  7.36k|        pu1_src[-(pu1_avail[2] ? ht : ht + 1) * src_strd] = u1_pos_0_0_tmp_u;
  ------------------
  |  Branch (954:19): [True: 6.33k, False: 1.02k]
  ------------------
  955|  7.36k|        pu1_src[-(pu1_avail[2] ? ht : ht + 1) * src_strd + 1] = u1_pos_0_0_tmp_v;
  ------------------
  |  Branch (955:19): [True: 6.33k, False: 1.02k]
  ------------------
  956|  7.36k|        pu1_src[(pu1_avail[3] ? wd - 2 - src_strd : wd - 2)] = u1_pos_wd_ht_tmp_u;
  ------------------
  |  Branch (956:18): [True: 6.86k, False: 500]
  ------------------
  957|  7.36k|        pu1_src[(pu1_avail[3] ? wd - 1 - src_strd : wd - 1)] = u1_pos_wd_ht_tmp_v;
  ------------------
  |  Branch (957:18): [True: 6.86k, False: 499]
  ------------------
  958|  7.36k|    }
  959|       |
  960|  7.36k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (960:8): [True: 1.02k, False: 6.33k]
  ------------------
  961|  1.02k|        ht++;
  962|  7.36k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (962:8): [True: 501, False: 6.85k]
  ------------------
  963|    501|        ht++;
  964|  7.36k|    pu1_src_top_left[0] = au1_src_top_left_tmp[0];
  965|  7.36k|    pu1_src_top_left[1] = au1_src_top_left_tmp[1];
  966|   237k|    for(row = 0; row < 2 * ht; row++)
  ------------------
  |  Branch (966:18): [True: 229k, False: 7.36k]
  ------------------
  967|   229k|    {
  968|   229k|        pu1_src_left[row] = au1_src_left_tmp[row];
  969|   229k|    }
  970|   245k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (970:18): [True: 238k, False: 7.36k]
  ------------------
  971|   238k|    {
  972|   238k|        pu1_src_top[col] = au1_src_top_tmp[col];
  973|   238k|    }
  974|       |
  975|  7.36k|}
ihevc_sao_edge_offset_class3:
  992|  9.93k|{
  993|  9.93k|    WORD32 row, col;
  994|  9.93k|    UWORD8 au1_mask[MAX_CTB_SIZE];
  995|  9.93k|    UWORD8 au1_src_top_tmp[MAX_CTB_SIZE];
  996|  9.93k|    UWORD8 au1_src_left_tmp[MAX_CTB_SIZE];
  997|  9.93k|    UWORD8 u1_src_top_left_tmp;
  998|  9.93k|    WORD8 au1_sign_up[MAX_CTB_SIZE];
  999|  9.93k|    UWORD8 *pu1_src_left_cpy;
 1000|  9.93k|    WORD8 u1_sign_down;
 1001|  9.93k|    WORD32 bit_depth;
 1002|       |
 1003|  9.93k|    UWORD8 u1_pos_0_ht_tmp;
 1004|  9.93k|    UWORD8 u1_pos_wd_0_tmp;
 1005|       |
 1006|  9.93k|    bit_depth = BIT_DEPTH_LUMA;
  ------------------
  |  |  270|  9.93k|#define BIT_DEPTH_LUMA      BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  9.93k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1007|  9.93k|    pu1_src_left_cpy = pu1_src_left;
 1008|       |
 1009|       |    /* Initialize the mask values */
 1010|  9.93k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  9.93k|#define MAX_CTB_SIZE        64
  ------------------
 1011|       |
 1012|       |    /* Update left, top and top-left arrays */
 1013|  9.93k|    u1_src_top_left_tmp = pu1_src_top[wd - 1];
 1014|   320k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1014:18): [True: 310k, False: 9.93k]
  ------------------
 1015|   310k|    {
 1016|   310k|        au1_src_left_tmp[row] = pu1_src[row * src_strd + wd - 1];
 1017|   310k|    }
 1018|   340k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (1018:18): [True: 330k, False: 9.93k]
  ------------------
 1019|   330k|    {
 1020|   330k|        au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col];
 1021|   330k|    }
 1022|       |
 1023|       |    /* If top-right is available, process separately */
 1024|  9.93k|    if(0 != pu1_avail[5])
  ------------------
  |  Branch (1024:8): [True: 7.05k, False: 2.88k]
  ------------------
 1025|  7.05k|    {
 1026|  7.05k|        WORD32 edge_idx;
 1027|       |
 1028|  7.05k|        edge_idx = 2 + SIGN(pu1_src[wd - 1] - pu1_src_top_right[0]) +
  ------------------
  |  |   44|  7.05k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 4.51k, False: 2.53k]
  |  |  |  Branch (44:34): [True: 1.84k, False: 2.67k]
  |  |  ------------------
  ------------------
 1029|  7.05k|                        SIGN(pu1_src[wd - 1] - pu1_src[wd - 1 - 1 + src_strd]);
  ------------------
  |  |   44|  7.05k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 5.61k, False: 1.44k]
  |  |  |  Branch (44:34): [True: 2.39k, False: 3.21k]
  |  |  ------------------
  ------------------
 1030|       |
 1031|  7.05k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
 1032|       |
 1033|  7.05k|        if(0 != edge_idx)
  ------------------
  |  Branch (1033:12): [True: 2.24k, False: 4.81k]
  ------------------
 1034|  2.24k|        {
 1035|  2.24k|            u1_pos_wd_0_tmp = CLIP3(pu1_src[wd - 1] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  2.24k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1, False: 2.24k]
  |  |  |  Branch (40:53): [True: 0, False: 2.24k]
  |  |  ------------------
  ------------------
 1036|  2.24k|        }
 1037|  4.81k|        else
 1038|  4.81k|        {
 1039|  4.81k|            u1_pos_wd_0_tmp = pu1_src[wd - 1];
 1040|  4.81k|        }
 1041|  7.05k|    }
 1042|  2.88k|    else
 1043|  2.88k|    {
 1044|  2.88k|        u1_pos_wd_0_tmp = pu1_src[wd - 1];
 1045|  2.88k|    }
 1046|       |
 1047|       |    /* If bottom-left is available, process separately */
 1048|  9.93k|    if(0 != pu1_avail[6])
  ------------------
  |  Branch (1048:8): [True: 8.90k, False: 1.03k]
  ------------------
 1049|  8.90k|    {
 1050|  8.90k|        WORD32 edge_idx;
 1051|       |
 1052|  8.90k|        edge_idx = 2 + SIGN(pu1_src[(ht - 1) * src_strd] - pu1_src[(ht - 1) * src_strd + 1 - src_strd]) +
  ------------------
  |  |   44|  8.90k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 6.09k, False: 2.81k]
  |  |  |  Branch (44:34): [True: 2.30k, False: 3.79k]
  |  |  ------------------
  ------------------
 1053|  8.90k|                        SIGN(pu1_src[(ht - 1) * src_strd] - pu1_src_bot_left[0]);
  ------------------
  |  |   44|  8.90k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 6.46k, False: 2.44k]
  |  |  |  Branch (44:34): [True: 3.46k, False: 2.99k]
  |  |  ------------------
  ------------------
 1054|       |
 1055|  8.90k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
 1056|       |
 1057|  8.90k|        if(0 != edge_idx)
  ------------------
  |  Branch (1057:12): [True: 3.03k, False: 5.87k]
  ------------------
 1058|  3.03k|        {
 1059|  3.03k|            u1_pos_0_ht_tmp = CLIP3(pu1_src[(ht - 1) * src_strd] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  3.03k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1, False: 3.02k]
  |  |  |  Branch (40:53): [True: 1, False: 3.02k]
  |  |  ------------------
  ------------------
 1060|  3.03k|        }
 1061|  5.87k|        else
 1062|  5.87k|        {
 1063|  5.87k|            u1_pos_0_ht_tmp = pu1_src[(ht - 1) * src_strd];
 1064|  5.87k|        }
 1065|  8.90k|    }
 1066|  1.03k|    else
 1067|  1.03k|    {
 1068|  1.03k|        u1_pos_0_ht_tmp = pu1_src[(ht - 1) * src_strd];
 1069|  1.03k|    }
 1070|       |
 1071|       |    /* If Left is not available */
 1072|  9.93k|    if(0 == pu1_avail[0])
  ------------------
  |  Branch (1072:8): [True: 587, False: 9.35k]
  ------------------
 1073|    587|    {
 1074|    587|        au1_mask[0] = 0;
 1075|    587|    }
 1076|       |
 1077|       |    /* If Top is not available */
 1078|  9.93k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (1078:8): [True: 2.25k, False: 7.68k]
  ------------------
 1079|  2.25k|    {
 1080|  2.25k|        pu1_src += src_strd;
 1081|  2.25k|        ht--;
 1082|  2.25k|        pu1_src_left_cpy += 1;
 1083|  76.3k|        for(col = 0; col < wd - 1; col++)
  ------------------
  |  Branch (1083:22): [True: 74.0k, False: 2.25k]
  ------------------
 1084|  74.0k|        {
 1085|  74.0k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src[col + 1 - src_strd]);
  ------------------
  |  |   44|  74.0k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 63.7k, False: 10.3k]
  |  |  |  Branch (44:34): [True: 6.72k, False: 56.9k]
  |  |  ------------------
  ------------------
 1086|  74.0k|        }
 1087|  2.25k|    }
 1088|  7.68k|    else
 1089|  7.68k|    {
 1090|   254k|        for(col = 0; col < wd - 1; col++)
  ------------------
  |  Branch (1090:22): [True: 246k, False: 7.68k]
  ------------------
 1091|   246k|        {
 1092|   246k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src_top[col + 1]);
  ------------------
  |  |   44|   246k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 166k, False: 80.2k]
  |  |  |  Branch (44:34): [True: 65.0k, False: 101k]
  |  |  ------------------
  ------------------
 1093|   246k|        }
 1094|  7.68k|    }
 1095|       |
 1096|       |    /* If Right is not available */
 1097|  9.93k|    if(0 == pu1_avail[1])
  ------------------
  |  Branch (1097:8): [True: 840, False: 9.09k]
  ------------------
 1098|    840|    {
 1099|    840|        au1_mask[wd - 1] = 0;
 1100|    840|    }
 1101|       |
 1102|       |    /* If Bottom is not available */
 1103|  9.93k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (1103:8): [True: 476, False: 9.46k]
  ------------------
 1104|    476|    {
 1105|    476|        ht--;
 1106|    476|    }
 1107|       |
 1108|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
 1109|  9.93k|    {
 1110|   316k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1110:22): [True: 306k, False: 9.93k]
  ------------------
 1111|   306k|        {
 1112|   306k|            au1_sign_up[wd - 1] = SIGN(pu1_src[wd - 1] - pu1_src[wd - 1 + 1 - src_strd]);
  ------------------
  |  |   44|   306k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 217k, False: 88.3k]
  |  |  |  Branch (44:34): [True: 88.3k, False: 129k]
  |  |  ------------------
  ------------------
 1113|  10.6M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (1113:26): [True: 10.3M, False: 306k]
  ------------------
 1114|  10.3M|            {
 1115|  10.3M|                WORD32 edge_idx;
 1116|       |
 1117|  10.3M|                u1_sign_down = SIGN(pu1_src[col] - ((col == 0) ? pu1_src_left_cpy[row + 1] :
  ------------------
  |  |   44|  20.6M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 7.88M, False: 2.42M]
  |  |  |  Branch (44:23): [True: 306k, False: 10.0M]
  |  |  |  Branch (44:34): [True: 2.80M, False: 5.08M]
  |  |  |  Branch (44:35): [True: 222k, False: 7.66M]
  |  |  ------------------
  ------------------
 1118|  10.3M|                                                                 pu1_src[col - 1 + src_strd]));
 1119|  10.3M|                edge_idx = 2 + au1_sign_up[col] + u1_sign_down;
 1120|  10.3M|                if(col > 0)
  ------------------
  |  Branch (1120:20): [True: 10.0M, False: 301k]
  ------------------
 1121|  10.0M|                    au1_sign_up[col - 1] = -u1_sign_down;
 1122|       |
 1123|  10.3M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col];
 1124|       |
 1125|  10.3M|                if(0 != edge_idx)
  ------------------
  |  Branch (1125:20): [True: 3.13M, False: 7.16M]
  ------------------
 1126|  3.13M|                {
 1127|  3.13M|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  3.13M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.07k, False: 3.13M]
  |  |  |  Branch (40:53): [True: 2.74k, False: 3.13M]
  |  |  ------------------
  ------------------
 1128|  3.13M|                }
 1129|  10.3M|            }
 1130|       |
 1131|   306k|            pu1_src += src_strd;
 1132|   306k|        }
 1133|       |
 1134|  9.93k|        pu1_src[-(pu1_avail[2] ? ht : ht + 1) * src_strd + wd - 1] = u1_pos_wd_0_tmp;
  ------------------
  |  Branch (1134:19): [True: 7.68k, False: 2.25k]
  ------------------
 1135|  9.93k|        pu1_src[(pu1_avail[3] ?  (-src_strd) : 0)] = u1_pos_0_ht_tmp;
  ------------------
  |  Branch (1135:18): [True: 9.46k, False: 477]
  ------------------
 1136|  9.93k|    }
 1137|       |
 1138|  9.93k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (1138:8): [True: 2.25k, False: 7.68k]
  ------------------
 1139|  2.25k|        ht++;
 1140|  9.93k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (1140:8): [True: 476, False: 9.46k]
  ------------------
 1141|    476|        ht++;
 1142|  9.93k|    *pu1_src_top_left = u1_src_top_left_tmp;
 1143|   320k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1143:18): [True: 310k, False: 9.93k]
  ------------------
 1144|   310k|    {
 1145|   310k|        pu1_src_left[row] = au1_src_left_tmp[row];
 1146|   310k|    }
 1147|   340k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (1147:18): [True: 330k, False: 9.93k]
  ------------------
 1148|   330k|    {
 1149|   330k|        pu1_src_top[col] = au1_src_top_tmp[col];
 1150|   330k|    }
 1151|       |
 1152|  9.93k|}
ihevc_sao_edge_offset_class3_chroma:
 1169|  5.66k|{
 1170|  5.66k|    WORD32 row, col;
 1171|  5.66k|    UWORD8 au1_mask[MAX_CTB_SIZE];
 1172|  5.66k|    UWORD8 au1_src_left_tmp[2 * MAX_CTB_SIZE], au1_src_top_tmp[MAX_CTB_SIZE];
 1173|  5.66k|    UWORD8 au1_src_top_left_tmp[2];
 1174|  5.66k|    WORD8 au1_sign_up[MAX_CTB_SIZE];
 1175|  5.66k|    UWORD8 *pu1_src_left_cpy;
 1176|  5.66k|    WORD8 u1_sign_down;
 1177|  5.66k|    WORD32 bit_depth;
 1178|       |
 1179|  5.66k|    UWORD8 u1_pos_wd_0_tmp_u;
 1180|  5.66k|    UWORD8 u1_pos_wd_0_tmp_v;
 1181|  5.66k|    UWORD8 u1_pos_0_ht_tmp_u;
 1182|  5.66k|    UWORD8 u1_pos_0_ht_tmp_v;
 1183|       |
 1184|  5.66k|    bit_depth = BIT_DEPTH_CHROMA;
  ------------------
  |  |  271|  5.66k|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  5.66k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1185|  5.66k|    pu1_src_left_cpy = pu1_src_left;
 1186|       |
 1187|       |    /* Initialize the mask values */
 1188|  5.66k|    memset(au1_mask, 0xFF, MAX_CTB_SIZE);
  ------------------
  |  |  341|  5.66k|#define MAX_CTB_SIZE        64
  ------------------
 1189|       |
 1190|       |    /* Update left, top and top-left arrays */
 1191|  5.66k|    au1_src_top_left_tmp[0] = pu1_src_top[wd - 2];
 1192|  5.66k|    au1_src_top_left_tmp[1] = pu1_src_top[wd - 1];
 1193|  94.9k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1193:18): [True: 89.3k, False: 5.66k]
  ------------------
 1194|  89.3k|    {
 1195|  89.3k|        au1_src_left_tmp[2 * row] = pu1_src[row * src_strd + wd - 2];
 1196|  89.3k|        au1_src_left_tmp[2 * row + 1] = pu1_src[row * src_strd + wd - 1];
 1197|  89.3k|    }
 1198|   189k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (1198:18): [True: 184k, False: 5.66k]
  ------------------
 1199|   184k|    {
 1200|   184k|        au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col];
 1201|   184k|    }
 1202|       |
 1203|       |
 1204|       |    /* If top-right is available, process separately */
 1205|  5.66k|    if(0 != pu1_avail[5])
  ------------------
  |  Branch (1205:8): [True: 4.81k, False: 844]
  ------------------
 1206|  4.81k|    {
 1207|  4.81k|        WORD32 edge_idx;
 1208|       |
 1209|       |        /* U */
 1210|  4.81k|        edge_idx = 2 + SIGN(pu1_src[wd - 2] - pu1_src_top_right[0]) +
  ------------------
  |  |   44|  4.81k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.65k, False: 1.15k]
  |  |  |  Branch (44:34): [True: 978, False: 2.68k]
  |  |  ------------------
  ------------------
 1211|  4.81k|                        SIGN(pu1_src[wd - 2] - pu1_src[wd - 2 - 2 + src_strd]);
  ------------------
  |  |   44|  4.81k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.98k, False: 834]
  |  |  |  Branch (44:34): [True: 987, False: 2.99k]
  |  |  ------------------
  ------------------
 1212|       |
 1213|  4.81k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
 1214|       |
 1215|  4.81k|        if(0 != edge_idx)
  ------------------
  |  Branch (1215:12): [True: 1.02k, False: 3.79k]
  ------------------
 1216|  1.02k|        {
 1217|  1.02k|            u1_pos_wd_0_tmp_u = CLIP3(pu1_src[wd - 2] + pi1_sao_offset_u[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.02k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.02k]
  |  |  |  Branch (40:53): [True: 1, False: 1.02k]
  |  |  ------------------
  ------------------
 1218|  1.02k|        }
 1219|  3.79k|        else
 1220|  3.79k|        {
 1221|  3.79k|            u1_pos_wd_0_tmp_u = pu1_src[wd - 2];
 1222|  3.79k|        }
 1223|       |
 1224|       |        /* V */
 1225|  4.81k|        edge_idx = 2 + SIGN(pu1_src[wd - 1] - pu1_src_top_right[1]) +
  ------------------
  |  |   44|  4.81k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.57k, False: 1.24k]
  |  |  |  Branch (44:34): [True: 1.01k, False: 2.55k]
  |  |  ------------------
  ------------------
 1226|  4.81k|                        SIGN(pu1_src[wd - 1] - pu1_src[wd - 1 - 2 + src_strd]);
  ------------------
  |  |   44|  4.81k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.79k, False: 1.02k]
  |  |  |  Branch (44:34): [True: 865, False: 2.92k]
  |  |  ------------------
  ------------------
 1227|       |
 1228|  4.81k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
 1229|       |
 1230|  4.81k|        if(0 != edge_idx)
  ------------------
  |  Branch (1230:12): [True: 1.10k, False: 3.70k]
  ------------------
 1231|  1.10k|        {
 1232|  1.10k|            u1_pos_wd_0_tmp_v = CLIP3(pu1_src[wd - 1] + pi1_sao_offset_v[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.10k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.10k]
  |  |  |  Branch (40:53): [True: 1, False: 1.10k]
  |  |  ------------------
  ------------------
 1233|  1.10k|        }
 1234|  3.70k|        else
 1235|  3.70k|        {
 1236|  3.70k|            u1_pos_wd_0_tmp_v = pu1_src[wd - 1];
 1237|  3.70k|        }
 1238|  4.81k|    }
 1239|    844|    else
 1240|    844|    {
 1241|    844|        u1_pos_wd_0_tmp_u = pu1_src[wd - 2];
 1242|    844|        u1_pos_wd_0_tmp_v = pu1_src[wd - 1];
 1243|    844|    }
 1244|       |
 1245|       |    /* If bottom-left is available, process separately */
 1246|  5.66k|    if(0 != pu1_avail[6])
  ------------------
  |  Branch (1246:8): [True: 4.67k, False: 985]
  ------------------
 1247|  4.67k|    {
 1248|  4.67k|        WORD32 edge_idx;
 1249|       |
 1250|       |        /* U */
 1251|  4.67k|        edge_idx = 2 + SIGN(pu1_src[(ht - 1) * src_strd] - pu1_src[(ht - 1) * src_strd + 2 - src_strd]) +
  ------------------
  |  |   44|  4.67k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.68k, False: 987]
  |  |  |  Branch (44:34): [True: 1.00k, False: 2.68k]
  |  |  ------------------
  ------------------
 1252|  4.67k|                        SIGN(pu1_src[(ht - 1) * src_strd] - pu1_src_bot_left[0]);
  ------------------
  |  |   44|  4.67k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.71k, False: 965]
  |  |  |  Branch (44:34): [True: 1.36k, False: 2.34k]
  |  |  ------------------
  ------------------
 1253|       |
 1254|  4.67k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
 1255|       |
 1256|  4.67k|        if(0 != edge_idx)
  ------------------
  |  Branch (1256:12): [True: 1.23k, False: 3.44k]
  ------------------
 1257|  1.23k|        {
 1258|  1.23k|            u1_pos_0_ht_tmp_u = CLIP3(pu1_src[(ht - 1) * src_strd] + pi1_sao_offset_u[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.23k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.23k]
  |  |  |  Branch (40:53): [True: 0, False: 1.23k]
  |  |  ------------------
  ------------------
 1259|  1.23k|        }
 1260|  3.44k|        else
 1261|  3.44k|        {
 1262|  3.44k|            u1_pos_0_ht_tmp_u = pu1_src[(ht - 1) * src_strd];
 1263|  3.44k|        }
 1264|       |
 1265|       |        /* V */
 1266|  4.67k|        edge_idx = 2 + SIGN(pu1_src[(ht - 1) * src_strd + 1] - pu1_src[(ht - 1) * src_strd + 1 + 2 - src_strd]) +
  ------------------
  |  |   44|  4.67k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.62k, False: 1.04k]
  |  |  |  Branch (44:34): [True: 943, False: 2.68k]
  |  |  ------------------
  ------------------
 1267|  4.67k|                        SIGN(pu1_src[(ht - 1) * src_strd + 1] - pu1_src_bot_left[1]);
  ------------------
  |  |   44|  4.67k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 3.70k, False: 972]
  |  |  |  Branch (44:34): [True: 1.27k, False: 2.43k]
  |  |  ------------------
  ------------------
 1268|       |
 1269|  4.67k|        edge_idx = gi4_ihevc_table_edge_idx[edge_idx];
 1270|       |
 1271|  4.67k|        if(0 != edge_idx)
  ------------------
  |  Branch (1271:12): [True: 1.13k, False: 3.54k]
  ------------------
 1272|  1.13k|        {
 1273|  1.13k|            u1_pos_0_ht_tmp_v = CLIP3(pu1_src[(ht - 1) * src_strd + 1] + pi1_sao_offset_v[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|  1.13k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.13k]
  |  |  |  Branch (40:53): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
 1274|  1.13k|        }
 1275|  3.54k|        else
 1276|  3.54k|        {
 1277|  3.54k|            u1_pos_0_ht_tmp_v = pu1_src[(ht - 1) * src_strd + 1];
 1278|  3.54k|        }
 1279|  4.67k|    }
 1280|    985|    else
 1281|    985|    {
 1282|    985|        u1_pos_0_ht_tmp_u = pu1_src[(ht - 1) * src_strd];
 1283|    985|        u1_pos_0_ht_tmp_v = pu1_src[(ht - 1) * src_strd + 1];
 1284|    985|    }
 1285|       |
 1286|       |    /* If Left is not available */
 1287|  5.66k|    if(0 == pu1_avail[0])
  ------------------
  |  Branch (1287:8): [True: 383, False: 5.27k]
  ------------------
 1288|    383|    {
 1289|    383|        au1_mask[0] = 0;
 1290|    383|    }
 1291|       |
 1292|       |    /* If Top is not available */
 1293|  5.66k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (1293:8): [True: 490, False: 5.17k]
  ------------------
 1294|    490|    {
 1295|    490|        pu1_src += src_strd;
 1296|    490|        ht--;
 1297|    490|        pu1_src_left_cpy += 2;
 1298|  13.8k|        for(col = 0; col < wd - 2; col++)
  ------------------
  |  Branch (1298:22): [True: 13.3k, False: 490]
  ------------------
 1299|  13.3k|        {
 1300|  13.3k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src[col + 2 - src_strd]);
  ------------------
  |  |   44|  13.3k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 12.6k, False: 647]
  |  |  |  Branch (44:34): [True: 300, False: 12.3k]
  |  |  ------------------
  ------------------
 1301|  13.3k|        }
 1302|    490|    }
 1303|  5.17k|    else
 1304|  5.17k|    {
 1305|   164k|        for(col = 0; col < wd - 2; col++)
  ------------------
  |  Branch (1305:22): [True: 159k, False: 5.17k]
  ------------------
 1306|   159k|        {
 1307|   159k|            au1_sign_up[col] = SIGN(pu1_src[col] - pu1_src_top[col + 2]);
  ------------------
  |  |   44|   159k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 123k, False: 35.9k]
  |  |  |  Branch (44:34): [True: 28.9k, False: 94.6k]
  |  |  ------------------
  ------------------
 1308|   159k|        }
 1309|  5.17k|    }
 1310|       |
 1311|       |    /* If Right is not available */
 1312|  5.66k|    if(0 == pu1_avail[1])
  ------------------
  |  Branch (1312:8): [True: 370, False: 5.29k]
  ------------------
 1313|    370|    {
 1314|    370|        au1_mask[(wd - 1) >> 1] = 0;
 1315|    370|    }
 1316|       |
 1317|       |    /* If Bottom is not available */
 1318|  5.66k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (1318:8): [True: 625, False: 5.03k]
  ------------------
 1319|    625|    {
 1320|    625|        ht--;
 1321|    625|    }
 1322|       |
 1323|       |    /* Processing is done on the intermediate buffer and the output is written to the source buffer */
 1324|  5.66k|    {
 1325|  93.4k|        for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1325:22): [True: 87.7k, False: 5.66k]
  ------------------
 1326|  87.7k|        {
 1327|  87.7k|            au1_sign_up[wd - 2] = SIGN(pu1_src[wd - 2] - pu1_src[wd - 2 + 2 - src_strd]);
  ------------------
  |  |   44|  87.7k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 71.1k, False: 16.6k]
  |  |  |  Branch (44:34): [True: 16.8k, False: 54.2k]
  |  |  ------------------
  ------------------
 1328|  87.7k|            au1_sign_up[wd - 1] = SIGN(pu1_src[wd - 1] - pu1_src[wd - 1 + 2 - src_strd]);
  ------------------
  |  |   44|  87.7k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 73.0k, False: 14.7k]
  |  |  |  Branch (44:34): [True: 19.7k, False: 53.3k]
  |  |  ------------------
  ------------------
 1329|  2.98M|            for(col = 0; col < wd; col++)
  ------------------
  |  Branch (1329:26): [True: 2.89M, False: 87.7k]
  ------------------
 1330|  2.89M|            {
 1331|  2.89M|                WORD32 edge_idx;
 1332|  2.89M|                WORD8 *pi1_sao_offset;
 1333|       |
 1334|  2.89M|                pi1_sao_offset = (0 == col % 2) ? pi1_sao_offset_u : pi1_sao_offset_v;
  ------------------
  |  Branch (1334:34): [True: 1.44M, False: 1.44M]
  ------------------
 1335|       |
 1336|  2.89M|                u1_sign_down = SIGN(pu1_src[col] - ((col < 2) ? pu1_src_left_cpy[2 * (row + 1) + col] :
  ------------------
  |  |   44|  5.79M|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 2.44M, False: 457k]
  |  |  |  Branch (44:23): [True: 175k, False: 2.72M]
  |  |  |  Branch (44:34): [True: 470k, False: 1.97M]
  |  |  |  Branch (44:35): [True: 140k, False: 2.30M]
  |  |  ------------------
  ------------------
 1337|  2.89M|                                                                pu1_src[col - 2 + src_strd]));
 1338|  2.89M|                edge_idx = 2 + au1_sign_up[col] + u1_sign_down;
 1339|  2.89M|                if(col > 1)
  ------------------
  |  Branch (1339:20): [True: 2.72M, False: 174k]
  ------------------
 1340|  2.72M|                    au1_sign_up[col - 2] = -u1_sign_down;
 1341|       |
 1342|  2.89M|                edge_idx = gi4_ihevc_table_edge_idx[edge_idx] & au1_mask[col >> 1];
 1343|       |
 1344|  2.89M|                if(0 != edge_idx)
  ------------------
  |  Branch (1344:20): [True: 600k, False: 2.29M]
  ------------------
 1345|   600k|                {
 1346|   600k|                    pu1_src[col] = CLIP3(pu1_src[col] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1);
  ------------------
  |  |   40|   600k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 92, False: 600k]
  |  |  |  Branch (40:53): [True: 173, False: 600k]
  |  |  ------------------
  ------------------
 1347|   600k|                }
 1348|  2.89M|            }
 1349|       |
 1350|  87.7k|            pu1_src += src_strd;
 1351|  87.7k|        }
 1352|       |
 1353|  5.66k|        pu1_src[-(pu1_avail[2] ? ht : ht + 1) * src_strd + wd - 2] = u1_pos_wd_0_tmp_u;
  ------------------
  |  Branch (1353:19): [True: 5.17k, False: 489]
  ------------------
 1354|  5.66k|        pu1_src[-(pu1_avail[2] ? ht : ht + 1) * src_strd + wd - 1] = u1_pos_wd_0_tmp_v;
  ------------------
  |  Branch (1354:19): [True: 5.17k, False: 489]
  ------------------
 1355|  5.66k|        pu1_src[(pu1_avail[3] ?  (-src_strd) : 0)] = u1_pos_0_ht_tmp_u;
  ------------------
  |  Branch (1355:18): [True: 5.03k, False: 623]
  ------------------
 1356|  5.66k|        pu1_src[(pu1_avail[3] ?  (-src_strd) : 0) + 1] = u1_pos_0_ht_tmp_v;
  ------------------
  |  Branch (1356:18): [True: 5.03k, False: 623]
  ------------------
 1357|  5.66k|    }
 1358|       |
 1359|  5.66k|    if(0 == pu1_avail[2])
  ------------------
  |  Branch (1359:8): [True: 490, False: 5.17k]
  ------------------
 1360|    490|        ht++;
 1361|  5.66k|    if(0 == pu1_avail[3])
  ------------------
  |  Branch (1361:8): [True: 625, False: 5.03k]
  ------------------
 1362|    625|        ht++;
 1363|  5.66k|    pu1_src_top_left[0] = au1_src_top_left_tmp[0];
 1364|  5.66k|    pu1_src_top_left[1] = au1_src_top_left_tmp[1];
 1365|   184k|    for(row = 0; row < 2 * ht; row++)
  ------------------
  |  Branch (1365:18): [True: 178k, False: 5.66k]
  ------------------
 1366|   178k|    {
 1367|   178k|        pu1_src_left[row] = au1_src_left_tmp[row];
 1368|   178k|    }
 1369|   189k|    for(col = 0; col < wd; col++)
  ------------------
  |  Branch (1369:18): [True: 184k, False: 5.66k]
  ------------------
 1370|   184k|    {
 1371|   184k|        pu1_src_top[col] = au1_src_top_tmp[col];
 1372|   184k|    }
 1373|       |
 1374|  5.66k|}

ihevc_weighted_pred_uni:
  116|  21.2k|{
  117|  21.2k|    WORD32 row, col;
  118|  21.2k|    WORD32 i4_tmp;
  119|       |
  120|   224k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (120:18): [True: 203k, False: 21.2k]
  ------------------
  121|   203k|    {
  122|  2.72M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (122:22): [True: 2.52M, False: 203k]
  ------------------
  123|  2.52M|        {
  124|  2.52M|            i4_tmp = (pi2_src[col] + lvl_shift) * wgt0;
  125|  2.52M|            i4_tmp += 1 << (shift - 1);
  126|  2.52M|            i4_tmp = (i4_tmp >> shift) + off0;
  127|       |
  128|  2.52M|            pu1_dst[col] = CLIP_U8(i4_tmp);
  ------------------
  |  |   40|  2.52M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  2.52M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 15.8k, False: 2.50M]
  |  |  |  |  |  Branch (40:53): [True: 12, False: 2.50M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|  2.52M|        }
  130|       |
  131|   203k|        pi2_src += src_strd;
  132|   203k|        pu1_dst += dst_strd;
  133|   203k|    }
  134|  21.2k|}
ihevc_weighted_pred_chroma_uni:
  201|  21.3k|{
  202|  21.3k|    WORD32 row, col;
  203|  21.3k|    WORD32 i4_tmp;
  204|       |
  205|   124k|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (205:18): [True: 102k, False: 21.3k]
  ------------------
  206|   102k|    {
  207|   739k|        for(col = 0; col < 2 * wd; col += 2)
  ------------------
  |  Branch (207:22): [True: 636k, False: 102k]
  ------------------
  208|   636k|        {
  209|   636k|            i4_tmp = (pi2_src[col] + lvl_shift) * wgt0_cb;
  210|   636k|            i4_tmp += 1 << (shift - 1);
  211|   636k|            i4_tmp = (i4_tmp >> shift) + off0_cb;
  212|       |
  213|   636k|            pu1_dst[col] = CLIP_U8(i4_tmp);
  ------------------
  |  |   40|   636k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   636k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 636k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 636k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|       |
  215|   636k|            i4_tmp = (pi2_src[col + 1] + lvl_shift) * wgt0_cr;
  216|   636k|            i4_tmp += 1 << (shift - 1);
  217|   636k|            i4_tmp = (i4_tmp >> shift) + off0_cr;
  218|       |
  219|   636k|            pu1_dst[col + 1] = CLIP_U8(i4_tmp);
  ------------------
  |  |   40|   636k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   636k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.84k, False: 633k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 633k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|   636k|        }
  221|       |
  222|   102k|        pi2_src += src_strd;
  223|   102k|        pu1_dst += dst_strd;
  224|   102k|    }
  225|  21.3k|}
ihevc_weighted_pred_bi:
  307|   219k|{
  308|   219k|    WORD32 row, col;
  309|   219k|    WORD32 i4_tmp;
  310|       |
  311|  2.04M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (311:18): [True: 1.82M, False: 219k]
  ------------------
  312|  1.82M|    {
  313|  21.3M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (313:22): [True: 19.4M, False: 1.82M]
  ------------------
  314|  19.4M|        {
  315|  19.4M|            i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0;
  316|  19.4M|            i4_tmp += (pi2_src2[col] + lvl_shift2) * wgt1;
  317|  19.4M|            i4_tmp += (off0 + off1 + 1) << (shift - 1);
  318|       |
  319|  19.4M|            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
  ------------------
  |  |   40|  19.4M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  19.4M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 905k, False: 18.5M]
  |  |  |  |  |  Branch (40:53): [True: 32, False: 18.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  320|  19.4M|        }
  321|       |
  322|  1.82M|        pi2_src1 += src_strd1;
  323|  1.82M|        pi2_src2 += src_strd2;
  324|  1.82M|        pu1_dst += dst_strd;
  325|  1.82M|    }
  326|   219k|}
ihevc_weighted_pred_chroma_bi:
  412|   214k|{
  413|   214k|    WORD32 row, col;
  414|   214k|    WORD32 i4_tmp;
  415|       |
  416|  1.15M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (416:18): [True: 941k, False: 214k]
  ------------------
  417|   941k|    {
  418|  6.02M|        for(col = 0; col < 2 * wd; col += 2)
  ------------------
  |  Branch (418:22): [True: 5.08M, False: 941k]
  ------------------
  419|  5.08M|        {
  420|  5.08M|            i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0_cb;
  421|  5.08M|            i4_tmp += (pi2_src2[col] + lvl_shift2) * wgt1_cb;
  422|  5.08M|            i4_tmp += (off0_cb + off1_cb + 1) << (shift - 1);
  423|       |
  424|  5.08M|            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
  ------------------
  |  |   40|  5.08M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  5.08M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 5.08M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 5.08M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  425|       |
  426|  5.08M|            i4_tmp = (pi2_src1[col + 1] + lvl_shift1) * wgt0_cr;
  427|  5.08M|            i4_tmp += (pi2_src2[col + 1] + lvl_shift2) * wgt1_cr;
  428|  5.08M|            i4_tmp += (off0_cr + off1_cr + 1) << (shift - 1);
  429|       |
  430|  5.08M|            pu1_dst[col + 1] = CLIP_U8(i4_tmp >> shift);
  ------------------
  |  |   40|  5.08M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  5.08M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 376k, False: 4.71M]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 4.71M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|  5.08M|        }
  432|       |
  433|   941k|        pi2_src1 += src_strd1;
  434|   941k|        pi2_src2 += src_strd2;
  435|   941k|        pu1_dst += dst_strd;
  436|   941k|    }
  437|   214k|}
ihevc_weighted_pred_bi_default:
  499|  4.98M|{
  500|  4.98M|    WORD32 row, col;
  501|  4.98M|    WORD32 i4_tmp;
  502|  4.98M|    WORD32 shift;
  503|       |
  504|  4.98M|    shift = SHIFT_14_MINUS_BIT_DEPTH + 1;
  ------------------
  |  |   41|  4.98M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  4.98M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  505|  34.8M|    for(row = 0; row < ht; row++)
  ------------------
  |  Branch (505:18): [True: 29.8M, False: 4.98M]
  ------------------
  506|  29.8M|    {
  507|   297M|        for(col = 0; col < wd; col++)
  ------------------
  |  Branch (507:22): [True: 267M, False: 29.8M]
  ------------------
  508|   267M|        {
  509|   267M|            i4_tmp = pi2_src1[col] + lvl_shift1;
  510|   267M|            i4_tmp += pi2_src2[col] + lvl_shift2;
  511|   267M|            i4_tmp += 1 << (shift - 1);
  512|       |
  513|   267M|            pu1_dst[col] = CLIP_U8(i4_tmp >> shift);
  ------------------
  |  |   40|   267M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   267M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 139k, False: 267M]
  |  |  |  |  |  Branch (40:53): [True: 191k, False: 267M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|   267M|        }
  515|       |
  516|  29.8M|        pi2_src1 += src_strd1;
  517|  29.8M|        pi2_src2 += src_strd2;
  518|  29.8M|        pu1_dst += dst_strd;
  519|  29.8M|    }
  520|  4.98M|}

ithread_get_handle_size:
   55|  5.97k|{
   56|  5.97k|    return sizeof(pthread_t);
   57|  5.97k|}
ithread_get_mutex_lock_size:
   60|  2.79k|{
   61|  2.79k|    return sizeof(pthread_mutex_t);
   62|  2.79k|}
ithread_create:
   65|  6.69k|{
   66|  6.69k|    return pthread_create((pthread_t *)thread_handle, attribute, (void * (*)(void *))strt, argument);
   67|  6.69k|}
ithread_join:
   70|  6.69k|{
   71|  6.69k|    pthread_t *pthread_handle   = (pthread_t *)thread_handle;
   72|  6.69k|    return pthread_join(*pthread_handle, val_ptr);
   73|  6.69k|}
ithread_mutex_init:
   85|    932|{
   86|    932|    return pthread_mutex_init((pthread_mutex_t *)mutex, NULL);
   87|    932|}
ithread_mutex_destroy:
   90|    932|{
   91|    932|    return pthread_mutex_destroy((pthread_mutex_t *)mutex);
   92|    932|}
ithread_mutex_lock:
   95|   839k|{
   96|   839k|    return pthread_mutex_lock((pthread_mutex_t *)mutex);
   97|   839k|}
ithread_mutex_unlock:
  100|   844k|{
  101|   844k|    return pthread_mutex_unlock((pthread_mutex_t *)mutex);
  102|   844k|}
ithread_yield:
  105|  7.74M|{
  106|  7.74M|    sched_yield();
  107|  7.74M|}
ithread_set_affinity:
  150|   115k|{
  151|       |
  152|       |#ifdef PTHREAD_AFFINITY
  153|       |    cpu_set_t cpuset;
  154|       |    int num_cores = sysconf(_SC_NPROCESSORS_ONLN);
  155|       |    pthread_t cur_thread = pthread_self();
  156|       |
  157|       |    if(core_id >= num_cores)
  158|       |        return -1;
  159|       |
  160|       |    CPU_ZERO(&cpuset);
  161|       |    CPU_SET(core_id, &cpuset);
  162|       |
  163|       |    return pthread_setaffinity_np(cur_thread, sizeof(cpu_set_t), &cpuset);
  164|       |
  165|       |#elif SYSCALL_AFFINITY
  166|       |    WORD32 i4_sys_res;
  167|       |
  168|       |    pid_t pid = gettid();
  169|       |
  170|       |
  171|       |    i4_sys_res = syscall(__NR_sched_setaffinity, pid, sizeof(i4_mask), &i4_mask);
  172|       |    if(i4_sys_res)
  173|       |    {
  174|       |        //WORD32 err;
  175|       |        //err = errno;
  176|       |        //perror("Error in setaffinity syscall PERROR : ");
  177|       |        //LOG_ERROR("Error in the syscall setaffinity: mask=0x%x err=0x%x", i4_mask, i4_sys_res);
  178|       |        return -1;
  179|       |    }
  180|       |#endif
  181|       |
  182|   115k|    return core_id;
  183|   115k|}

ihevc_itrans_recon_32x32_sse42:
  116|  6.11k|{
  117|       |    /* Inverse Transform */
  118|       |
  119|  6.11k|    WORD32 j;
  120|       |
  121|       |
  122|  6.11k|    WORD16 *pi2_tmp_orig;
  123|       |
  124|       |
  125|  6.11k|    WORD16 *o_temp_ptr;
  126|  6.11k|    WORD16 *temp_ptr;
  127|       |
  128|  6.11k|    __m128i m_temp_reg_0;
  129|  6.11k|    __m128i m_temp_reg_1;
  130|  6.11k|    __m128i m_temp_reg_2;
  131|  6.11k|    __m128i m_temp_reg_3;
  132|  6.11k|    __m128i m_temp_reg_4;
  133|  6.11k|    __m128i m_temp_reg_5;
  134|  6.11k|    __m128i m_temp_reg_6;
  135|  6.11k|    __m128i m_temp_reg_7;
  136|  6.11k|    __m128i m_temp_reg_10;
  137|  6.11k|    __m128i m_temp_reg_11;
  138|  6.11k|    __m128i m_temp_reg_12;
  139|  6.11k|    __m128i m_temp_reg_13;
  140|  6.11k|    __m128i m_temp_reg_14;
  141|  6.11k|    __m128i m_temp_reg_15;
  142|  6.11k|    __m128i m_temp_reg_16;
  143|  6.11k|    __m128i m_temp_reg_17;
  144|  6.11k|    __m128i m_temp_reg_18;
  145|  6.11k|    __m128i m_temp_reg_19;
  146|  6.11k|    __m128i m_temp_reg_20;
  147|  6.11k|    __m128i m_temp_reg_21;
  148|  6.11k|    __m128i m_temp_reg_22;
  149|  6.11k|    __m128i m_temp_reg_23;
  150|  6.11k|    __m128i m_temp_reg_30;
  151|  6.11k|    __m128i m_temp_reg_31;
  152|  6.11k|    __m128i m_temp_reg_32;
  153|  6.11k|    __m128i m_temp_reg_33;
  154|  6.11k|    __m128i m_temp_reg_34;
  155|  6.11k|    __m128i m_temp_reg_35;
  156|  6.11k|    __m128i m_temp_reg_36;
  157|  6.11k|    __m128i m_temp_reg_37;
  158|  6.11k|    __m128i m_temp_reg_40;
  159|  6.11k|    __m128i m_temp_reg_41;
  160|  6.11k|    __m128i m_temp_reg_42;
  161|  6.11k|    __m128i m_temp_reg_43;
  162|  6.11k|    __m128i m_temp_reg_44;
  163|  6.11k|    __m128i m_temp_reg_45;
  164|  6.11k|    __m128i m_temp_reg_46;
  165|  6.11k|    __m128i m_temp_reg_47;
  166|       |
  167|  6.11k|    __m128i m_temp_reg_70;
  168|  6.11k|    __m128i m_temp_reg_71;
  169|  6.11k|    __m128i m_temp_reg_72;
  170|  6.11k|    __m128i m_temp_reg_73;
  171|  6.11k|    __m128i m_temp_reg_74;
  172|  6.11k|    __m128i m_temp_reg_75;
  173|  6.11k|    __m128i m_temp_reg_76;
  174|  6.11k|    __m128i m_temp_reg_77;
  175|       |
  176|  6.11k|    __m128i m_temp_reg_80;
  177|  6.11k|    __m128i m_temp_reg_81;
  178|  6.11k|    __m128i m_temp_reg_82;
  179|  6.11k|    __m128i m_temp_reg_83;
  180|  6.11k|    __m128i m_temp_reg_84;
  181|  6.11k|    __m128i m_temp_reg_85;
  182|  6.11k|    __m128i m_temp_reg_86;
  183|  6.11k|    __m128i m_temp_reg_87;
  184|       |
  185|  6.11k|    __m128i m_temp_reg_90;
  186|  6.11k|    __m128i m_temp_reg_91;
  187|  6.11k|    __m128i m_temp_reg_92;
  188|  6.11k|    __m128i m_temp_reg_93;
  189|  6.11k|    __m128i m_temp_reg_94;
  190|  6.11k|    __m128i m_temp_reg_95;
  191|  6.11k|    __m128i m_temp_reg_96;
  192|  6.11k|    __m128i m_temp_reg_97;
  193|       |
  194|  6.11k|    __m128i m_rdng_factor;
  195|  6.11k|    __m128i m_count;
  196|  6.11k|    __m128i m_coeff1, m_coeff2, m_coeff3, m_coeff4;
  197|  6.11k|    __m128i m_coeff5, m_coeff6, m_coeff7, m_coeff8;
  198|       |
  199|  6.11k|    __m128i temp1, temp2, temp3, temp4;
  200|  6.11k|    __m128i temp5, temp6, temp7, temp8;
  201|       |
  202|  6.11k|    __m128i all_zero_reg;
  203|  6.11k|    WORD32 i;
  204|       |
  205|       |    /*Lokesh*/
  206|  6.11k|    WORD32  zero_last24_cols_stg1;
  207|  6.11k|    WORD32  zero_last24_rows_stg1;
  208|  6.11k|    WORD32  zero_last28_rows_stg1;
  209|       |
  210|  6.11k|    WORD32  zero_last28_rows_stg2;
  211|  6.11k|    WORD32  zero_last24_rows_stg2;
  212|       |
  213|  6.11k|    WORD32  trans_size_stg1;
  214|       |
  215|  6.11k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  6.11k|#define IT_SHIFT_STAGE_1 7
  ------------------
  216|  6.11k|    WORD32 trans_size = TRANS_SIZE_32;
  ------------------
  |  |  422|  6.11k|#define TRANS_SIZE_32 32
  ------------------
  217|       |
  218|       |
  219|       |    /* Last 8 cols of 16x16 block are skipped based on the below flag : Lokesh */
  220|  6.11k|    zero_last24_cols_stg1 = ((zero_cols & 0xFFFFFF00) == 0xFFFFFF00) ? 1 : 0;
  ------------------
  |  Branch (220:29): [True: 3.15k, False: 2.95k]
  ------------------
  221|  6.11k|    zero_last24_rows_stg1 = ((zero_rows & 0xFFFFFF00) == 0xFFFFFF00) ? 1 : 0;
  ------------------
  |  Branch (221:29): [True: 3.84k, False: 2.27k]
  ------------------
  222|  6.11k|    zero_last28_rows_stg1 = ((zero_rows & 0xFFFFFFF0) == 0xFFFFFFF0) ? 1 : 0;
  ------------------
  |  Branch (222:29): [True: 1.98k, False: 4.12k]
  ------------------
  223|       |
  224|  6.11k|    zero_last28_rows_stg2 = ((zero_cols & 0xFFFFFFF0) == 0xFFFFFFF0) ? 1 : 0;
  ------------------
  |  Branch (224:29): [True: 2.78k, False: 3.32k]
  ------------------
  225|  6.11k|    zero_last24_rows_stg2 = zero_last24_cols_stg1;
  226|       |
  227|  6.11k|    if((zero_last28_rows_stg2) || (zero_last24_cols_stg1))
  ------------------
  |  Branch (227:8): [True: 2.77k, False: 3.33k]
  |  Branch (227:35): [True: 359, False: 2.97k]
  ------------------
  228|  3.15k|    {
  229|  3.15k|        trans_size_stg1 = 8;
  230|       |
  231|  3.15k|    }
  232|  2.95k|    else
  233|  2.95k|    {
  234|  2.95k|        trans_size_stg1 = 32;
  235|  2.95k|    }
  236|       |
  237|  6.11k|    all_zero_reg = _mm_setzero_si128();
  238|       |
  239|  6.11k|    o_temp_ptr  = pi2_tmp;
  240|  6.11k|    temp_ptr = (pi2_tmp + 1024);
  241|       |
  242|  6.11k|    pi2_tmp += 2048;
  243|  6.11k|    pi2_tmp_orig = pi2_tmp;
  244|       |
  245|  20.9k|    for(i = 0; i < trans_size_stg1; i += 8)
  ------------------
  |  Branch (245:16): [True: 14.8k, False: 6.11k]
  ------------------
  246|  14.8k|    {
  247|       |
  248|  14.8k|        {
  249|  14.8k|            WORD16 *pi2_tmp_src = pi2_src;
  250|       |
  251|  14.8k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  252|  14.8k|            pi2_tmp_src += (src_strd << 1);
  253|  14.8k|            m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  254|  14.8k|            pi2_tmp_src += (src_strd << 1);
  255|  14.8k|            m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  256|  14.8k|            pi2_tmp_src += (src_strd << 1);
  257|  14.8k|            m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  258|  14.8k|            pi2_tmp_src += (src_strd << 1);
  259|  14.8k|            m_temp_reg_74 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  260|  14.8k|            pi2_tmp_src += (src_strd << 1);
  261|  14.8k|            m_temp_reg_75 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  262|  14.8k|            pi2_tmp_src += (src_strd << 1);
  263|  14.8k|            m_temp_reg_76 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  264|  14.8k|            pi2_tmp_src += (src_strd << 1);
  265|  14.8k|            m_temp_reg_77 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  266|  14.8k|            pi2_tmp_src += (src_strd << 1);
  267|       |
  268|  14.8k|            m_temp_reg_80 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  269|  14.8k|            pi2_tmp_src += (src_strd << 1);
  270|  14.8k|            m_temp_reg_81 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  271|  14.8k|            pi2_tmp_src += (src_strd << 1);
  272|  14.8k|            m_temp_reg_82 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  273|  14.8k|            pi2_tmp_src += (src_strd << 1);
  274|  14.8k|            m_temp_reg_83 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  275|  14.8k|            pi2_tmp_src += (src_strd << 1);
  276|  14.8k|            m_temp_reg_84 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  277|  14.8k|            pi2_tmp_src += (src_strd << 1);
  278|  14.8k|            m_temp_reg_85 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  279|  14.8k|            pi2_tmp_src += (src_strd << 1);
  280|  14.8k|            m_temp_reg_86 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  281|  14.8k|            pi2_tmp_src += (src_strd << 1);
  282|  14.8k|            m_temp_reg_87 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
  283|  14.8k|        }
  284|       |
  285|  14.8k|        if(zero_last28_rows_stg1)
  ------------------
  |  Branch (285:12): [True: 2.90k, False: 11.9k]
  ------------------
  286|  2.90k|        {
  287|       |            /* eeo */
  288|       |            /* eeeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
  289|       |            /* eeeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
  290|  2.90k|            {
  291|  2.90k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64
  292|       |
  293|  2.90k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  294|       |
  295|  2.90k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  296|       |
  297|       |/* eeeo[0]= m_temp_reg_20  */
  298|       |/* eeeo[1]= m_temp_reg_21  */
  299|       |/* eeee[0]= m_temp_reg_22  */
  300|       |/* eeee[1]= m_temp_reg_23  */
  301|       |
  302|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  303|  2.90k|                m_temp_reg_40 = m_temp_reg_14;
  304|       |
  305|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  306|  2.90k|                m_temp_reg_43 = m_temp_reg_14;
  307|       |
  308|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  309|  2.90k|                m_temp_reg_42 = m_temp_reg_14; //m_temp_reg_16;
  310|       |
  311|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  312|  2.90k|                m_temp_reg_41 = m_temp_reg_14; //m_temp_reg_16;
  313|       |
  314|  2.90k|                m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
  315|       |
  316|  2.90k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  317|       |
  318|  2.90k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  319|       |
  320|       |/* eeeo[0]= m_temp_reg_20  */
  321|       |/* eeeo[1]= m_temp_reg_21  */
  322|       |/* eeee[0]= m_temp_reg_22  */
  323|       |/* eeee[1]= m_temp_reg_23  */
  324|       |
  325|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  326|  2.90k|                m_temp_reg_44 = m_temp_reg_14;
  327|       |
  328|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  329|  2.90k|                m_temp_reg_47 = m_temp_reg_14;
  330|       |
  331|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  332|  2.90k|                m_temp_reg_46 = m_temp_reg_14; //m_temp_reg_16;
  333|       |
  334|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  335|  2.90k|                m_temp_reg_45 = m_temp_reg_14; //m_temp_reg_16;
  336|       |
  337|       |
  338|  2.90k|            }
  339|       |            /* eo */
  340|  2.90k|            {
  341|  2.90k|                WORD16 *pi2_scratch = o_temp_ptr;
  342|       |
  343|  2.90k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90
  344|  2.90k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87
  345|  2.90k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80
  346|  2.90k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70
  347|  2.90k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57
  348|  2.90k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43
  349|  2.90k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25
  350|  2.90k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //9
  351|       |
  352|  2.90k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, all_zero_reg);
  353|       |
  354|  2.90k|                m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
  355|       |
  356|       |                /* eo0[0-3] */
  357|  2.90k|                {
  358|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  359|       |
  360|  2.90k|                    m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_71, all_zero_reg);
  361|       |
  362|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  363|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  364|       |
  365|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  366|  2.90k|                    pi2_scratch += 8;
  367|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  368|  2.90k|                    pi2_scratch += 8;
  369|       |
  370|  2.90k|                }
  371|       |
  372|       |                /* eo0[4-7] */
  373|  2.90k|                {
  374|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  375|       |
  376|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  377|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  378|       |
  379|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  380|  2.90k|                    pi2_scratch += 8;
  381|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  382|  2.90k|                    pi2_scratch += 8;
  383|       |
  384|  2.90k|                }
  385|       |                /* eo1[0-3] */
  386|  2.90k|                {
  387|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
  388|       |
  389|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
  390|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
  391|       |
  392|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  393|  2.90k|                    pi2_scratch += 8;
  394|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  395|  2.90k|                    pi2_scratch += 8;
  396|       |
  397|  2.90k|                }
  398|       |
  399|       |                /* eo1[4-7] */
  400|  2.90k|                {
  401|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff2);
  402|       |
  403|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
  404|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
  405|       |
  406|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  407|  2.90k|                    pi2_scratch += 8;
  408|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  409|  2.90k|                    pi2_scratch += 8;
  410|       |
  411|  2.90k|                }
  412|       |
  413|       |                /* eo2[0-3] */
  414|  2.90k|                {
  415|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  416|       |
  417|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  418|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  419|       |
  420|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  421|  2.90k|                    pi2_scratch += 8;
  422|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  423|  2.90k|                    pi2_scratch += 8;
  424|       |
  425|  2.90k|                }
  426|       |
  427|       |                /* eo2[4-7] */
  428|  2.90k|                {
  429|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
  430|       |
  431|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  432|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  433|       |
  434|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  435|  2.90k|                    pi2_scratch += 8;
  436|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  437|  2.90k|                    pi2_scratch += 8;
  438|       |
  439|  2.90k|                }
  440|       |
  441|       |                /**************************************************************************/
  442|       |
  443|       |
  444|       |                /* eo3[0-3] */
  445|  2.90k|                {
  446|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
  447|       |
  448|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
  449|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
  450|       |
  451|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  452|  2.90k|                    pi2_scratch += 8;
  453|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  454|  2.90k|                    pi2_scratch += 8;
  455|       |
  456|  2.90k|                }
  457|       |
  458|       |                /* eo3[4-7] */
  459|  2.90k|                {
  460|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff4);
  461|       |
  462|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
  463|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
  464|       |
  465|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  466|  2.90k|                    pi2_scratch += 8;
  467|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  468|  2.90k|                    pi2_scratch += 8;
  469|       |
  470|  2.90k|                }
  471|       |
  472|       |
  473|       |                /* eo4[0-3] */
  474|  2.90k|                {
  475|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
  476|       |
  477|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
  478|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
  479|       |
  480|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  481|  2.90k|                    pi2_scratch += 8;
  482|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  483|  2.90k|                    pi2_scratch += 8;
  484|       |
  485|  2.90k|                }
  486|       |                /* eo4[4-7] */
  487|  2.90k|                {
  488|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
  489|       |
  490|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
  491|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
  492|       |
  493|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  494|  2.90k|                    pi2_scratch += 8;
  495|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  496|  2.90k|                    pi2_scratch += 8;
  497|       |
  498|  2.90k|                }
  499|       |
  500|       |                /***********************************************************************/
  501|       |
  502|       |                /* eo5[0-3] */
  503|  2.90k|                {
  504|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff6);
  505|       |
  506|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  507|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  508|       |
  509|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  510|  2.90k|                    pi2_scratch += 8;
  511|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  512|  2.90k|                    pi2_scratch += 8;
  513|       |
  514|  2.90k|                }
  515|       |
  516|       |
  517|       |                /* eo5[4-7] */
  518|  2.90k|                {
  519|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff6);
  520|       |
  521|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  522|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  523|       |
  524|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  525|  2.90k|                    pi2_scratch += 8;
  526|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  527|  2.90k|                    pi2_scratch += 8;
  528|       |
  529|  2.90k|                }
  530|       |
  531|       |                /* eo6[0-3] */
  532|  2.90k|                {
  533|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff7);
  534|       |
  535|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
  536|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
  537|       |
  538|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  539|  2.90k|                    pi2_scratch += 8;
  540|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  541|  2.90k|                    pi2_scratch += 8;
  542|       |
  543|  2.90k|                }
  544|       |
  545|       |
  546|       |                /* eo6[4-7] */
  547|  2.90k|                {
  548|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff7);
  549|       |
  550|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
  551|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
  552|       |
  553|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  554|  2.90k|                    pi2_scratch += 8;
  555|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  556|  2.90k|                    pi2_scratch += 8;
  557|       |
  558|  2.90k|                }
  559|       |
  560|       |
  561|       |                /* eo7[0-3] */
  562|  2.90k|                {
  563|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff8);
  564|       |
  565|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  566|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  567|       |
  568|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  569|  2.90k|                    pi2_scratch += 8;
  570|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  571|  2.90k|                    pi2_scratch += 8;
  572|       |
  573|  2.90k|                }
  574|       |
  575|       |
  576|       |                /* eo7[4-7] */
  577|  2.90k|                {
  578|  2.90k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff8);
  579|       |
  580|  2.90k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  581|  2.90k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  582|       |
  583|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  584|  2.90k|                    pi2_scratch += 8;
  585|  2.90k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  586|  2.90k|                    pi2_scratch += 8;
  587|       |
  588|  2.90k|                }
  589|       |
  590|  2.90k|            }
  591|  2.90k|        }
  592|  11.9k|        else if(zero_last24_rows_stg1)
  ------------------
  |  Branch (592:17): [True: 4.85k, False: 7.10k]
  ------------------
  593|  4.85k|        {
  594|  4.85k|            {
  595|       |                /* eeo */
  596|       |                /* eeeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
  597|       |                /* eeeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
  598|       |
  599|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83 36
  600|  4.85k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36 -83
  601|       |
  602|  4.85k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64 64
  603|       |
  604|  4.85k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  605|       |
  606|  4.85k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  607|       |
  608|       |                /* eeeo[0]= m_temp_reg_20  */
  609|       |                /* eeeo[1]= m_temp_reg_21  */
  610|       |                /* eeee[0]= m_temp_reg_22  */
  611|       |                /* eeee[1]= m_temp_reg_23  */
  612|       |
  613|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  614|  4.85k|                m_temp_reg_40 = m_temp_reg_14;
  615|       |
  616|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  617|  4.85k|                m_temp_reg_43 = m_temp_reg_14;
  618|       |
  619|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  620|  4.85k|                m_temp_reg_42 = m_temp_reg_14; //m_temp_reg_16;
  621|       |
  622|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  623|  4.85k|                m_temp_reg_41 = m_temp_reg_14; //m_temp_reg_16;
  624|       |
  625|       |                /* for row 4 to 7 */
  626|       |
  627|  4.85k|                m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
  628|       |
  629|  4.85k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  630|       |
  631|  4.85k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  632|       |
  633|       |                /* eeeo[0]= m_temp_reg_20  */
  634|       |                /* eeeo[1]= m_temp_reg_21  */
  635|       |                /* eeee[0]= m_temp_reg_22  */
  636|       |                /* eeee[1]= m_temp_reg_23  */
  637|       |
  638|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  639|  4.85k|                m_temp_reg_44 = m_temp_reg_14;
  640|       |
  641|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  642|  4.85k|                m_temp_reg_47 = m_temp_reg_14;
  643|       |
  644|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  645|  4.85k|                m_temp_reg_46 = m_temp_reg_14; //m_temp_reg_16;
  646|       |
  647|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  648|  4.85k|                m_temp_reg_45 = m_temp_reg_14; //m_temp_reg_16;
  649|       |
  650|       |
  651|       |                // eeo[]
  652|       |                /* for(k = 0; k < 4; k++) */
  653|       |
  654|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
  655|  4.85k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75
  656|  4.85k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18
  657|  4.85k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[5][0]); //50 18
  658|       |
  659|  4.85k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, all_zero_reg);
  660|       |
  661|  4.85k|                m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
  662|       |
  663|  4.85k|                m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_72, all_zero_reg);
  664|       |
  665|  4.85k|                m_temp_reg_33 = _mm_setzero_si128();
  666|       |
  667|       |                /* eeo */
  668|  4.85k|                {
  669|       |                    /* eeo0[0-3] */
  670|  4.85k|                    {
  671|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  672|       |
  673|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  674|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  675|       |
  676|  4.85k|                        m_temp_reg_90 = m_temp_reg_34;
  677|  4.85k|                        m_temp_reg_97 = m_temp_reg_35;
  678|  4.85k|                    }
  679|       |                    /* eeo0[4-7] */
  680|  4.85k|                    {
  681|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  682|       |
  683|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  684|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  685|       |
  686|  4.85k|                        m_temp_reg_91 = m_temp_reg_34;
  687|  4.85k|                        m_temp_reg_96 = m_temp_reg_35;
  688|       |
  689|  4.85k|                    }
  690|       |
  691|       |                    /* eeo1[0-3] */
  692|  4.85k|                    {
  693|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
  694|       |
  695|       |                        /* e[1][0-3] stored in pi2_tmp[2][0-7] */
  696|       |                        /* e[6][0-3] stored in pi2_tmp[2][8-15] */
  697|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
  698|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
  699|       |
  700|  4.85k|                        m_temp_reg_92 = m_temp_reg_34;
  701|  4.85k|                        m_temp_reg_95 = m_temp_reg_35;
  702|       |
  703|  4.85k|                    }
  704|       |
  705|       |                    /* eo1[4-7] */
  706|  4.85k|                    {
  707|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff2);
  708|       |
  709|       |                        /* e[1][4-7] stored in pi2_tmp[3][0-7] */
  710|       |                        /* e[6][4-7] stored in pi2_tmp[3][8-15] */
  711|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
  712|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
  713|       |
  714|  4.85k|                        m_temp_reg_93 = m_temp_reg_34;
  715|  4.85k|                        m_temp_reg_94 = m_temp_reg_35;
  716|       |
  717|       |
  718|  4.85k|                    }
  719|       |
  720|       |                    /* eo2[0-3] */
  721|  4.85k|                    {
  722|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
  723|       |
  724|       |                        /* e[2][0-3] stored in pi2_tmp[4][0-7] */
  725|       |                        /* e[5][0-3] stored in pi2_tmp[4][8-15] */
  726|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  727|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  728|       |
  729|  4.85k|                        temp1 = m_temp_reg_34;
  730|  4.85k|                        temp7 = m_temp_reg_35;
  731|       |
  732|  4.85k|                    }
  733|       |
  734|       |                    /* eo2[4-7] */
  735|  4.85k|                    {
  736|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff4);
  737|       |
  738|       |                        /* e[2][4-7] stored in pi2_tmp[5][0-7] */
  739|       |                        /* e[5][4-7] stored in pi2_tmp[5][8-15] */
  740|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  741|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  742|       |
  743|  4.85k|                        temp2 = m_temp_reg_34;
  744|  4.85k|                        temp6 = m_temp_reg_35;
  745|       |
  746|  4.85k|                    }
  747|       |
  748|       |                    /* eo3[0-3] */
  749|  4.85k|                    {
  750|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  751|       |
  752|       |                        /* e[3][0-3] stored in pi2_tmp[6][0-7] */
  753|       |                        /* e[4][0-3] stored in pi2_tmp[6][8-15] */
  754|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
  755|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
  756|       |
  757|  4.85k|                        temp3 = m_temp_reg_34;
  758|  4.85k|                        temp5 = m_temp_reg_35;
  759|       |
  760|  4.85k|                    }
  761|       |
  762|       |
  763|       |                    /* eo3[4-7] */
  764|  4.85k|                    {
  765|  4.85k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
  766|       |
  767|       |                        /* e[3][4-7] stored in pi2_tmp[7][0-7] */
  768|       |                        /* e[4][4-7] stored in pi2_tmp[7][8-15] */
  769|  4.85k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
  770|  4.85k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
  771|       |
  772|  4.85k|                        temp4 = m_temp_reg_34;
  773|  4.85k|                        temp8 = m_temp_reg_35;
  774|       |
  775|       |
  776|  4.85k|                    }
  777|       |                    /* All values of ee[] array in pi2_temp */
  778|       |
  779|  4.85k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
  780|  4.85k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[1][0]); //80 70
  781|  4.85k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57 43
  782|  4.85k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25 9
  783|       |
  784|  4.85k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  785|       |
  786|  4.85k|                    m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
  787|  4.85k|                    m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
  788|       |
  789|  4.85k|                }
  790|  4.85k|            }
  791|       |            /* eo */
  792|  4.85k|            {
  793|       |
  794|  4.85k|                WORD16 *pi2_scratch = o_temp_ptr;
  795|       |
  796|       |                /* eo0[0-3] */
  797|  4.85k|                {
  798|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  799|       |
  800|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_30);
  801|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_30);
  802|       |
  803|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  804|  4.85k|                    pi2_scratch += 8;
  805|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  806|  4.85k|                    pi2_scratch += 8;
  807|       |
  808|  4.85k|                }
  809|       |
  810|       |
  811|       |                /* eo0[4-7] */
  812|  4.85k|                {
  813|  4.85k|                    m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  814|       |
  815|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  816|       |
  817|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_30);
  818|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_30);
  819|       |
  820|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  821|  4.85k|                    pi2_scratch += 8;
  822|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  823|  4.85k|                    pi2_scratch += 8;
  824|       |
  825|  4.85k|                }
  826|       |
  827|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
  828|       |
  829|       |                /* eo1[0-3] */
  830|  4.85k|                {
  831|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  832|       |
  833|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_30);
  834|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_30);
  835|       |
  836|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  837|  4.85k|                    pi2_scratch += 8;
  838|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  839|  4.85k|                    pi2_scratch += 8;
  840|       |
  841|  4.85k|                }
  842|       |
  843|       |
  844|       |                /* eo1[4-7] */
  845|  4.85k|                {
  846|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  847|       |
  848|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_30);
  849|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_30);
  850|       |
  851|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  852|  4.85k|                    pi2_scratch += 8;
  853|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  854|  4.85k|                    pi2_scratch += 8;
  855|       |
  856|  4.85k|                }
  857|       |
  858|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
  859|       |
  860|       |                /* eo2[0-3] */
  861|  4.85k|                {
  862|       |
  863|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  864|       |
  865|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp1, m_temp_reg_30);
  866|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp1, m_temp_reg_30);
  867|       |
  868|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  869|  4.85k|                    pi2_scratch += 8;
  870|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  871|  4.85k|                    pi2_scratch += 8;
  872|       |
  873|  4.85k|                }
  874|       |
  875|       |                /* eo2[4-7] */
  876|  4.85k|                {
  877|       |
  878|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  879|       |
  880|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp2, m_temp_reg_30);
  881|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp2, m_temp_reg_30);
  882|       |
  883|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  884|  4.85k|                    pi2_scratch += 8;
  885|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  886|  4.85k|                    pi2_scratch += 8;
  887|       |
  888|  4.85k|                }
  889|       |
  890|       |                /**************************************************************************/
  891|       |
  892|       |
  893|       |
  894|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
  895|       |
  896|       |                /* eo3[0-3] */
  897|  4.85k|                {
  898|       |
  899|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  900|       |
  901|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp3, m_temp_reg_30);
  902|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp3, m_temp_reg_30);
  903|       |
  904|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  905|  4.85k|                    pi2_scratch += 8;
  906|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  907|  4.85k|                    pi2_scratch += 8;
  908|       |
  909|  4.85k|                }
  910|       |
  911|       |
  912|       |                /* eo3[4-7] */
  913|  4.85k|                {
  914|       |
  915|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  916|       |
  917|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp4, m_temp_reg_30);
  918|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp4, m_temp_reg_30);
  919|       |
  920|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  921|  4.85k|                    pi2_scratch += 8;
  922|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  923|  4.85k|                    pi2_scratch += 8;
  924|       |
  925|  4.85k|                }
  926|       |
  927|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
  928|       |
  929|       |                /* eo4[0-3] */
  930|  4.85k|                {
  931|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  932|       |
  933|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp5, m_temp_reg_30);
  934|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp5, m_temp_reg_30);
  935|       |
  936|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  937|  4.85k|                    pi2_scratch += 8;
  938|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  939|  4.85k|                    pi2_scratch += 8;
  940|       |
  941|  4.85k|                }
  942|       |                /* eo4[4-7] */
  943|  4.85k|                {
  944|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  945|       |
  946|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp8, m_temp_reg_30);
  947|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp8, m_temp_reg_30);
  948|       |
  949|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  950|  4.85k|                    pi2_scratch += 8;
  951|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  952|  4.85k|                    pi2_scratch += 8;
  953|       |
  954|  4.85k|                }
  955|       |
  956|       |                /***********************************************************************/
  957|       |
  958|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
  959|       |
  960|       |                /* eo5[0-3] */
  961|  4.85k|                {
  962|       |
  963|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  964|       |
  965|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp7, m_temp_reg_30);
  966|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp7, m_temp_reg_30);
  967|       |
  968|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  969|  4.85k|                    pi2_scratch += 8;
  970|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  971|  4.85k|                    pi2_scratch += 8;
  972|       |
  973|  4.85k|                }
  974|       |
  975|       |
  976|       |                /* eo5[4-7] */
  977|  4.85k|                {
  978|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  979|       |
  980|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(temp6, m_temp_reg_30);
  981|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(temp6, m_temp_reg_30);
  982|       |
  983|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  984|  4.85k|                    pi2_scratch += 8;
  985|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  986|  4.85k|                    pi2_scratch += 8;
  987|       |
  988|  4.85k|                }
  989|       |
  990|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
  991|       |
  992|       |                /* eo6[0-3] */
  993|  4.85k|                {
  994|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  995|       |
  996|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_30);
  997|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_30);
  998|       |
  999|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1000|  4.85k|                    pi2_scratch += 8;
 1001|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1002|  4.85k|                    pi2_scratch += 8;
 1003|       |
 1004|  4.85k|                }
 1005|       |
 1006|       |
 1007|       |                /* eo6[4-7] */
 1008|  4.85k|                {
 1009|       |
 1010|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1011|       |
 1012|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_30);
 1013|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_30);
 1014|       |
 1015|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1016|  4.85k|                    pi2_scratch += 8;
 1017|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1018|  4.85k|                    pi2_scratch += 8;
 1019|       |
 1020|  4.85k|                }
 1021|       |
 1022|  4.85k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 1023|       |
 1024|       |                /* eo7[0-3] */
 1025|  4.85k|                {
 1026|       |
 1027|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1028|       |
 1029|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_30);
 1030|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_30);
 1031|       |
 1032|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1033|  4.85k|                    pi2_scratch += 8;
 1034|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1035|  4.85k|                    pi2_scratch += 8;
 1036|       |
 1037|  4.85k|                }
 1038|       |
 1039|       |
 1040|       |                /* eo7[4-7] */
 1041|  4.85k|                {
 1042|  4.85k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1043|       |
 1044|  4.85k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_30);
 1045|  4.85k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_30);
 1046|       |
 1047|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1048|  4.85k|                    pi2_scratch += 8;
 1049|  4.85k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1050|  4.85k|                    pi2_scratch += 8;
 1051|       |
 1052|  4.85k|                }
 1053|       |
 1054|  4.85k|            }
 1055|       |
 1056|  4.85k|        }
 1057|  7.10k|        else
 1058|  7.10k|        {
 1059|       |
 1060|  7.10k|            {
 1061|       |                /* eeo */
 1062|       |                /* eeeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
 1063|       |                /* eeeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
 1064|       |
 1065|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83 36
 1066|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36 -83
 1067|       |
 1068|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64 64
 1069|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[3][0]); //64 -64
 1070|       |
 1071|  7.10k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_84);
 1072|       |
 1073|  7.10k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_80);
 1074|       |
 1075|  7.10k|                m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);  /* eeeo[0] */
 1076|  7.10k|                m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);  /* eeeo[1] */
 1077|       |
 1078|  7.10k|                m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);  /* eeee[0] */
 1079|  7.10k|                m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);  /* eeee[1] */
 1080|       |
 1081|       |
 1082|       |                /* eeeo[0]= m_temp_reg_20  */
 1083|       |                /* eeeo[1]= m_temp_reg_21  */
 1084|       |                /* eeee[0]= m_temp_reg_22  */
 1085|       |                /* eeee[1]= m_temp_reg_23  */
 1086|       |
 1087|       |                /* eee[0] = eeee[0] + eeeo[0]; */
 1088|  7.10k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[0] */
 1089|       |
 1090|       |                /* eee[3] = eeee[0] - eeeo[0]; */
 1091|  7.10k|                m_temp_reg_43 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[1] */
 1092|       |
 1093|       |                /* eee[2] = eeee[1] - eeeo[1]; */
 1094|  7.10k|                m_temp_reg_42 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[1] */
 1095|       |
 1096|       |                /* eee[1] = eeee[1] + eeeo[1];*/
 1097|  7.10k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[0] */
 1098|       |
 1099|       |                /* for row 4 to 7 */
 1100|       |
 1101|  7.10k|                m_temp_reg_74 = _mm_srli_si128(m_temp_reg_74, 8);
 1102|  7.10k|                m_temp_reg_84 = _mm_srli_si128(m_temp_reg_84, 8);
 1103|       |
 1104|       |                /* Interleaving row 8 and row 24*/
 1105|  7.10k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_84);
 1106|       |
 1107|  7.10k|                m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 1108|  7.10k|                m_temp_reg_80 = _mm_srli_si128(m_temp_reg_80, 8);
 1109|       |
 1110|  7.10k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_80);
 1111|       |
 1112|  7.10k|                m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);  /* eeeo[0] */
 1113|  7.10k|                m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);  /* eeeo[1] */
 1114|       |
 1115|  7.10k|                m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);  /* eeee[0] */
 1116|  7.10k|                m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);  /* eeee[1] */
 1117|       |
 1118|       |
 1119|       |                /* eeeo[0]= m_temp_reg_20  */
 1120|       |                /* eeeo[1]= m_temp_reg_21  */
 1121|       |                /* eeee[0]= m_temp_reg_22  */
 1122|       |                /* eeee[1]= m_temp_reg_23  */
 1123|       |
 1124|       |                /* eee[0] = eeee[0] + eeeo[0]; */
 1125|  7.10k|                m_temp_reg_44 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[0] */
 1126|       |
 1127|       |                /* eee[3] = eeee[0] - eeeo[0]; */
 1128|  7.10k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[1] */
 1129|       |
 1130|       |                /* eee[2] = eeee[1] - eeeo[1]; */
 1131|  7.10k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[1] */
 1132|       |
 1133|       |                /* eee[1] = eeee[1] + eeeo[1];*/
 1134|  7.10k|                m_temp_reg_45 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[0] */
 1135|       |
 1136|       |
 1137|       |                // eeo[]
 1138|       |                /* for(k = 0; k < 4; k++) */
 1139|       |
 1140|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
 1141|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[5][0]); //50 18
 1142|       |
 1143|       |                /* eeo */
 1144|  7.10k|                {
 1145|       |                    /* eeo0[0-3] */
 1146|  7.10k|                    {
 1147|  7.10k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1148|  7.10k|                        m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_86);
 1149|       |
 1150|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1151|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1152|       |
 1153|  7.10k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1154|       |
 1155|  7.10k|                        m_temp_reg_90 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1156|  7.10k|                        m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1157|       |
 1158|  7.10k|                    }
 1159|       |
 1160|  7.10k|                    m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
 1161|  7.10k|                    m_temp_reg_76 = _mm_srli_si128(m_temp_reg_76, 8);
 1162|  7.10k|                    m_temp_reg_82 = _mm_srli_si128(m_temp_reg_82, 8);
 1163|  7.10k|                    m_temp_reg_86 = _mm_srli_si128(m_temp_reg_86, 8);
 1164|       |
 1165|       |                    /* eeo0[4-7] */
 1166|  7.10k|                    {
 1167|  7.10k|                        m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1168|  7.10k|                        m_temp_reg_15 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_86);
 1169|       |
 1170|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1171|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1172|       |
 1173|  7.10k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1174|       |
 1175|  7.10k|                        m_temp_reg_91 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
 1176|  7.10k|                        m_temp_reg_96 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
 1177|       |
 1178|  7.10k|                    }
 1179|       |
 1180|       |
 1181|  7.10k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75 -18
 1182|  7.10k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[7][0]); //89  50
 1183|       |
 1184|       |                    /* eeo1[0-3] */
 1185|  7.10k|                    {
 1186|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1187|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 1188|       |
 1189|  7.10k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
 1190|  7.10k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
 1191|       |
 1192|  7.10k|                        m_temp_reg_92 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_31);
 1193|  7.10k|                        m_temp_reg_95 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_31);
 1194|       |
 1195|  7.10k|                    }
 1196|       |
 1197|       |                    /* eeo1[4-7] */
 1198|  7.10k|                    {
 1199|       |
 1200|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1201|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff4);
 1202|       |
 1203|  7.10k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
 1204|  7.10k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
 1205|       |
 1206|  7.10k|                        m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_31);
 1207|  7.10k|                        m_temp_reg_94 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_31);
 1208|       |
 1209|       |
 1210|  7.10k|                    }
 1211|       |
 1212|  7.10k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[8][0]); //50 -89
 1213|  7.10k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18  75
 1214|       |
 1215|       |                    /* eeo2[0-3] */
 1216|  7.10k|                    {
 1217|       |
 1218|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1219|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 1220|       |
 1221|       |                        /* e[2][0-3] stored in pi2_tmp[4][0-7] */
 1222|       |                        /* e[5][0-3] stored in pi2_tmp[4][8-15] */
 1223|       |
 1224|  7.10k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
 1225|  7.10k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
 1226|       |
 1227|  7.10k|                        temp1 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1228|  7.10k|                        temp7 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1229|       |
 1230|  7.10k|                    }
 1231|       |
 1232|       |                    /* eeo2[4-7] */
 1233|  7.10k|                    {
 1234|       |
 1235|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1236|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff4);
 1237|       |
 1238|       |                        /* e[2][4-7] stored in pi2_tmp[5][0-7] */
 1239|       |                        /* e[5][4-7] stored in pi2_tmp[5][8-15] */
 1240|       |
 1241|  7.10k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
 1242|  7.10k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
 1243|       |
 1244|  7.10k|                        temp2 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1245|  7.10k|                        temp6 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1246|       |
 1247|  7.10k|                    }
 1248|       |
 1249|  7.10k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[10][0]); //18 -50
 1250|  7.10k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[11][0]); //75  -89
 1251|       |
 1252|       |                    /* eeo3[0-3] */
 1253|  7.10k|                    {
 1254|       |
 1255|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1256|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 1257|       |
 1258|       |                        /* e[3][0-3] stored in pi2_tmp[6][0-7] */
 1259|       |                        /* e[4][0-3] stored in pi2_tmp[6][8-15] */
 1260|       |
 1261|  7.10k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
 1262|  7.10k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
 1263|       |
 1264|  7.10k|                        temp3 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1265|  7.10k|                        temp5 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1266|       |
 1267|       |
 1268|  7.10k|                    }
 1269|       |
 1270|       |                    /* eeo3[4-7] */
 1271|  7.10k|                    {
 1272|       |
 1273|  7.10k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1274|  7.10k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff4);
 1275|       |
 1276|       |                        /* e[3][4-7] stored in pi2_tmp[7][0-7] */
 1277|       |                        /* e[4][4-7] stored in pi2_tmp[7][8-15] */
 1278|       |
 1279|  7.10k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
 1280|  7.10k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
 1281|  7.10k|                        temp4 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1282|  7.10k|                        temp8 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1283|       |
 1284|  7.10k|                    }
 1285|       |
 1286|       |
 1287|       |                    /* All values of ee[] array in pi2_temp */
 1288|       |
 1289|       |                    /* for(k = 0; k < 8; k++) */
 1290|  7.10k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 1291|  7.10k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[1][0]); //80 70
 1292|  7.10k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57 43
 1293|  7.10k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25 9
 1294|  7.10k|                }
 1295|  7.10k|            }
 1296|       |            /* eo */
 1297|  7.10k|            {
 1298|       |
 1299|  7.10k|                WORD16 *pi2_scratch = o_temp_ptr;
 1300|       |
 1301|  7.10k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1302|  7.10k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1303|  7.10k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_81, m_temp_reg_83);
 1304|  7.10k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_85, m_temp_reg_87);
 1305|       |
 1306|  7.10k|                m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 1307|  7.10k|                m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
 1308|  7.10k|                m_temp_reg_75 = _mm_srli_si128(m_temp_reg_75, 8);
 1309|  7.10k|                m_temp_reg_77 = _mm_srli_si128(m_temp_reg_77, 8);
 1310|       |
 1311|  7.10k|                m_temp_reg_81 = _mm_srli_si128(m_temp_reg_81, 8);
 1312|  7.10k|                m_temp_reg_83 = _mm_srli_si128(m_temp_reg_83, 8);
 1313|  7.10k|                m_temp_reg_85 = _mm_srli_si128(m_temp_reg_85, 8);
 1314|  7.10k|                m_temp_reg_87 = _mm_srli_si128(m_temp_reg_87, 8);
 1315|       |
 1316|       |                /* eo0[0-3] */
 1317|  7.10k|                {
 1318|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1319|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1320|       |
 1321|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1322|       |
 1323|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1324|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1325|       |
 1326|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1327|       |
 1328|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1329|       |
 1330|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_30);
 1331|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_30);
 1332|       |
 1333|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1334|  7.10k|                    pi2_scratch += 8;
 1335|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1336|  7.10k|                    pi2_scratch += 8;
 1337|       |
 1338|  7.10k|                }
 1339|       |                /* eo0[4-7] */
 1340|  7.10k|                {
 1341|  7.10k|                    m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1342|  7.10k|                    m_temp_reg_15 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1343|  7.10k|                    m_temp_reg_16 = _mm_unpacklo_epi16(m_temp_reg_81, m_temp_reg_83);
 1344|  7.10k|                    m_temp_reg_17 = _mm_unpacklo_epi16(m_temp_reg_85, m_temp_reg_87);
 1345|       |
 1346|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1347|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1348|       |
 1349|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1350|       |
 1351|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1352|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1353|       |
 1354|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1355|       |
 1356|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1357|       |
 1358|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_30);
 1359|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_30);
 1360|       |
 1361|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1362|  7.10k|                    pi2_scratch += 8;
 1363|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1364|  7.10k|                    pi2_scratch += 8;
 1365|       |
 1366|  7.10k|                }
 1367|       |
 1368|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
 1369|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //0  -43
 1370|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80  90
 1371|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70  25
 1372|       |
 1373|       |                /* eo1[0-3] */
 1374|  7.10k|                {
 1375|       |
 1376|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1377|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1378|       |
 1379|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1380|       |
 1381|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1382|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1383|       |
 1384|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1385|       |
 1386|  7.10k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_32);
 1387|       |
 1388|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_30);
 1389|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_30);
 1390|       |
 1391|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1392|  7.10k|                    pi2_scratch += 8;
 1393|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1394|  7.10k|                    pi2_scratch += 8;
 1395|       |
 1396|  7.10k|                }
 1397|       |
 1398|       |                /* eo1[4-7] */
 1399|  7.10k|                {
 1400|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1401|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1402|       |
 1403|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1404|       |
 1405|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1406|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1407|       |
 1408|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1409|       |
 1410|  7.10k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_32);
 1411|       |
 1412|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_30);
 1413|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_30);
 1414|       |
 1415|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1416|  7.10k|                    pi2_scratch += 8;
 1417|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1418|  7.10k|                    pi2_scratch += 8;
 1419|       |
 1420|  7.10k|                }
 1421|       |
 1422|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
 1423|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[9][0]); //70  87
 1424|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[10][0]); //-25  57
 1425|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[11][0]); //90  43
 1426|       |
 1427|       |                /* eo2[0-3] */
 1428|  7.10k|                {
 1429|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1430|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1431|       |
 1432|  7.10k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 1433|       |
 1434|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1435|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1436|       |
 1437|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1438|       |
 1439|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1440|       |
 1441|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp1, m_temp_reg_30);
 1442|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp1, m_temp_reg_30);
 1443|       |
 1444|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1445|  7.10k|                    pi2_scratch += 8;
 1446|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1447|  7.10k|                    pi2_scratch += 8;
 1448|       |
 1449|  7.10k|                }
 1450|       |
 1451|       |
 1452|       |                /* eo2[4-7] */
 1453|  7.10k|                {
 1454|       |
 1455|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1456|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1457|       |
 1458|  7.10k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 1459|       |
 1460|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1461|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1462|       |
 1463|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1464|       |
 1465|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1466|       |
 1467|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp2, m_temp_reg_30);
 1468|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp2, m_temp_reg_30);
 1469|       |
 1470|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1471|  7.10k|                    pi2_scratch += 8;
 1472|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1473|  7.10k|                    pi2_scratch += 8;
 1474|       |
 1475|  7.10k|                }
 1476|       |                /**************************************************************************/
 1477|       |
 1478|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
 1479|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[13][0]); //-87  9
 1480|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[14][0]); //90  25
 1481|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[15][0]); //80  57
 1482|       |
 1483|       |                /* eo3[0-3] */
 1484|  7.10k|                {
 1485|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1486|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1487|       |
 1488|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1489|       |
 1490|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1491|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1492|       |
 1493|  7.10k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_32, m_temp_reg_33);
 1494|       |
 1495|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1496|       |
 1497|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp3, m_temp_reg_30);
 1498|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp3, m_temp_reg_30);
 1499|       |
 1500|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1501|  7.10k|                    pi2_scratch += 8;
 1502|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1503|  7.10k|                    pi2_scratch += 8;
 1504|       |
 1505|  7.10k|                }
 1506|       |
 1507|       |
 1508|       |                /* eo3[4-7] */
 1509|  7.10k|                {
 1510|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1511|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1512|       |
 1513|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1514|       |
 1515|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1516|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1517|       |
 1518|  7.10k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_32, m_temp_reg_33);
 1519|       |
 1520|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1521|       |
 1522|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp4, m_temp_reg_30);
 1523|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp4, m_temp_reg_30);
 1524|       |
 1525|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1526|  7.10k|                    pi2_scratch += 8;
 1527|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1528|  7.10k|                    pi2_scratch += 8;
 1529|       |
 1530|  7.10k|                }
 1531|       |
 1532|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
 1533|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[17][0]); //-25  90
 1534|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[18][0]); //9  87
 1535|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43  70
 1536|       |
 1537|       |                /* eo4[0-3] */
 1538|  7.10k|                {
 1539|       |
 1540|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1541|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1542|       |
 1543|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1544|       |
 1545|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1546|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1547|       |
 1548|  7.10k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
 1549|       |
 1550|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1551|       |
 1552|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp5, m_temp_reg_30);
 1553|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp5, m_temp_reg_30);
 1554|       |
 1555|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1556|  7.10k|                    pi2_scratch += 8;
 1557|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1558|  7.10k|                    pi2_scratch += 8;
 1559|       |
 1560|  7.10k|                }
 1561|       |
 1562|       |
 1563|       |                /* eo4[4-7] */
 1564|  7.10k|                {
 1565|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1566|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1567|       |
 1568|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1569|       |
 1570|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1571|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1572|       |
 1573|  7.10k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
 1574|       |
 1575|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1576|       |
 1577|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp8, m_temp_reg_30);
 1578|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp8, m_temp_reg_30);
 1579|       |
 1580|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1581|  7.10k|                    pi2_scratch += 8;
 1582|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1583|  7.10k|                    pi2_scratch += 8;
 1584|       |
 1585|  7.10k|                }
 1586|       |
 1587|       |                /***********************************************************************/
 1588|       |
 1589|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
 1590|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[21][0]); //57  25
 1591|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[22][0]); //-87  70
 1592|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[23][0]); //9  -80
 1593|       |
 1594|       |                /* eo5[0-3] */
 1595|  7.10k|                {
 1596|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1597|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1598|       |
 1599|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1600|       |
 1601|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1602|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1603|       |
 1604|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1605|       |
 1606|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1607|       |
 1608|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp7, m_temp_reg_30);
 1609|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp7, m_temp_reg_30);
 1610|       |
 1611|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1612|  7.10k|                    pi2_scratch += 8;
 1613|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1614|  7.10k|                    pi2_scratch += 8;
 1615|       |
 1616|  7.10k|                }
 1617|       |
 1618|       |
 1619|       |                /* eo5[4-7] */
 1620|  7.10k|                {
 1621|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1622|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1623|       |
 1624|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1625|       |
 1626|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1627|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1628|       |
 1629|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1630|       |
 1631|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1632|       |
 1633|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(temp6, m_temp_reg_30);
 1634|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(temp6, m_temp_reg_30);
 1635|       |
 1636|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1637|  7.10k|                    pi2_scratch += 8;
 1638|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1639|  7.10k|                    pi2_scratch += 8;
 1640|       |
 1641|  7.10k|                }
 1642|       |
 1643|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 1644|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[25][0]); //90  -80
 1645|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[26][0]); //43  9
 1646|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[27][0]); //-57  87
 1647|       |
 1648|       |                /* eo6[0-3] */
 1649|  7.10k|                {
 1650|       |
 1651|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1652|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1653|       |
 1654|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1655|       |
 1656|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1657|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1658|       |
 1659|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1660|       |
 1661|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1662|       |
 1663|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_30);
 1664|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_30);
 1665|       |
 1666|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1667|  7.10k|                    pi2_scratch += 8;
 1668|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1669|  7.10k|                    pi2_scratch += 8;
 1670|       |
 1671|  7.10k|                }
 1672|       |
 1673|       |
 1674|       |                /* eo6[4-7] */
 1675|  7.10k|                {
 1676|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1677|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1678|       |
 1679|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1680|       |
 1681|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1682|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1683|       |
 1684|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1685|       |
 1686|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1687|       |
 1688|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_30);
 1689|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_30);
 1690|       |
 1691|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1692|  7.10k|                    pi2_scratch += 8;
 1693|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1694|  7.10k|                    pi2_scratch += 8;
 1695|       |
 1696|  7.10k|                }
 1697|       |
 1698|  7.10k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 1699|  7.10k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[29][0]); //43  -57
 1700|  7.10k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[30][0]); //70  -80
 1701|  7.10k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[31][0]); //87  -90
 1702|       |
 1703|       |                /* eo7[0-3] */
 1704|  7.10k|                {
 1705|       |
 1706|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1707|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1708|       |
 1709|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1710|       |
 1711|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1712|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1713|       |
 1714|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1715|       |
 1716|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1717|       |
 1718|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_30);
 1719|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_30);
 1720|       |
 1721|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1722|  7.10k|                    pi2_scratch += 8;
 1723|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1724|  7.10k|                    pi2_scratch += 8;
 1725|       |
 1726|  7.10k|                }
 1727|       |
 1728|       |
 1729|       |                /* eo7[4-7] */
 1730|  7.10k|                {
 1731|       |
 1732|  7.10k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1733|  7.10k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1734|       |
 1735|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1736|       |
 1737|  7.10k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1738|  7.10k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1739|       |
 1740|  7.10k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1741|       |
 1742|  7.10k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1743|       |
 1744|  7.10k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_30);
 1745|  7.10k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_30);
 1746|       |
 1747|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1748|  7.10k|                    pi2_scratch += 8;
 1749|  7.10k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1750|  7.10k|                    pi2_scratch += 8;
 1751|       |
 1752|  7.10k|                }
 1753|       |
 1754|  7.10k|            }
 1755|       |
 1756|  7.10k|        }
 1757|       |        /*  All e[] are done */
 1758|       |        /****************************/
 1759|       |
 1760|  14.8k|        {
 1761|       |
 1762|  14.8k|            WORD16 *pi2_tmp_src = pi2_src + src_strd;
 1763|       |
 1764|  14.8k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1765|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1766|  14.8k|            m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1767|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1768|  14.8k|            m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1769|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1770|  14.8k|            m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1771|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1772|  14.8k|            m_temp_reg_74 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1773|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1774|  14.8k|            m_temp_reg_75 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1775|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1776|  14.8k|            m_temp_reg_76 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1777|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1778|  14.8k|            m_temp_reg_77 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1779|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1780|       |
 1781|  14.8k|            m_temp_reg_80 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1782|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1783|  14.8k|            m_temp_reg_81 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1784|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1785|  14.8k|            m_temp_reg_82 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1786|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1787|  14.8k|            m_temp_reg_83 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1788|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1789|  14.8k|            m_temp_reg_84 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1790|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1791|  14.8k|            m_temp_reg_85 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1792|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1793|  14.8k|            m_temp_reg_86 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1794|  14.8k|            pi2_tmp_src += (src_strd << 1);
 1795|  14.8k|            m_temp_reg_87 = _mm_loadu_si128((__m128i *)pi2_tmp_src);
 1796|  14.8k|        }
 1797|       |
 1798|  14.8k|        if(zero_last28_rows_stg1)
  ------------------
  |  Branch (1798:12): [True: 2.91k, False: 11.9k]
  ------------------
 1799|  2.91k|        {
 1800|       |            /* o & stage 1 out */
 1801|  2.91k|            {
 1802|  2.91k|                WORD32 j;
 1803|  2.91k|                WORD16 *pi2_src_scratch = o_temp_ptr;
 1804|  2.91k|                WORD16 *pi2_dst_scratch = temp_ptr;
 1805|  2.91k|                WORD32 out_stride = (trans_size << 1);
 1806|  2.91k|                WORD32 in_stride = trans_size;
 1807|       |
 1808|  8.73k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (1808:28): [True: 5.82k, False: 2.91k]
  ------------------
 1809|  5.82k|                {
 1810|  5.82k|                    if(j)
  ------------------
  |  Branch (1810:24): [True: 2.91k, False: 2.91k]
  ------------------
 1811|  2.91k|                    {
 1812|  2.91k|                        m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 1813|  2.91k|                        m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 1814|  2.91k|                    }
 1815|       |
 1816|  5.82k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 1817|       |
 1818|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 1819|       |
 1820|       |                    /* o0[0-3] */
 1821|  5.82k|                    {
 1822|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1823|       |
 1824|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1825|  5.82k|                        pi2_src_scratch += in_stride;
 1826|       |
 1827|  5.82k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1828|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1829|       |
 1830|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1831|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1832|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1833|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1834|       |
 1835|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1836|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1837|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1838|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1839|       |
 1840|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1841|       |
 1842|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1843|  5.82k|                        pi2_dst_scratch += out_stride;
 1844|       |
 1845|  5.82k|                    }
 1846|       |
 1847|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 1848|       |
 1849|       |                    /* o1[0-3] */
 1850|  5.82k|                    {
 1851|       |
 1852|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1853|       |
 1854|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1855|  5.82k|                        pi2_src_scratch += in_stride;
 1856|       |
 1857|  5.82k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1858|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1859|       |
 1860|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1861|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1862|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1863|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1864|       |
 1865|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1866|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1867|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1868|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1869|       |
 1870|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1871|       |
 1872|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1873|  5.82k|                        pi2_dst_scratch += out_stride;
 1874|       |
 1875|  5.82k|                    }
 1876|       |
 1877|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 1878|       |
 1879|       |                    /* o2[0-3] */
 1880|  5.82k|                    {
 1881|       |
 1882|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1883|       |
 1884|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1885|  5.82k|                        pi2_src_scratch += in_stride;
 1886|       |
 1887|  5.82k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1888|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1889|       |
 1890|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1891|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1892|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1893|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1894|       |
 1895|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1896|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1897|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1898|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1899|       |
 1900|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1901|       |
 1902|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1903|  5.82k|                        pi2_dst_scratch += out_stride;
 1904|       |
 1905|  5.82k|                    }
 1906|       |
 1907|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 1908|       |
 1909|       |                    /* o3[0-3] */
 1910|  5.82k|                    {
 1911|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1912|       |
 1913|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1914|  5.82k|                        pi2_src_scratch += in_stride;
 1915|       |
 1916|  5.82k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1917|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1918|       |
 1919|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1920|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1921|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1922|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1923|       |
 1924|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1925|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1926|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1927|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1928|       |
 1929|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1930|       |
 1931|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1932|  5.82k|                        pi2_dst_scratch += out_stride;
 1933|       |
 1934|  5.82k|                    }
 1935|       |
 1936|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 1937|       |
 1938|       |                    /* o4[0-3] */
 1939|  5.82k|                    {
 1940|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1941|       |
 1942|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1943|  5.82k|                        pi2_src_scratch += in_stride;
 1944|       |
 1945|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1946|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1947|       |
 1948|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1949|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1950|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1951|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1952|       |
 1953|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1954|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1955|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1956|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1957|       |
 1958|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1959|       |
 1960|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1961|  5.82k|                        pi2_dst_scratch += out_stride;
 1962|       |
 1963|  5.82k|                    }
 1964|       |
 1965|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 1966|       |
 1967|       |                    /* o5[0-3] */
 1968|  5.82k|                    {
 1969|       |
 1970|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1971|       |
 1972|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1973|  5.82k|                        pi2_src_scratch += in_stride;
 1974|       |
 1975|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1976|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1977|       |
 1978|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1979|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1980|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1981|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1982|       |
 1983|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1984|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1985|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1986|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1987|       |
 1988|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1989|       |
 1990|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1991|  5.82k|                        pi2_dst_scratch += out_stride;
 1992|       |
 1993|  5.82k|                    }
 1994|       |
 1995|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 1996|       |
 1997|       |                    /* o6[0-3] */
 1998|  5.82k|                    {
 1999|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2000|       |
 2001|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2002|  5.82k|                        pi2_src_scratch += in_stride;
 2003|       |
 2004|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2005|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2006|       |
 2007|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2008|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2009|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2010|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2011|       |
 2012|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2013|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2014|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2015|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2016|       |
 2017|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2018|       |
 2019|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2020|  5.82k|                        pi2_dst_scratch += out_stride;
 2021|       |
 2022|  5.82k|                    }
 2023|       |
 2024|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 2025|       |
 2026|       |                    /* o7[0-3] */
 2027|  5.82k|                    {
 2028|       |
 2029|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2030|       |
 2031|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2032|  5.82k|                        pi2_src_scratch += 8;
 2033|       |
 2034|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2035|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2036|       |
 2037|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2038|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2039|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2040|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2041|       |
 2042|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2043|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2044|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2045|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2046|       |
 2047|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2048|       |
 2049|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2050|  5.82k|                        pi2_dst_scratch += 8;
 2051|       |
 2052|  5.82k|                    }
 2053|       |
 2054|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 2055|       |
 2056|       |                    /* o8[0-3] */
 2057|  5.82k|                    {
 2058|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2059|       |
 2060|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2061|  5.82k|                        pi2_src_scratch -= in_stride;
 2062|       |
 2063|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2064|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2065|       |
 2066|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2067|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2068|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2069|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2070|       |
 2071|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2072|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2073|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2074|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2075|       |
 2076|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2077|       |
 2078|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2079|  5.82k|                        pi2_dst_scratch -= out_stride;
 2080|  5.82k|                    }
 2081|       |
 2082|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 2083|       |
 2084|       |                    /* o9[0-3] */
 2085|  5.82k|                    {
 2086|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2087|       |
 2088|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2089|  5.82k|                        pi2_src_scratch -= in_stride;
 2090|       |
 2091|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2092|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2093|       |
 2094|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2095|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2096|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2097|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2098|       |
 2099|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2100|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2101|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2102|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2103|       |
 2104|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2105|       |
 2106|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2107|  5.82k|                        pi2_dst_scratch -= out_stride;
 2108|  5.82k|                    }
 2109|       |
 2110|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 2111|       |
 2112|       |                    /* o10[0-3] */
 2113|  5.82k|                    {
 2114|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2115|       |
 2116|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2117|  5.82k|                        pi2_src_scratch -= in_stride;
 2118|       |
 2119|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2120|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2121|       |
 2122|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2123|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2124|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2125|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2126|       |
 2127|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2128|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2129|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2130|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2131|       |
 2132|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2133|       |
 2134|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2135|  5.82k|                        pi2_dst_scratch -= out_stride;
 2136|  5.82k|                    }
 2137|       |
 2138|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 2139|       |
 2140|       |                    /* o11[0-3] */
 2141|  5.82k|                    {
 2142|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2143|       |
 2144|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2145|  5.82k|                        pi2_src_scratch -= in_stride;
 2146|       |
 2147|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2148|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2149|       |
 2150|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2151|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2152|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2153|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2154|       |
 2155|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2156|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2157|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2158|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2159|       |
 2160|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2161|       |
 2162|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2163|  5.82k|                        pi2_dst_scratch -= out_stride;
 2164|       |
 2165|  5.82k|                    }
 2166|       |
 2167|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 2168|       |
 2169|       |                    /* o12[0-3] */
 2170|  5.82k|                    {
 2171|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2172|       |
 2173|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2174|  5.82k|                        pi2_src_scratch -= in_stride;
 2175|       |
 2176|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2177|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2178|       |
 2179|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2180|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2181|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2182|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2183|       |
 2184|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2185|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2186|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2187|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2188|       |
 2189|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2190|       |
 2191|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2192|  5.82k|                        pi2_dst_scratch -= out_stride;
 2193|       |
 2194|  5.82k|                    }
 2195|       |
 2196|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 2197|       |
 2198|       |                    /* o13[0-3] */
 2199|  5.82k|                    {
 2200|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2201|       |
 2202|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2203|  5.82k|                        pi2_src_scratch -= in_stride;
 2204|       |
 2205|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2206|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2207|       |
 2208|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2209|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2210|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2211|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2212|       |
 2213|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2214|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2215|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2216|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2217|       |
 2218|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2219|       |
 2220|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2221|  5.82k|                        pi2_dst_scratch -= out_stride;
 2222|  5.82k|                    }
 2223|       |
 2224|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 2225|       |
 2226|       |                    /* o14[0-3] */
 2227|  5.82k|                    {
 2228|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2229|       |
 2230|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2231|  5.82k|                        pi2_src_scratch -= in_stride;
 2232|       |
 2233|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2234|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2235|       |
 2236|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2237|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2238|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2239|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2240|       |
 2241|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2242|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2243|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2244|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2245|       |
 2246|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2247|       |
 2248|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2249|  5.82k|                        pi2_dst_scratch -= out_stride;
 2250|       |
 2251|  5.82k|                    }
 2252|       |
 2253|  5.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 2254|       |
 2255|       |                    /* o15[0-3] */
 2256|  5.82k|                    {
 2257|  5.82k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2258|       |
 2259|  5.82k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2260|  5.82k|                        pi2_src_scratch += 8;
 2261|       |
 2262|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2263|  5.82k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2264|       |
 2265|  5.82k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2266|  5.82k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2267|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2268|  5.82k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2269|       |
 2270|  5.82k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2271|  5.82k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2272|  5.82k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2273|  5.82k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2274|       |
 2275|  5.82k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2276|       |
 2277|  5.82k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2278|  5.82k|                        pi2_dst_scratch += 8;
 2279|  5.82k|                    }
 2280|       |
 2281|  5.82k|                }
 2282|  2.91k|            }
 2283|  2.91k|        }
 2284|  11.9k|        else if(zero_last24_rows_stg1)
  ------------------
  |  Branch (2284:17): [True: 4.90k, False: 7.04k]
  ------------------
 2285|  4.90k|        {
 2286|       |            /* o & stage 1 out */
 2287|  4.90k|            {
 2288|  4.90k|                WORD32 j;
 2289|       |
 2290|  4.90k|                WORD16 *pi2_src_scratch = o_temp_ptr;
 2291|  4.90k|                WORD16 *pi2_dst_scratch = temp_ptr;
 2292|  4.90k|                WORD32 out_stride = (trans_size << 1);
 2293|       |
 2294|  4.90k|                WORD32 in_stride = trans_size;
 2295|       |
 2296|  14.1k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2296:28): [True: 9.24k, False: 4.90k]
  ------------------
 2297|  9.24k|                {
 2298|  9.24k|                    if(j)
  ------------------
  |  Branch (2298:24): [True: 4.65k, False: 4.58k]
  ------------------
 2299|  4.65k|                    {
 2300|  4.65k|                        m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 2301|  4.65k|                        m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 2302|  4.65k|                        m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
 2303|  4.65k|                        m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
 2304|  4.65k|                    }
 2305|       |
 2306|  9.24k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 2307|  9.24k|                    m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 interleaved
 2308|       |
 2309|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 2310|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 2311|       |
 2312|       |                    /* o0[0-3] */
 2313|  9.24k|                    {
 2314|       |
 2315|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2316|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2317|       |
 2318|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2319|       |
 2320|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2321|  9.24k|                        pi2_src_scratch += in_stride;
 2322|       |
 2323|  9.24k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2324|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2325|       |
 2326|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2327|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2328|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2329|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2330|       |
 2331|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2332|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2333|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2334|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2335|       |
 2336|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2337|       |
 2338|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2339|  9.24k|                        pi2_dst_scratch += out_stride;
 2340|       |
 2341|  9.24k|                    }
 2342|       |
 2343|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 2344|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 2345|       |
 2346|       |                    /* o1[0-3] */
 2347|  9.24k|                    {
 2348|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2349|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2350|       |
 2351|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2352|       |
 2353|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2354|  9.24k|                        pi2_src_scratch += in_stride;
 2355|       |
 2356|  9.24k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2357|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2358|       |
 2359|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2360|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2361|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2362|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2363|       |
 2364|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2365|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2366|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2367|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2368|       |
 2369|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2370|       |
 2371|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2372|  9.24k|                        pi2_dst_scratch += out_stride;
 2373|       |
 2374|  9.24k|                    }
 2375|       |
 2376|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 2377|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 2378|       |
 2379|       |                    /* o2[0-3] */
 2380|  9.24k|                    {
 2381|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2382|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2383|       |
 2384|  9.24k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 2385|       |
 2386|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2387|  9.24k|                        pi2_src_scratch += in_stride;
 2388|       |
 2389|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2390|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2391|       |
 2392|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2393|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2394|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2395|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2396|       |
 2397|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2398|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2399|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2400|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2401|       |
 2402|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2403|       |
 2404|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2405|  9.24k|                        pi2_dst_scratch += out_stride;
 2406|       |
 2407|  9.24k|                    }
 2408|       |
 2409|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 2410|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 2411|       |
 2412|       |                    /* o3[0-3] */
 2413|  9.24k|                    {
 2414|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2415|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2416|       |
 2417|  9.24k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 2418|       |
 2419|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2420|  9.24k|                        pi2_src_scratch += in_stride;
 2421|       |
 2422|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2423|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2424|       |
 2425|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2426|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2427|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2428|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2429|       |
 2430|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2431|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2432|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2433|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2434|       |
 2435|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2436|       |
 2437|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2438|  9.24k|                        pi2_dst_scratch += out_stride;
 2439|       |
 2440|  9.24k|                    }
 2441|       |
 2442|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 2443|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 2444|       |
 2445|       |                    /* o4[0-3] */
 2446|  9.24k|                    {
 2447|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2448|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2449|       |
 2450|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2451|       |
 2452|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2453|  9.24k|                        pi2_src_scratch += in_stride;
 2454|       |
 2455|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2456|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2457|       |
 2458|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2459|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2460|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2461|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2462|       |
 2463|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2464|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2465|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2466|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2467|       |
 2468|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2469|       |
 2470|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2471|  9.24k|                        pi2_dst_scratch += out_stride;
 2472|       |
 2473|  9.24k|                    }
 2474|       |
 2475|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 2476|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 2477|       |
 2478|       |                    /* o5[0-3] */
 2479|  9.24k|                    {
 2480|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2481|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2482|       |
 2483|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2484|       |
 2485|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2486|  9.24k|                        pi2_src_scratch += in_stride;
 2487|       |
 2488|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2489|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2490|       |
 2491|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2492|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2493|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2494|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2495|       |
 2496|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2497|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2498|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2499|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2500|       |
 2501|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2502|       |
 2503|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2504|  9.24k|                        pi2_dst_scratch += out_stride;
 2505|       |
 2506|  9.24k|                    }
 2507|       |
 2508|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 2509|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 2510|       |
 2511|       |                    /* o6[0-3] */
 2512|  9.24k|                    {
 2513|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2514|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2515|       |
 2516|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2517|       |
 2518|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2519|  9.24k|                        pi2_src_scratch += in_stride;
 2520|       |
 2521|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2522|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2523|       |
 2524|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2525|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2526|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2527|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2528|       |
 2529|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2530|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2531|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2532|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2533|       |
 2534|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2535|       |
 2536|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2537|  9.24k|                        pi2_dst_scratch += out_stride;
 2538|       |
 2539|  9.24k|                    }
 2540|       |
 2541|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 2542|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 2543|       |
 2544|       |                    /* o7[0-3] */
 2545|  9.24k|                    {
 2546|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2547|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2548|       |
 2549|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2550|       |
 2551|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2552|  9.24k|                        pi2_src_scratch += 8;
 2553|       |
 2554|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2555|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2556|       |
 2557|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2558|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2559|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2560|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2561|       |
 2562|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2563|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2564|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2565|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2566|       |
 2567|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2568|       |
 2569|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2570|  9.24k|                        pi2_dst_scratch += 8;
 2571|       |
 2572|  9.24k|                    }
 2573|       |
 2574|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 2575|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 2576|       |
 2577|       |                    /* o8[0-3] */
 2578|  9.24k|                    {
 2579|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2580|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2581|       |
 2582|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2583|       |
 2584|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2585|  9.24k|                        pi2_src_scratch -= in_stride;
 2586|       |
 2587|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2588|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2589|       |
 2590|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2591|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2592|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2593|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2594|       |
 2595|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2596|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2597|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2598|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2599|       |
 2600|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2601|       |
 2602|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2603|  9.24k|                        pi2_dst_scratch -= out_stride;
 2604|  9.24k|                    }
 2605|       |
 2606|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 2607|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 2608|       |
 2609|       |                    /* o9[0-3] */
 2610|  9.24k|                    {
 2611|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2612|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2613|       |
 2614|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2615|       |
 2616|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2617|  9.24k|                        pi2_src_scratch -= in_stride;
 2618|       |
 2619|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2620|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2621|       |
 2622|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2623|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2624|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2625|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2626|       |
 2627|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2628|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2629|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2630|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2631|       |
 2632|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2633|       |
 2634|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2635|  9.24k|                        pi2_dst_scratch -= out_stride;
 2636|  9.24k|                    }
 2637|       |
 2638|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 2639|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 2640|       |
 2641|       |                    /* o10[0-3] */
 2642|  9.24k|                    {
 2643|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2644|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2645|       |
 2646|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2647|       |
 2648|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2649|  9.24k|                        pi2_src_scratch -= in_stride;
 2650|       |
 2651|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2652|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2653|       |
 2654|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2655|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2656|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2657|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2658|       |
 2659|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2660|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2661|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2662|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2663|       |
 2664|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2665|       |
 2666|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2667|  9.24k|                        pi2_dst_scratch -= out_stride;
 2668|  9.24k|                    }
 2669|       |
 2670|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 2671|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 2672|       |
 2673|       |                    /* o11[0-3] */
 2674|  9.24k|                    {
 2675|       |
 2676|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2677|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2678|       |
 2679|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2680|       |
 2681|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2682|  9.24k|                        pi2_src_scratch -= in_stride;
 2683|       |
 2684|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2685|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2686|       |
 2687|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2688|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2689|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2690|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2691|       |
 2692|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2693|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2694|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2695|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2696|       |
 2697|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2698|       |
 2699|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2700|  9.24k|                        pi2_dst_scratch -= out_stride;
 2701|       |
 2702|  9.24k|                    }
 2703|       |
 2704|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 2705|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 2706|       |
 2707|       |                    /* o12[0-3] */
 2708|  9.24k|                    {
 2709|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2710|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2711|       |
 2712|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2713|       |
 2714|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2715|  9.24k|                        pi2_src_scratch -= in_stride;
 2716|       |
 2717|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2718|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2719|       |
 2720|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2721|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2722|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2723|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2724|       |
 2725|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2726|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2727|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2728|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2729|       |
 2730|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2731|       |
 2732|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2733|  9.24k|                        pi2_dst_scratch -= out_stride;
 2734|       |
 2735|  9.24k|                    }
 2736|       |
 2737|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 2738|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 2739|       |
 2740|       |                    /* o13[0-3] */
 2741|  9.24k|                    {
 2742|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2743|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2744|       |
 2745|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2746|       |
 2747|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2748|  9.24k|                        pi2_src_scratch -= in_stride;
 2749|       |
 2750|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2751|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2752|       |
 2753|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2754|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2755|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2756|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2757|       |
 2758|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2759|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2760|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2761|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2762|       |
 2763|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2764|       |
 2765|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2766|  9.24k|                        pi2_dst_scratch -= out_stride;
 2767|  9.24k|                    }
 2768|       |
 2769|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 2770|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 2771|       |
 2772|       |                    /* o14[0-3] */
 2773|  9.24k|                    {
 2774|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2775|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2776|       |
 2777|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2778|       |
 2779|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2780|  9.24k|                        pi2_src_scratch -= in_stride;
 2781|       |
 2782|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2783|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2784|       |
 2785|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2786|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2787|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2788|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2789|       |
 2790|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2791|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2792|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2793|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2794|       |
 2795|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2796|       |
 2797|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2798|  9.24k|                        pi2_dst_scratch -= out_stride;
 2799|       |
 2800|  9.24k|                    }
 2801|       |
 2802|  9.24k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 2803|  9.24k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 2804|       |
 2805|       |                    /* o15[0-3] */
 2806|  9.24k|                    {
 2807|  9.24k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2808|  9.24k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2809|       |
 2810|  9.24k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2811|       |
 2812|  9.24k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2813|  9.24k|                        pi2_src_scratch += 8;
 2814|       |
 2815|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2816|  9.24k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2817|       |
 2818|  9.24k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2819|  9.24k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2820|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2821|  9.24k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2822|       |
 2823|  9.24k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2824|  9.24k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2825|  9.24k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2826|  9.24k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2827|       |
 2828|  9.24k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2829|       |
 2830|  9.24k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2831|  9.24k|                        pi2_dst_scratch += 8;
 2832|  9.24k|                    }
 2833|       |
 2834|  9.24k|                }
 2835|  4.90k|            }
 2836|  4.90k|        }
 2837|  7.04k|        else
 2838|  7.04k|        {
 2839|       |            /* o & stage 1 out */
 2840|  7.04k|            {
 2841|  7.04k|                WORD32 j;
 2842|       |
 2843|  7.04k|                WORD16 *pi2_src_scratch = o_temp_ptr;
 2844|  7.04k|                WORD16 *pi2_dst_scratch = temp_ptr;
 2845|  7.04k|                WORD32 out_stride = (trans_size << 1);
 2846|       |
 2847|  7.04k|                WORD32 in_stride = trans_size;
 2848|       |
 2849|       |
 2850|  20.9k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2850:28): [True: 13.8k, False: 7.04k]
  ------------------
 2851|  13.8k|                {
 2852|  13.8k|                    if(j)
  ------------------
  |  Branch (2852:24): [True: 6.96k, False: 6.92k]
  ------------------
 2853|  6.96k|                    {
 2854|  6.96k|                        m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 2855|  6.96k|                        m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 2856|  6.96k|                        m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
 2857|  6.96k|                        m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
 2858|  6.96k|                        m_temp_reg_74 = _mm_srli_si128(m_temp_reg_74, 8);
 2859|  6.96k|                        m_temp_reg_75 = _mm_srli_si128(m_temp_reg_75, 8);
 2860|  6.96k|                        m_temp_reg_76 = _mm_srli_si128(m_temp_reg_76, 8);
 2861|  6.96k|                        m_temp_reg_77 = _mm_srli_si128(m_temp_reg_77, 8);
 2862|       |
 2863|  6.96k|                        m_temp_reg_80 = _mm_srli_si128(m_temp_reg_80, 8);
 2864|  6.96k|                        m_temp_reg_81 = _mm_srli_si128(m_temp_reg_81, 8);
 2865|  6.96k|                        m_temp_reg_82 = _mm_srli_si128(m_temp_reg_82, 8);
 2866|  6.96k|                        m_temp_reg_83 = _mm_srli_si128(m_temp_reg_83, 8);
 2867|  6.96k|                        m_temp_reg_84 = _mm_srli_si128(m_temp_reg_84, 8);
 2868|  6.96k|                        m_temp_reg_85 = _mm_srli_si128(m_temp_reg_85, 8);
 2869|  6.96k|                        m_temp_reg_86 = _mm_srli_si128(m_temp_reg_86, 8);
 2870|  6.96k|                        m_temp_reg_87 = _mm_srli_si128(m_temp_reg_87, 8);
 2871|  6.96k|                    }
 2872|       |
 2873|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 2874|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 2875|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[2][0]);
 2876|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[3][0]);
 2877|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[4][0]);
 2878|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[5][0]);
 2879|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[6][0]);
 2880|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[7][0]);
 2881|       |
 2882|  13.8k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 2883|  13.8k|                    m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 interleaved
 2884|  13.8k|                    m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 interleaved
 2885|  13.8k|                    m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 interleaved
 2886|  13.8k|                    temp1 = _mm_unpacklo_epi16(m_temp_reg_80, m_temp_reg_81); //row 17 and row 19 interleaved
 2887|  13.8k|                    temp2 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_83); //row 21 and row 23 interleaved
 2888|  13.8k|                    temp3 = _mm_unpacklo_epi16(m_temp_reg_84, m_temp_reg_85); //row 25 and row 27 interleaved
 2889|  13.8k|                    temp4 = _mm_unpacklo_epi16(m_temp_reg_86, m_temp_reg_87); //row 29 and row 31 interleaved
 2890|       |
 2891|       |
 2892|       |                    /* o0[0-3] */
 2893|  13.8k|                    {
 2894|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2895|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2896|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 2897|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2898|       |
 2899|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2900|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 2901|       |
 2902|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 2903|       |
 2904|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 2905|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 2906|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 2907|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 2908|       |
 2909|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 2910|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 2911|       |
 2912|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 2913|       |
 2914|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 2915|       |
 2916|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2917|  13.8k|                        pi2_src_scratch += in_stride;
 2918|       |
 2919|  13.8k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2920|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2921|       |
 2922|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2923|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2924|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2925|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2926|       |
 2927|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2928|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2929|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2930|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2931|       |
 2932|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2933|       |
 2934|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2935|  13.8k|                        pi2_dst_scratch += out_stride;
 2936|       |
 2937|  13.8k|                    }
 2938|       |
 2939|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 2940|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 2941|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[10][0]);
 2942|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[11][0]);
 2943|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[12][0]);
 2944|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[13][0]);
 2945|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[14][0]);
 2946|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[15][0]);
 2947|       |
 2948|       |
 2949|       |                    /* o1[0-3] */
 2950|  13.8k|                    {
 2951|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2952|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2953|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 2954|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2955|       |
 2956|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2957|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 2958|       |
 2959|  13.8k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_20);
 2960|       |
 2961|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 2962|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 2963|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 2964|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 2965|       |
 2966|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 2967|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 2968|       |
 2969|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 2970|       |
 2971|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 2972|       |
 2973|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 2974|  13.8k|                        pi2_src_scratch += in_stride;
 2975|       |
 2976|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2977|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2978|       |
 2979|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2980|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2981|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2982|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2983|       |
 2984|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2985|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2986|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2987|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2988|       |
 2989|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2990|       |
 2991|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2992|  13.8k|                        pi2_dst_scratch += out_stride;
 2993|       |
 2994|  13.8k|                    }
 2995|       |
 2996|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 2997|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 2998|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[18][0]);
 2999|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[19][0]);
 3000|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[20][0]);
 3001|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[21][0]);
 3002|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[22][0]);
 3003|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[23][0]);
 3004|       |
 3005|       |                    /* o2[0-3] */
 3006|  13.8k|                    {
 3007|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3008|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3009|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3010|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3011|       |
 3012|  13.8k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 3013|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3014|       |
 3015|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3016|       |
 3017|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3018|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3019|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3020|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3021|       |
 3022|  13.8k|                        m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_41);
 3023|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3024|       |
 3025|  13.8k|                        m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_42);
 3026|       |
 3027|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3028|       |
 3029|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3030|  13.8k|                        pi2_src_scratch += in_stride;
 3031|       |
 3032|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3033|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3034|       |
 3035|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3036|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3037|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3038|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3039|       |
 3040|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3041|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3042|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3043|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3044|       |
 3045|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3046|       |
 3047|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3048|  13.8k|                        pi2_dst_scratch += out_stride;
 3049|       |
 3050|  13.8k|                    }
 3051|       |
 3052|       |
 3053|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 3054|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 3055|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[26][0]);
 3056|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[27][0]);
 3057|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[28][0]);
 3058|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[29][0]);
 3059|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[30][0]);
 3060|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[31][0]);
 3061|       |
 3062|       |                    /* o3[0-3] */
 3063|  13.8k|                    {
 3064|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3065|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3066|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3067|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3068|       |
 3069|  13.8k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 3070|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3071|       |
 3072|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3073|       |
 3074|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3075|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3076|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3077|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3078|       |
 3079|  13.8k|                        m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_40);
 3080|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3081|       |
 3082|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3083|       |
 3084|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3085|       |
 3086|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3087|  13.8k|                        pi2_src_scratch += in_stride;
 3088|       |
 3089|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3090|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3091|       |
 3092|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3093|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3094|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3095|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3096|       |
 3097|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3098|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3099|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3100|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3101|       |
 3102|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3103|       |
 3104|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3105|  13.8k|                        pi2_dst_scratch += out_stride;
 3106|       |
 3107|  13.8k|                    }
 3108|       |
 3109|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 3110|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 3111|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[34][0]);
 3112|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[35][0]);
 3113|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[36][0]);
 3114|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[37][0]);
 3115|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[38][0]);
 3116|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[39][0]);
 3117|       |
 3118|       |                    /* o4[0-3] */
 3119|  13.8k|                    {
 3120|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3121|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3122|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3123|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3124|       |
 3125|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3126|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3127|       |
 3128|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3129|       |
 3130|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3131|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3132|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3133|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3134|       |
 3135|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3136|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3137|       |
 3138|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3139|       |
 3140|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3141|       |
 3142|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3143|  13.8k|                        pi2_src_scratch += in_stride;
 3144|       |
 3145|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3146|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3147|       |
 3148|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3149|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3150|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3151|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3152|       |
 3153|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3154|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3155|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3156|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3157|       |
 3158|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3159|       |
 3160|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3161|  13.8k|                        pi2_dst_scratch += out_stride;
 3162|       |
 3163|  13.8k|                    }
 3164|       |
 3165|       |
 3166|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 3167|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 3168|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[42][0]);
 3169|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[43][0]);
 3170|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[44][0]);
 3171|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[45][0]);
 3172|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[46][0]);
 3173|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[47][0]);
 3174|       |
 3175|       |                    /* o5[0-3] */
 3176|  13.8k|                    {
 3177|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3178|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3179|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3180|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3181|       |
 3182|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3183|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3184|       |
 3185|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3186|       |
 3187|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3188|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3189|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3190|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3191|       |
 3192|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3193|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3194|       |
 3195|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3196|       |
 3197|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3198|       |
 3199|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3200|  13.8k|                        pi2_src_scratch += in_stride;
 3201|       |
 3202|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3203|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3204|       |
 3205|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3206|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3207|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3208|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3209|       |
 3210|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3211|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3212|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3213|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3214|       |
 3215|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3216|       |
 3217|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3218|  13.8k|                        pi2_dst_scratch += out_stride;
 3219|       |
 3220|  13.8k|                    }
 3221|       |
 3222|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 3223|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 3224|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[50][0]);
 3225|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[51][0]);
 3226|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[52][0]);
 3227|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[53][0]);
 3228|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[54][0]);
 3229|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[55][0]);
 3230|       |
 3231|       |
 3232|       |                    /* o6[0-3] */
 3233|  13.8k|                    {
 3234|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3235|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3236|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3237|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3238|       |
 3239|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3240|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3241|       |
 3242|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3243|       |
 3244|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3245|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3246|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3247|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3248|       |
 3249|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3250|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3251|       |
 3252|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3253|       |
 3254|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3255|       |
 3256|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3257|  13.8k|                        pi2_src_scratch += in_stride;
 3258|       |
 3259|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3260|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3261|       |
 3262|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3263|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3264|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3265|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3266|       |
 3267|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3268|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3269|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3270|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3271|       |
 3272|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3273|       |
 3274|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3275|  13.8k|                        pi2_dst_scratch += out_stride;
 3276|       |
 3277|  13.8k|                    }
 3278|       |
 3279|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 3280|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 3281|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[58][0]);
 3282|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[59][0]);
 3283|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[60][0]);
 3284|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[61][0]);
 3285|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[62][0]);
 3286|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[63][0]);
 3287|       |
 3288|       |                    /* o7[0-3] */
 3289|  13.8k|                    {
 3290|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3291|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3292|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3293|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3294|       |
 3295|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3296|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3297|       |
 3298|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3299|       |
 3300|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3301|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3302|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3303|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3304|       |
 3305|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3306|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3307|       |
 3308|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3309|       |
 3310|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3311|       |
 3312|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3313|  13.8k|                        pi2_src_scratch += 8;
 3314|       |
 3315|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3316|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3317|       |
 3318|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3319|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3320|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3321|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3322|       |
 3323|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3324|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3325|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3326|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3327|       |
 3328|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3329|       |
 3330|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3331|  13.8k|                        pi2_dst_scratch += 8;
 3332|       |
 3333|  13.8k|                    }
 3334|       |
 3335|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 3336|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 3337|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[66][0]);
 3338|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[67][0]);
 3339|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[68][0]);
 3340|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[69][0]);
 3341|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[70][0]);
 3342|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[71][0]);
 3343|       |
 3344|       |
 3345|       |                    /* o8[0-3] */
 3346|  13.8k|                    {
 3347|       |
 3348|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3349|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3350|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3351|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3352|       |
 3353|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3354|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3355|       |
 3356|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3357|       |
 3358|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3359|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3360|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3361|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3362|       |
 3363|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3364|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3365|       |
 3366|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3367|       |
 3368|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3369|       |
 3370|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3371|  13.8k|                        pi2_src_scratch -= in_stride;
 3372|       |
 3373|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3374|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3375|       |
 3376|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3377|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3378|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3379|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3380|       |
 3381|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3382|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3383|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3384|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3385|       |
 3386|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3387|       |
 3388|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3389|  13.8k|                        pi2_dst_scratch -= out_stride;
 3390|  13.8k|                    }
 3391|       |
 3392|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 3393|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 3394|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[74][0]);
 3395|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[75][0]);
 3396|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[76][0]);
 3397|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[77][0]);
 3398|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[78][0]);
 3399|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[79][0]);
 3400|       |
 3401|       |
 3402|       |                    /* o9[0-3] */
 3403|  13.8k|                    {
 3404|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3405|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3406|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3407|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3408|       |
 3409|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3410|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3411|       |
 3412|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3413|       |
 3414|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3415|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3416|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3417|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3418|       |
 3419|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3420|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3421|       |
 3422|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3423|       |
 3424|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3425|       |
 3426|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3427|  13.8k|                        pi2_src_scratch -= in_stride;
 3428|       |
 3429|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3430|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3431|       |
 3432|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3433|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3434|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3435|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3436|       |
 3437|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3438|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3439|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3440|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3441|       |
 3442|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3443|       |
 3444|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3445|  13.8k|                        pi2_dst_scratch -= out_stride;
 3446|  13.8k|                    }
 3447|       |
 3448|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 3449|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 3450|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[82][0]);
 3451|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[83][0]);
 3452|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[84][0]);
 3453|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[85][0]);
 3454|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[86][0]);
 3455|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[87][0]);
 3456|       |
 3457|       |                    /* o10[0-3] */
 3458|  13.8k|                    {
 3459|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3460|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3461|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3462|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3463|       |
 3464|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3465|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3466|       |
 3467|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3468|       |
 3469|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3470|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3471|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3472|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3473|       |
 3474|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3475|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3476|       |
 3477|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3478|       |
 3479|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3480|       |
 3481|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3482|  13.8k|                        pi2_src_scratch -= in_stride;
 3483|       |
 3484|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3485|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3486|       |
 3487|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3488|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3489|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3490|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3491|       |
 3492|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3493|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3494|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3495|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3496|       |
 3497|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3498|       |
 3499|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3500|  13.8k|                        pi2_dst_scratch -= out_stride;
 3501|  13.8k|                    }
 3502|       |
 3503|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 3504|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 3505|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[90][0]);
 3506|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[91][0]);
 3507|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[92][0]);
 3508|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[93][0]);
 3509|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[94][0]);
 3510|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[95][0]);
 3511|       |
 3512|       |                    /* o11[0-3] */
 3513|  13.8k|                    {
 3514|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3515|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3516|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3517|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3518|       |
 3519|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3520|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3521|       |
 3522|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3523|       |
 3524|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3525|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3526|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3527|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3528|       |
 3529|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3530|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3531|       |
 3532|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3533|       |
 3534|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3535|       |
 3536|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3537|  13.8k|                        pi2_src_scratch -= in_stride;
 3538|       |
 3539|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3540|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3541|       |
 3542|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3543|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3544|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3545|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3546|       |
 3547|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3548|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3549|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3550|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3551|       |
 3552|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3553|       |
 3554|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3555|  13.8k|                        pi2_dst_scratch -= out_stride;
 3556|       |
 3557|  13.8k|                    }
 3558|       |
 3559|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 3560|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 3561|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[98][0]);
 3562|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[99][0]);
 3563|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[100][0]);
 3564|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[101][0]);
 3565|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[102][0]);
 3566|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[103][0]);
 3567|       |
 3568|       |
 3569|       |                    /* o12[0-3] */
 3570|  13.8k|                    {
 3571|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3572|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3573|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3574|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3575|       |
 3576|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3577|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3578|       |
 3579|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3580|       |
 3581|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3582|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3583|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3584|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3585|       |
 3586|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3587|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3588|       |
 3589|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3590|       |
 3591|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3592|       |
 3593|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3594|  13.8k|                        pi2_src_scratch -= in_stride;
 3595|       |
 3596|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3597|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3598|       |
 3599|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3600|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3601|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3602|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3603|       |
 3604|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3605|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3606|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3607|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3608|       |
 3609|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3610|       |
 3611|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3612|  13.8k|                        pi2_dst_scratch -= out_stride;
 3613|       |
 3614|  13.8k|                    }
 3615|       |
 3616|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 3617|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 3618|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[106][0]);
 3619|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[107][0]);
 3620|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[108][0]);
 3621|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[109][0]);
 3622|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[110][0]);
 3623|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[111][0]);
 3624|       |
 3625|       |
 3626|       |                    /* o13[0-3] */
 3627|  13.8k|                    {
 3628|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3629|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3630|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3631|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3632|       |
 3633|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3634|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3635|       |
 3636|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3637|       |
 3638|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3639|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3640|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3641|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3642|       |
 3643|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3644|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3645|       |
 3646|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3647|       |
 3648|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3649|       |
 3650|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3651|  13.8k|                        pi2_src_scratch -= in_stride;
 3652|       |
 3653|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3654|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3655|       |
 3656|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3657|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3658|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3659|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3660|       |
 3661|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3662|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3663|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3664|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3665|       |
 3666|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3667|       |
 3668|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3669|  13.8k|                        pi2_dst_scratch -= out_stride;
 3670|  13.8k|                    }
 3671|       |
 3672|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 3673|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 3674|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[114][0]);
 3675|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[115][0]);
 3676|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[116][0]);
 3677|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[117][0]);
 3678|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[118][0]);
 3679|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[119][0]);
 3680|       |
 3681|       |
 3682|       |                    /* o14[0-3] */
 3683|  13.8k|                    {
 3684|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3685|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3686|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3687|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3688|       |
 3689|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3690|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3691|       |
 3692|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3693|       |
 3694|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3695|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3696|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3697|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3698|       |
 3699|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3700|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3701|       |
 3702|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3703|       |
 3704|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3705|       |
 3706|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3707|  13.8k|                        pi2_src_scratch -= in_stride;
 3708|       |
 3709|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3710|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3711|       |
 3712|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3713|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3714|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3715|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3716|       |
 3717|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3718|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3719|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3720|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3721|       |
 3722|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3723|       |
 3724|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3725|  13.8k|                        pi2_dst_scratch -= out_stride;
 3726|       |
 3727|  13.8k|                    }
 3728|       |
 3729|  13.8k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 3730|  13.8k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 3731|  13.8k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[122][0]);
 3732|  13.8k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[123][0]);
 3733|  13.8k|                    m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[124][0]);
 3734|  13.8k|                    m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[125][0]);
 3735|  13.8k|                    m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[126][0]);
 3736|  13.8k|                    m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[127][0]);
 3737|       |
 3738|       |                    /* o15[0-3] */
 3739|  13.8k|                    {
 3740|  13.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3741|  13.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3742|  13.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3743|  13.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3744|       |
 3745|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3746|  13.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3747|       |
 3748|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3749|       |
 3750|  13.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3751|  13.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3752|  13.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3753|  13.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3754|       |
 3755|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3756|  13.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3757|       |
 3758|  13.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3759|       |
 3760|  13.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3761|       |
 3762|  13.8k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 3763|  13.8k|                        pi2_src_scratch += 8;
 3764|       |
 3765|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3766|  13.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3767|       |
 3768|  13.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3769|  13.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3770|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3771|  13.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3772|       |
 3773|  13.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3774|  13.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3775|  13.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3776|  13.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3777|       |
 3778|  13.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3779|       |
 3780|  13.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3781|  13.8k|                        pi2_dst_scratch += 8;
 3782|  13.8k|                    }
 3783|       |
 3784|  13.8k|                }
 3785|  7.04k|            }
 3786|  7.04k|        }
 3787|       |        /* Transpose */
 3788|  14.8k|        {
 3789|  14.8k|            WORD16 *pi2_src_scratch = temp_ptr;
 3790|  14.8k|            WORD16 *pi2_dst_scratch = pi2_tmp;
 3791|  14.8k|            WORD32 in_stride = (trans_size << 1);
 3792|       |
 3793|  43.9k|            for(j = 0; j < 2; j++)
  ------------------
  |  Branch (3793:24): [True: 29.1k, False: 14.8k]
  ------------------
 3794|  29.1k|            {
 3795|  29.1k|                m_temp_reg_30 =  _mm_load_si128((__m128i *)pi2_src_scratch);
 3796|  29.1k|                pi2_src_scratch += in_stride;
 3797|  29.1k|                m_temp_reg_31 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3798|  29.1k|                pi2_src_scratch += in_stride;
 3799|  29.1k|                m_temp_reg_32 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3800|  29.1k|                pi2_src_scratch += in_stride;
 3801|  29.1k|                m_temp_reg_33 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3802|  29.1k|                pi2_src_scratch += in_stride;
 3803|  29.1k|                m_temp_reg_34 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3804|  29.1k|                pi2_src_scratch += in_stride;
 3805|  29.1k|                m_temp_reg_35 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3806|  29.1k|                pi2_src_scratch += in_stride;
 3807|  29.1k|                m_temp_reg_36 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3808|  29.1k|                pi2_src_scratch += in_stride;
 3809|  29.1k|                m_temp_reg_37 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3810|  29.1k|                pi2_src_scratch += 8;
 3811|       |
 3812|  29.1k|                m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3813|  29.1k|                pi2_src_scratch -= in_stride;
 3814|  29.1k|                m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3815|  29.1k|                pi2_src_scratch -= in_stride;
 3816|  29.1k|                m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3817|  29.1k|                pi2_src_scratch -= in_stride;
 3818|  29.1k|                m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3819|  29.1k|                pi2_src_scratch -= in_stride;
 3820|  29.1k|                m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3821|  29.1k|                pi2_src_scratch -= in_stride;
 3822|  29.1k|                m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3823|  29.1k|                pi2_src_scratch -= in_stride;
 3824|  29.1k|                m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3825|  29.1k|                pi2_src_scratch -= in_stride;
 3826|  29.1k|                m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3827|  29.1k|                pi2_src_scratch += 8;
 3828|       |
 3829|       |
 3830|  29.1k|                m_temp_reg_40 = _mm_unpacklo_epi16(m_temp_reg_30, m_temp_reg_31);
 3831|  29.1k|                m_temp_reg_41 = _mm_unpackhi_epi16(m_temp_reg_31, m_temp_reg_30);
 3832|       |
 3833|  29.1k|                m_temp_reg_42 = _mm_unpacklo_epi16(m_temp_reg_32, m_temp_reg_33);
 3834|  29.1k|                m_temp_reg_43 = _mm_unpackhi_epi16(m_temp_reg_33, m_temp_reg_32);
 3835|       |
 3836|  29.1k|                m_temp_reg_44 = _mm_unpacklo_epi16(m_temp_reg_34, m_temp_reg_35);
 3837|  29.1k|                m_temp_reg_45 = _mm_unpackhi_epi16(m_temp_reg_35, m_temp_reg_34);
 3838|       |
 3839|  29.1k|                m_temp_reg_46 = _mm_unpacklo_epi16(m_temp_reg_36, m_temp_reg_37);
 3840|  29.1k|                m_temp_reg_47 = _mm_unpackhi_epi16(m_temp_reg_37, m_temp_reg_36);
 3841|       |
 3842|  29.1k|                m_temp_reg_80 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 3843|  29.1k|                m_temp_reg_81 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_70);
 3844|       |
 3845|  29.1k|                m_temp_reg_82 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73);
 3846|  29.1k|                m_temp_reg_83 = _mm_unpackhi_epi16(m_temp_reg_73, m_temp_reg_72);
 3847|       |
 3848|  29.1k|                m_temp_reg_84 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75);
 3849|  29.1k|                m_temp_reg_85 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_74);
 3850|       |
 3851|  29.1k|                m_temp_reg_86 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77);
 3852|  29.1k|                m_temp_reg_87 = _mm_unpackhi_epi16(m_temp_reg_77, m_temp_reg_76);
 3853|       |
 3854|       |                /****************/
 3855|       |
 3856|  29.1k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_40, m_temp_reg_42);
 3857|  29.1k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_40, m_temp_reg_42);
 3858|       |
 3859|  29.1k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_44, m_temp_reg_46);
 3860|  29.1k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_44, m_temp_reg_46);
 3861|       |
 3862|  29.1k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_80, m_temp_reg_82);
 3863|  29.1k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_80, m_temp_reg_82);
 3864|       |
 3865|  29.1k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_84, m_temp_reg_86);
 3866|  29.1k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_84, m_temp_reg_86);
 3867|       |
 3868|  29.1k|                m_temp_reg_90 = _mm_unpacklo_epi32(m_temp_reg_43, m_temp_reg_41);
 3869|  29.1k|                m_temp_reg_91 = _mm_unpackhi_epi32(m_temp_reg_43, m_temp_reg_41);
 3870|       |
 3871|  29.1k|                m_temp_reg_92 = _mm_unpacklo_epi32(m_temp_reg_47, m_temp_reg_45);
 3872|  29.1k|                m_temp_reg_93 = _mm_unpackhi_epi32(m_temp_reg_47, m_temp_reg_45);
 3873|       |
 3874|  29.1k|                m_temp_reg_94 = _mm_unpacklo_epi32(m_temp_reg_83, m_temp_reg_81);
 3875|  29.1k|                m_temp_reg_95 = _mm_unpackhi_epi32(m_temp_reg_83, m_temp_reg_81);
 3876|       |
 3877|  29.1k|                m_temp_reg_96 = _mm_unpacklo_epi32(m_temp_reg_87, m_temp_reg_85);
 3878|  29.1k|                m_temp_reg_97 = _mm_unpackhi_epi32(m_temp_reg_87, m_temp_reg_85);
 3879|       |
 3880|       |                /******************/
 3881|       |
 3882|  29.1k|                m_temp_reg_30 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_2);
 3883|  29.1k|                m_temp_reg_31 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_2);
 3884|       |
 3885|  29.1k|                m_temp_reg_32 = _mm_unpacklo_epi64(m_temp_reg_92, m_temp_reg_90);
 3886|  29.1k|                m_temp_reg_33 = _mm_unpackhi_epi64(m_temp_reg_92, m_temp_reg_90);
 3887|       |
 3888|  29.1k|                m_temp_reg_34 = _mm_unpacklo_epi64(m_temp_reg_4, m_temp_reg_6);
 3889|  29.1k|                m_temp_reg_35 = _mm_unpackhi_epi64(m_temp_reg_4, m_temp_reg_6);
 3890|       |
 3891|  29.1k|                m_temp_reg_36 = _mm_unpacklo_epi64(m_temp_reg_96, m_temp_reg_94);
 3892|  29.1k|                m_temp_reg_37 = _mm_unpackhi_epi64(m_temp_reg_96, m_temp_reg_94);
 3893|       |
 3894|  29.1k|                m_temp_reg_80 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_3);
 3895|  29.1k|                m_temp_reg_81 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_3);
 3896|       |
 3897|  29.1k|                m_temp_reg_82 = _mm_unpacklo_epi64(m_temp_reg_93, m_temp_reg_91);
 3898|  29.1k|                m_temp_reg_83 = _mm_unpackhi_epi64(m_temp_reg_93, m_temp_reg_91);
 3899|       |
 3900|  29.1k|                m_temp_reg_84 = _mm_unpacklo_epi64(m_temp_reg_5, m_temp_reg_7);
 3901|  29.1k|                m_temp_reg_85 = _mm_unpackhi_epi64(m_temp_reg_5, m_temp_reg_7);
 3902|       |
 3903|  29.1k|                m_temp_reg_86 = _mm_unpacklo_epi64(m_temp_reg_97, m_temp_reg_95);
 3904|  29.1k|                m_temp_reg_87 = _mm_unpackhi_epi64(m_temp_reg_97, m_temp_reg_95);
 3905|       |
 3906|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size), m_temp_reg_30);
 3907|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 8), m_temp_reg_34);
 3908|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 16), m_temp_reg_36);
 3909|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 24), m_temp_reg_32);
 3910|       |
 3911|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size), m_temp_reg_31);
 3912|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 8), m_temp_reg_35);
 3913|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 16), m_temp_reg_37);
 3914|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 24), m_temp_reg_33);
 3915|       |
 3916|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size), m_temp_reg_80);
 3917|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 8), m_temp_reg_84);
 3918|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 16), m_temp_reg_86);
 3919|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 24), m_temp_reg_82);
 3920|       |
 3921|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size), m_temp_reg_81);
 3922|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 8), m_temp_reg_85);
 3923|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 16), m_temp_reg_87);
 3924|  29.1k|                _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 24), m_temp_reg_83);
 3925|       |
 3926|  29.1k|                pi2_dst_scratch += 4 * trans_size;
 3927|  29.1k|            }
 3928|  14.8k|        }
 3929|  14.8k|        pi2_src += 8;
 3930|       |//      pi2_dequant_coeff +=8;
 3931|  14.8k|        pi2_tmp += 8 * trans_size;
 3932|  14.8k|        zero_cols = zero_cols >> 1;
 3933|  14.8k|    }
 3934|       |
 3935|  6.11k|    if(trans_size_stg1 != TRANS_SIZE_32)
  ------------------
  |  |  422|  6.11k|#define TRANS_SIZE_32 32
  ------------------
  |  Branch (3935:8): [True: 3.16k, False: 2.94k]
  ------------------
 3936|  3.16k|    {
 3937|  3.16k|        m_temp_reg_10 = _mm_setzero_si128();
 3938|       |
 3939|  12.6k|        for(i = trans_size_stg1; i < 32; i += 8)
  ------------------
  |  Branch (3939:34): [True: 9.50k, False: 3.16k]
  ------------------
 3940|  9.50k|        {
 3941|  9.50k|            WORD16 *pi2_dst_scratch = pi2_tmp;
 3942|       |
 3943|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size), m_temp_reg_10);
 3944|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 8), m_temp_reg_10);
 3945|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 16), m_temp_reg_10);
 3946|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 24), m_temp_reg_10);
 3947|       |
 3948|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size), m_temp_reg_10);
 3949|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 8), m_temp_reg_10);
 3950|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 16), m_temp_reg_10);
 3951|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 24), m_temp_reg_10);
 3952|       |
 3953|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size), m_temp_reg_10);
 3954|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 8), m_temp_reg_10);
 3955|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 16), m_temp_reg_10);
 3956|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 24), m_temp_reg_10);
 3957|       |
 3958|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size), m_temp_reg_10);
 3959|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 8), m_temp_reg_10);
 3960|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 16), m_temp_reg_10);
 3961|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 24), m_temp_reg_10);
 3962|       |
 3963|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size), m_temp_reg_10);
 3964|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size + 8), m_temp_reg_10);
 3965|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size + 16), m_temp_reg_10);
 3966|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size + 24), m_temp_reg_10);
 3967|       |
 3968|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size), m_temp_reg_10);
 3969|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size + 8), m_temp_reg_10);
 3970|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size + 16), m_temp_reg_10);
 3971|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size + 24), m_temp_reg_10);
 3972|       |
 3973|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size), m_temp_reg_10);
 3974|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size + 8), m_temp_reg_10);
 3975|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size + 16), m_temp_reg_10);
 3976|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size + 24), m_temp_reg_10);
 3977|       |
 3978|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size), m_temp_reg_10);
 3979|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size + 8), m_temp_reg_10);
 3980|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size + 16), m_temp_reg_10);
 3981|  9.50k|            _mm_storeu_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size + 24), m_temp_reg_10);
 3982|       |
 3983|  9.50k|            pi2_tmp += 8 * trans_size;
 3984|  9.50k|        }
 3985|  3.16k|    }
 3986|       |
 3987|  6.11k|    pi2_tmp = pi2_tmp_orig;
 3988|       |
 3989|       |    /* Inverse Transform 2nd stage */
 3990|       |
 3991|       |
 3992|  52.0k|    for(j = 0; j < trans_size; j += 4)
  ------------------
  |  Branch (3992:16): [True: 45.9k, False: 6.11k]
  ------------------
 3993|  45.9k|    {
 3994|  45.9k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  45.9k|#define IT_SHIFT_STAGE_2 12
  ------------------
 3995|       |
 3996|       |        /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
 3997|  45.9k|        if(zero_last28_rows_stg2)
  ------------------
  |  Branch (3997:12): [True: 22.0k, False: 23.8k]
  ------------------
 3998|  22.0k|        {
 3999|  22.0k|            {
 4000|       |
 4001|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 4002|  22.0k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87
 4003|  22.0k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80
 4004|  22.0k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70
 4005|  22.0k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57
 4006|  22.0k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43
 4007|  22.0k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25
 4008|  22.0k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //9
 4009|       |
 4010|  22.0k|                m_temp_reg_10 = _mm_loadu_si128((__m128i *)&pi2_tmp[2 * trans_size]);
 4011|       |
 4012|  22.0k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_10, all_zero_reg);
 4013|       |
 4014|       |                /* eo0[0-3] */
 4015|  22.0k|                {
 4016|  22.0k|                    m_temp_reg_90 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4017|       |
 4018|  22.0k|                }
 4019|       |                /* eo1[0-3] */
 4020|  22.0k|                {
 4021|  22.0k|                    m_temp_reg_91 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
 4022|       |
 4023|  22.0k|                }
 4024|       |                /* eo2[0-3] */
 4025|  22.0k|                {
 4026|  22.0k|                    m_temp_reg_92 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 4027|  22.0k|                }
 4028|       |
 4029|       |                /* eo3[0-3] */
 4030|  22.0k|                {
 4031|  22.0k|                    m_temp_reg_93 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
 4032|  22.0k|                }
 4033|       |                /* eo4[0-3] */
 4034|  22.0k|                {
 4035|  22.0k|                    m_temp_reg_94 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 4036|  22.0k|                }
 4037|       |
 4038|       |                /* eo5[0-3] */
 4039|  22.0k|                {
 4040|  22.0k|                    m_temp_reg_95 = _mm_madd_epi16(m_temp_reg_10, m_coeff6);
 4041|  22.0k|                }
 4042|       |
 4043|       |                /* eo6[0-3] */
 4044|  22.0k|                {
 4045|  22.0k|                    m_temp_reg_96 = _mm_madd_epi16(m_temp_reg_10, m_coeff7);
 4046|  22.0k|                }
 4047|       |                /* eo7[0-3] */
 4048|  22.0k|                {
 4049|  22.0k|                    m_temp_reg_97 = _mm_madd_epi16(m_temp_reg_10, m_coeff8);
 4050|  22.0k|                }
 4051|  22.0k|            }
 4052|       |
 4053|  22.0k|            m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64
 4054|       |
 4055|  22.0k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[0 * trans_size]);
 4056|       |
 4057|  22.0k|            m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
 4058|       |
 4059|  22.0k|            m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4060|       |
 4061|  22.0k|            m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4062|       |
 4063|       |            /* e[]*/
 4064|       |
 4065|  22.0k|            temp1 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_90);  /* ee[0] */
 4066|  22.0k|            temp2 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_90);  /* ee[15] */
 4067|       |
 4068|  22.0k|            temp3 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_91);  /* ee[1] */
 4069|  22.0k|            temp4 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_91);  /* ee[14] */
 4070|       |
 4071|  22.0k|            temp5 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_92);  /* ee[2] */
 4072|  22.0k|            temp6 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_92);  /* ee[13] */
 4073|       |
 4074|  22.0k|            temp7 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_93);  /* ee[3] */
 4075|  22.0k|            temp8 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_93);  /* ee[12] */
 4076|       |
 4077|  22.0k|            m_temp_reg_90 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_94);  /* ee[4] */
 4078|  22.0k|            m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_94);  /* ee[11] */
 4079|       |
 4080|  22.0k|            m_temp_reg_92 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_95);  /* ee[5] */
 4081|  22.0k|            m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_95);  /* ee[10] */
 4082|       |
 4083|  22.0k|            m_temp_reg_94 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_96);  /* ee[6] */
 4084|  22.0k|            m_temp_reg_95 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_96);  /* ee[9] */
 4085|       |
 4086|  22.0k|            m_temp_reg_96 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_97);  /* ee[7] */
 4087|  22.0k|            m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_97);  /* ee[8] */
 4088|       |
 4089|       |            /*o[k]*/
 4090|  22.0k|            {
 4091|       |
 4092|  22.0k|                WORD16 *pi2_dst_scratch = temp_ptr;
 4093|  22.0k|                WORD32 out_stride = 8;
 4094|       |
 4095|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 4096|       |
 4097|  22.0k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[trans_size]);
 4098|  22.0k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)&pi2_tmp[3 * trans_size]);
 4099|       |
 4100|  22.0k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 4101|       |
 4102|       |
 4103|       |                /* o0[0-3] */
 4104|  22.0k|                {
 4105|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4106|       |
 4107|  22.0k|                    m_temp_reg_31 = _mm_sub_epi32(temp1, m_temp_reg_20);
 4108|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(temp1, m_temp_reg_20);
 4109|       |
 4110|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4111|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4112|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4113|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4114|       |
 4115|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4116|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4117|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4118|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4119|       |
 4120|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4121|       |
 4122|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4123|  22.0k|                    pi2_dst_scratch += out_stride;
 4124|       |
 4125|  22.0k|                }
 4126|       |
 4127|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 4128|       |
 4129|       |                /* o1[0-3] */
 4130|  22.0k|                {
 4131|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4132|       |
 4133|  22.0k|                    m_temp_reg_31 = _mm_sub_epi32(temp3, m_temp_reg_20);
 4134|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(temp3, m_temp_reg_20);
 4135|       |
 4136|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4137|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4138|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4139|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4140|       |
 4141|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4142|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4143|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4144|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4145|       |
 4146|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4147|       |
 4148|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4149|  22.0k|                    pi2_dst_scratch += out_stride;
 4150|       |
 4151|  22.0k|                }
 4152|       |
 4153|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 4154|       |
 4155|       |                /* o2[0-3] */
 4156|  22.0k|                {
 4157|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4158|       |
 4159|  22.0k|                    m_temp_reg_31 = _mm_sub_epi32(temp5, m_temp_reg_20);
 4160|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(temp5, m_temp_reg_20);
 4161|       |
 4162|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4163|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4164|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4165|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4166|       |
 4167|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4168|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4169|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4170|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4171|       |
 4172|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4173|       |
 4174|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4175|  22.0k|                    pi2_dst_scratch += out_stride;
 4176|       |
 4177|  22.0k|                }
 4178|       |
 4179|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 4180|       |
 4181|       |                /* o3[0-3] */
 4182|  22.0k|                {
 4183|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4184|       |
 4185|  22.0k|                    m_temp_reg_31 = _mm_sub_epi32(temp7, m_temp_reg_20);
 4186|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(temp7, m_temp_reg_20);
 4187|       |
 4188|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4189|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4190|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4191|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4192|       |
 4193|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4194|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4195|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4196|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4197|       |
 4198|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4199|       |
 4200|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4201|  22.0k|                    pi2_dst_scratch += out_stride;
 4202|       |
 4203|  22.0k|                }
 4204|       |
 4205|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 4206|       |
 4207|       |                /* o4[0-3] */
 4208|  22.0k|                {
 4209|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4210|       |
 4211|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_20);
 4212|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_20);
 4213|       |
 4214|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4215|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4216|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4217|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4218|       |
 4219|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4220|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4221|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4222|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4223|       |
 4224|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4225|       |
 4226|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4227|  22.0k|                    pi2_dst_scratch += out_stride;
 4228|       |
 4229|  22.0k|                }
 4230|       |
 4231|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 4232|       |
 4233|       |                /* o5[0-3] */
 4234|  22.0k|                {
 4235|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4236|       |
 4237|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_20);
 4238|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_20);
 4239|       |
 4240|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4241|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4242|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4243|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4244|       |
 4245|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4246|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4247|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4248|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4249|       |
 4250|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4251|       |
 4252|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4253|  22.0k|                    pi2_dst_scratch += out_stride;
 4254|       |
 4255|  22.0k|                }
 4256|       |
 4257|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 4258|       |
 4259|       |                /* o6[0-3] */
 4260|  22.0k|                {
 4261|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4262|       |
 4263|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_20);
 4264|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_20);
 4265|       |
 4266|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4267|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4268|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4269|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4270|       |
 4271|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4272|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4273|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4274|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4275|       |
 4276|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4277|       |
 4278|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4279|  22.0k|                    pi2_dst_scratch += out_stride;
 4280|       |
 4281|  22.0k|                }
 4282|       |
 4283|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 4284|       |
 4285|       |                /* o7[0-3] */
 4286|  22.0k|                {
 4287|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4288|       |
 4289|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_20);
 4290|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_20);
 4291|       |
 4292|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4293|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4294|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4295|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4296|       |
 4297|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4298|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4299|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4300|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4301|       |
 4302|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4303|       |
 4304|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4305|  22.0k|                    pi2_dst_scratch += 8;
 4306|       |
 4307|  22.0k|                }
 4308|       |
 4309|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 4310|       |
 4311|       |                /* o8[0-3] */
 4312|  22.0k|                {
 4313|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4314|       |
 4315|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_20);
 4316|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_20);
 4317|       |
 4318|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4319|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4320|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4321|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4322|       |
 4323|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4324|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4325|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4326|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4327|       |
 4328|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4329|       |
 4330|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4331|  22.0k|                    pi2_dst_scratch += out_stride;
 4332|  22.0k|                }
 4333|       |
 4334|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 4335|       |
 4336|       |                /* o9[0-3] */
 4337|  22.0k|                {
 4338|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4339|       |
 4340|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_20);
 4341|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_20);
 4342|       |
 4343|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4344|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4345|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4346|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4347|       |
 4348|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4349|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4350|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4351|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4352|       |
 4353|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4354|       |
 4355|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4356|  22.0k|                    pi2_dst_scratch += out_stride;
 4357|       |
 4358|  22.0k|                }
 4359|       |
 4360|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 4361|       |
 4362|       |                /* o10[0-3] */
 4363|  22.0k|                {
 4364|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4365|       |
 4366|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_20);
 4367|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_20);
 4368|       |
 4369|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4370|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4371|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4372|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4373|       |
 4374|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4375|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4376|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4377|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4378|       |
 4379|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4380|       |
 4381|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4382|  22.0k|                    pi2_dst_scratch += out_stride;
 4383|  22.0k|                }
 4384|       |
 4385|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 4386|       |
 4387|       |                /* o11[0-3] */
 4388|  22.0k|                {
 4389|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4390|       |
 4391|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_20);
 4392|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_20);
 4393|       |
 4394|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4395|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4396|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4397|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4398|       |
 4399|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4400|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4401|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4402|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4403|       |
 4404|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4405|       |
 4406|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4407|  22.0k|                    pi2_dst_scratch += out_stride;
 4408|       |
 4409|  22.0k|                }
 4410|       |
 4411|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 4412|       |
 4413|       |                /* o12[0-3] */
 4414|  22.0k|                {
 4415|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4416|       |
 4417|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(temp8, m_temp_reg_20);
 4418|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(temp8, m_temp_reg_20);
 4419|       |
 4420|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4421|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4422|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4423|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4424|       |
 4425|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4426|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4427|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4428|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4429|       |
 4430|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4431|       |
 4432|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4433|  22.0k|                    pi2_dst_scratch += out_stride;
 4434|       |
 4435|  22.0k|                }
 4436|       |
 4437|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 4438|       |
 4439|       |                /* o13[0-3] */
 4440|  22.0k|                {
 4441|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4442|       |
 4443|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(temp6, m_temp_reg_20);
 4444|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(temp6, m_temp_reg_20);
 4445|       |
 4446|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4447|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4448|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4449|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4450|       |
 4451|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4452|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4453|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4454|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4455|       |
 4456|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4457|       |
 4458|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4459|  22.0k|                    pi2_dst_scratch += out_stride;
 4460|  22.0k|                }
 4461|       |
 4462|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 4463|       |
 4464|       |                /* o14[0-3] */
 4465|  22.0k|                {
 4466|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4467|       |
 4468|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(temp4, m_temp_reg_20);
 4469|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(temp4, m_temp_reg_20);
 4470|       |
 4471|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4472|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4473|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4474|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4475|       |
 4476|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4477|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4478|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4479|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4480|       |
 4481|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4482|       |
 4483|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4484|  22.0k|                    pi2_dst_scratch += out_stride;
 4485|       |
 4486|  22.0k|                }
 4487|       |
 4488|  22.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 4489|       |
 4490|       |                /* o15[0-3] */
 4491|  22.0k|                {
 4492|  22.0k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4493|       |
 4494|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(temp2, m_temp_reg_20);
 4495|  22.0k|                    m_temp_reg_30 = _mm_sub_epi32(temp2, m_temp_reg_20);
 4496|       |
 4497|  22.0k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4498|  22.0k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4499|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4500|  22.0k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4501|       |
 4502|  22.0k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4503|  22.0k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4504|  22.0k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4505|  22.0k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4506|       |
 4507|  22.0k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4508|       |
 4509|  22.0k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4510|  22.0k|                    pi2_dst_scratch += 8;
 4511|  22.0k|                }
 4512|       |
 4513|  22.0k|            }
 4514|       |
 4515|  22.0k|        }
 4516|  23.8k|        else if(zero_last24_rows_stg2)
  ------------------
  |  Branch (4516:17): [True: 2.93k, False: 20.9k]
  ------------------
 4517|  2.93k|        {
 4518|       |            /* eo */
 4519|  2.93k|            {
 4520|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 4521|       |
 4522|  2.93k|                m_temp_reg_10 = _mm_loadu_si128((__m128i *)&pi2_tmp[2 * trans_size]);
 4523|  2.93k|                m_temp_reg_11 = _mm_loadu_si128((__m128i *)&pi2_tmp[6 * trans_size]);
 4524|       |
 4525|  2.93k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_10, m_temp_reg_11);
 4526|       |
 4527|       |
 4528|       |                /* eo0[0-3] */
 4529|  2.93k|                {
 4530|  2.93k|                    m_temp_reg_90 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4531|       |
 4532|  2.93k|                }
 4533|       |
 4534|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
 4535|       |
 4536|       |                /* eo1[0-3] */
 4537|  2.93k|                {
 4538|  2.93k|                    m_temp_reg_91 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4539|       |
 4540|  2.93k|                }
 4541|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
 4542|       |
 4543|       |                /* eo2[0-3] */
 4544|  2.93k|                {
 4545|  2.93k|                    m_temp_reg_92 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4546|       |
 4547|  2.93k|                }
 4548|       |
 4549|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
 4550|       |
 4551|       |                /* eo3[0-3] */
 4552|  2.93k|                {
 4553|       |
 4554|  2.93k|                    m_temp_reg_93 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4555|       |
 4556|  2.93k|                }
 4557|       |
 4558|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
 4559|       |
 4560|       |                /* eo4[0-3] */
 4561|  2.93k|                {
 4562|  2.93k|                    m_temp_reg_94 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4563|       |
 4564|  2.93k|                }
 4565|       |
 4566|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
 4567|       |
 4568|       |                /* eo5[0-3] */
 4569|  2.93k|                {
 4570|  2.93k|                    m_temp_reg_95 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4571|  2.93k|                }
 4572|       |
 4573|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 4574|       |                /* eo6[0-3] */
 4575|  2.93k|                {
 4576|  2.93k|                    m_temp_reg_96 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4577|  2.93k|                }
 4578|       |
 4579|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 4580|       |                /* eo7[0-3] */
 4581|  2.93k|                {
 4582|  2.93k|                    m_temp_reg_97 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4583|       |
 4584|  2.93k|                }
 4585|       |
 4586|  2.93k|            }
 4587|       |
 4588|       |            /* eeo */
 4589|  2.93k|            {
 4590|       |
 4591|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
 4592|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75
 4593|  2.93k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18
 4594|  2.93k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[8][0]); //50
 4595|       |
 4596|  2.93k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[4 * trans_size]);
 4597|       |
 4598|  2.93k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, all_zero_reg);
 4599|       |
 4600|       |                /* eeo0[0-3] */
 4601|  2.93k|                {
 4602|  2.93k|                    temp1 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4603|       |
 4604|  2.93k|                }
 4605|       |
 4606|       |                /* eeo1[0-3] */
 4607|  2.93k|                {
 4608|  2.93k|                    temp2 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
 4609|       |
 4610|  2.93k|                }
 4611|       |
 4612|       |                /* eo2[0-3] */
 4613|  2.93k|                {
 4614|  2.93k|                    temp3 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
 4615|       |
 4616|  2.93k|                }
 4617|       |
 4618|       |
 4619|       |                /* eo3[0-3] */
 4620|  2.93k|                {
 4621|  2.93k|                    temp4 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 4622|       |
 4623|  2.93k|                }
 4624|       |
 4625|  2.93k|            }
 4626|       |
 4627|  2.93k|            m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83
 4628|  2.93k|            m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36
 4629|  2.93k|            m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64
 4630|       |
 4631|  2.93k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[0 * trans_size]);
 4632|       |
 4633|       |            //m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_70);
 4634|  2.93k|            m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
 4635|       |
 4636|  2.93k|            m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4637|  2.93k|            m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4638|       |
 4639|  2.93k|            m_temp_reg_70 = _mm_add_epi32(m_temp_reg_14, temp1);  /* ee[0] */
 4640|  2.93k|            m_temp_reg_71 = _mm_sub_epi32(m_temp_reg_14, temp1);  /* ee[7] */
 4641|       |
 4642|  2.93k|            m_temp_reg_72 = _mm_add_epi32(m_temp_reg_16, temp2);  /* ee[1] */
 4643|  2.93k|            m_temp_reg_73 = _mm_sub_epi32(m_temp_reg_16, temp2);  /* ee[6] */
 4644|       |
 4645|  2.93k|            m_temp_reg_74 = _mm_add_epi32(m_temp_reg_16, temp3);  /* ee[2] */
 4646|  2.93k|            m_temp_reg_75 = _mm_sub_epi32(m_temp_reg_16, temp3);  /* ee[5] */
 4647|       |
 4648|  2.93k|            m_temp_reg_76 = _mm_add_epi32(m_temp_reg_14, temp4);  /* ee[3] */
 4649|  2.93k|            m_temp_reg_77 = _mm_sub_epi32(m_temp_reg_14, temp4);  /* ee[4] */
 4650|       |
 4651|       |            /* e[]*/
 4652|       |
 4653|  2.93k|            temp1 = _mm_add_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[0] */
 4654|  2.93k|            temp2 = _mm_sub_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[15] */
 4655|       |
 4656|  2.93k|            temp3 = _mm_add_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[1] */
 4657|  2.93k|            temp4 = _mm_sub_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[14] */
 4658|       |
 4659|  2.93k|            temp5 = _mm_add_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[2] */
 4660|  2.93k|            temp6 = _mm_sub_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[13] */
 4661|       |
 4662|  2.93k|            temp7 = _mm_add_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[3] */
 4663|  2.93k|            temp8 = _mm_sub_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[12] */
 4664|       |
 4665|  2.93k|            m_temp_reg_90 = _mm_add_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[4] */
 4666|  2.93k|            m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[11] */
 4667|       |
 4668|  2.93k|            m_temp_reg_92 = _mm_add_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[5] */
 4669|  2.93k|            m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[10] */
 4670|       |
 4671|  2.93k|            m_temp_reg_94 = _mm_add_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[6] */
 4672|  2.93k|            m_temp_reg_95 = _mm_sub_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[9] */
 4673|       |
 4674|  2.93k|            m_temp_reg_96 = _mm_add_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[7] */
 4675|  2.93k|            m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[8] */
 4676|       |
 4677|       |            /*o[k] */
 4678|  2.93k|            {
 4679|       |
 4680|  2.93k|                WORD16 *pi2_dst_scratch = temp_ptr;
 4681|  2.93k|                WORD32 out_stride = 8;
 4682|       |
 4683|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 4684|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 4685|       |
 4686|  2.93k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[trans_size]);
 4687|  2.93k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)&pi2_tmp[3 * trans_size]);
 4688|  2.93k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[5 * trans_size]);
 4689|  2.93k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)&pi2_tmp[7 * trans_size]);
 4690|       |
 4691|  2.93k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 4692|  2.93k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73);
 4693|       |
 4694|       |                /* o0[0-3] */
 4695|  2.93k|                {
 4696|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4697|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4698|       |
 4699|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 4700|       |
 4701|  2.93k|                    m_temp_reg_31 = _mm_sub_epi32(temp1, m_temp_reg_20);
 4702|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(temp1, m_temp_reg_20);
 4703|       |
 4704|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4705|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4706|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4707|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4708|       |
 4709|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4710|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4711|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4712|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4713|       |
 4714|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4715|       |
 4716|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4717|  2.93k|                    pi2_dst_scratch += out_stride;
 4718|       |
 4719|  2.93k|                }
 4720|       |
 4721|       |
 4722|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 4723|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 4724|       |
 4725|       |                /* o1[0-3] */
 4726|  2.93k|                {
 4727|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4728|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4729|       |
 4730|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 4731|       |
 4732|  2.93k|                    m_temp_reg_31 = _mm_sub_epi32(temp3, m_temp_reg_20);
 4733|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(temp3, m_temp_reg_20);
 4734|       |
 4735|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4736|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4737|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4738|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4739|       |
 4740|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4741|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4742|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4743|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4744|       |
 4745|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4746|       |
 4747|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4748|  2.93k|                    pi2_dst_scratch += out_stride;
 4749|       |
 4750|  2.93k|                }
 4751|       |
 4752|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 4753|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 4754|       |
 4755|       |                /* o2[0-3] */
 4756|  2.93k|                {
 4757|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4758|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4759|       |
 4760|  2.93k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 4761|       |
 4762|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(temp5, m_temp_reg_20);
 4763|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(temp5, m_temp_reg_20);
 4764|       |
 4765|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4766|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4767|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4768|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4769|       |
 4770|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4771|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4772|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4773|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4774|       |
 4775|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4776|       |
 4777|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4778|  2.93k|                    pi2_dst_scratch += out_stride;
 4779|       |
 4780|  2.93k|                }
 4781|       |
 4782|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 4783|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 4784|       |
 4785|       |                /* o3[0-3] */
 4786|  2.93k|                {
 4787|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4788|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4789|       |
 4790|  2.93k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 4791|       |
 4792|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(temp7, m_temp_reg_20);
 4793|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(temp7, m_temp_reg_20);
 4794|       |
 4795|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4796|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4797|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4798|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4799|       |
 4800|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4801|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4802|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4803|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4804|       |
 4805|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4806|       |
 4807|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4808|  2.93k|                    pi2_dst_scratch += out_stride;
 4809|       |
 4810|  2.93k|                }
 4811|       |
 4812|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 4813|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 4814|       |
 4815|       |                /* o4[0-3] */
 4816|  2.93k|                {
 4817|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4818|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4819|       |
 4820|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4821|       |
 4822|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_20);
 4823|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_20);
 4824|       |
 4825|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4826|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4827|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4828|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4829|       |
 4830|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4831|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4832|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4833|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4834|       |
 4835|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4836|       |
 4837|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4838|  2.93k|                    pi2_dst_scratch += out_stride;
 4839|       |
 4840|  2.93k|                }
 4841|       |
 4842|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 4843|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 4844|       |
 4845|       |                /* o5[0-3] */
 4846|  2.93k|                {
 4847|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4848|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4849|       |
 4850|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4851|       |
 4852|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_20);
 4853|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_20);
 4854|       |
 4855|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4856|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4857|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4858|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4859|       |
 4860|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4861|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4862|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4863|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4864|       |
 4865|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4866|       |
 4867|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4868|  2.93k|                    pi2_dst_scratch += out_stride;
 4869|       |
 4870|  2.93k|                }
 4871|       |
 4872|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 4873|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 4874|       |
 4875|       |                /* o6[0-3] */
 4876|  2.93k|                {
 4877|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4878|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4879|       |
 4880|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4881|       |
 4882|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_20);
 4883|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_20);
 4884|       |
 4885|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4886|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4887|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4888|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4889|       |
 4890|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4891|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4892|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4893|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4894|       |
 4895|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4896|       |
 4897|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4898|  2.93k|                    pi2_dst_scratch += out_stride;
 4899|       |
 4900|  2.93k|                }
 4901|       |
 4902|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 4903|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 4904|       |
 4905|       |                /* o7[0-3] */
 4906|  2.93k|                {
 4907|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4908|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4909|       |
 4910|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4911|       |
 4912|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_20);
 4913|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_20);
 4914|       |
 4915|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4916|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4917|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4918|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4919|       |
 4920|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4921|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4922|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4923|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4924|       |
 4925|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4926|       |
 4927|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4928|  2.93k|                    pi2_dst_scratch += 8;
 4929|       |
 4930|  2.93k|                }
 4931|       |
 4932|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 4933|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 4934|       |
 4935|       |                /* o8[0-3] */
 4936|  2.93k|                {
 4937|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4938|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4939|       |
 4940|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4941|       |
 4942|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_20);
 4943|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_20);
 4944|       |
 4945|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4946|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4947|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4948|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4949|       |
 4950|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4951|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4952|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4953|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4954|       |
 4955|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4956|       |
 4957|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4958|  2.93k|                    pi2_dst_scratch += out_stride;
 4959|  2.93k|                }
 4960|       |
 4961|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 4962|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 4963|       |
 4964|       |                /* o9[0-3] */
 4965|  2.93k|                {
 4966|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4967|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4968|       |
 4969|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4970|       |
 4971|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_20);
 4972|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_20);
 4973|       |
 4974|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4975|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4976|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4977|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4978|       |
 4979|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4980|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4981|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4982|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4983|       |
 4984|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4985|       |
 4986|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4987|  2.93k|                    pi2_dst_scratch += out_stride;
 4988|  2.93k|                }
 4989|       |
 4990|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 4991|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 4992|       |
 4993|       |                /* o10[0-3] */
 4994|  2.93k|                {
 4995|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4996|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4997|       |
 4998|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4999|       |
 5000|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_20);
 5001|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_20);
 5002|       |
 5003|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5004|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5005|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5006|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5007|       |
 5008|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5009|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5010|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5011|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5012|       |
 5013|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5014|       |
 5015|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5016|  2.93k|                    pi2_dst_scratch += out_stride;
 5017|  2.93k|                }
 5018|       |
 5019|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 5020|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 5021|       |
 5022|       |                /* o11[0-3] */
 5023|  2.93k|                {
 5024|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5025|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5026|       |
 5027|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5028|       |
 5029|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_20);
 5030|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_20);
 5031|       |
 5032|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5033|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5034|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5035|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5036|       |
 5037|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5038|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5039|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5040|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5041|       |
 5042|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5043|       |
 5044|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5045|  2.93k|                    pi2_dst_scratch += out_stride;
 5046|       |
 5047|  2.93k|                }
 5048|       |
 5049|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 5050|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 5051|       |
 5052|       |                /* o12[0-3] */
 5053|  2.93k|                {
 5054|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5055|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5056|       |
 5057|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5058|       |
 5059|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(temp8, m_temp_reg_20);
 5060|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(temp8, m_temp_reg_20);
 5061|       |
 5062|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5063|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5064|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5065|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5066|       |
 5067|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5068|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5069|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5070|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5071|       |
 5072|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5073|       |
 5074|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5075|  2.93k|                    pi2_dst_scratch += out_stride;
 5076|       |
 5077|  2.93k|                }
 5078|       |
 5079|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 5080|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 5081|       |
 5082|       |                /* o13[0-3] */
 5083|  2.93k|                {
 5084|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5085|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5086|       |
 5087|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5088|       |
 5089|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(temp6, m_temp_reg_20);
 5090|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(temp6, m_temp_reg_20);
 5091|       |
 5092|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5093|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5094|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5095|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5096|       |
 5097|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5098|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5099|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5100|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5101|       |
 5102|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5103|       |
 5104|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5105|  2.93k|                    pi2_dst_scratch += out_stride;
 5106|  2.93k|                }
 5107|       |
 5108|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 5109|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 5110|       |
 5111|       |                /* o14[0-3] */
 5112|  2.93k|                {
 5113|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5114|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5115|       |
 5116|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5117|       |
 5118|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(temp4, m_temp_reg_20);
 5119|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(temp4, m_temp_reg_20);
 5120|       |
 5121|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5122|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5123|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5124|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5125|       |
 5126|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5127|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5128|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5129|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5130|       |
 5131|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5132|       |
 5133|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5134|  2.93k|                    pi2_dst_scratch += out_stride;
 5135|  2.93k|                }
 5136|       |
 5137|  2.93k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 5138|  2.93k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 5139|       |
 5140|       |                /* o15[0-3] */
 5141|  2.93k|                {
 5142|  2.93k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5143|  2.93k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5144|       |
 5145|  2.93k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5146|       |
 5147|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(temp2, m_temp_reg_20);
 5148|  2.93k|                    m_temp_reg_30 = _mm_sub_epi32(temp2, m_temp_reg_20);
 5149|       |
 5150|  2.93k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5151|  2.93k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5152|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5153|  2.93k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5154|       |
 5155|  2.93k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5156|  2.93k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5157|  2.93k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5158|  2.93k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5159|       |
 5160|  2.93k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5161|       |
 5162|  2.93k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5163|  2.93k|                    pi2_dst_scratch += 8;
 5164|  2.93k|                }
 5165|       |
 5166|  2.93k|            }
 5167|  2.93k|        }
 5168|  20.9k|        else
 5169|  20.9k|        {
 5170|       |            /* eo */
 5171|  20.9k|            {
 5172|       |
 5173|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 5174|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[1][0]); //80 70
 5175|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57 43
 5176|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25 9
 5177|       |
 5178|       |
 5179|  20.9k|                m_temp_reg_10 = _mm_loadu_si128((__m128i *)&pi2_tmp[2 * trans_size]);
 5180|  20.9k|                m_temp_reg_11 = _mm_loadu_si128((__m128i *)&pi2_tmp[6 * trans_size]);
 5181|  20.9k|                m_temp_reg_12 = _mm_loadu_si128((__m128i *)&pi2_tmp[10 * trans_size]);
 5182|  20.9k|                m_temp_reg_13 = _mm_loadu_si128((__m128i *)&pi2_tmp[14 * trans_size]);
 5183|  20.9k|                m_temp_reg_18 = _mm_loadu_si128((__m128i *)&pi2_tmp[18 * trans_size]);
 5184|  20.9k|                m_temp_reg_19 = _mm_loadu_si128((__m128i *)&pi2_tmp[22 * trans_size]);
 5185|  20.9k|                m_temp_reg_20 = _mm_loadu_si128((__m128i *)&pi2_tmp[26 * trans_size]);
 5186|  20.9k|                m_temp_reg_21 = _mm_loadu_si128((__m128i *)&pi2_tmp[30 * trans_size]);
 5187|       |
 5188|  20.9k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_10, m_temp_reg_11);
 5189|  20.9k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_12, m_temp_reg_13);
 5190|  20.9k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_18, m_temp_reg_19);
 5191|  20.9k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_21);
 5192|       |
 5193|       |                /* eo0[0-3] */
 5194|  20.9k|                {
 5195|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5196|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5197|       |
 5198|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5199|       |
 5200|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5201|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5202|       |
 5203|  20.9k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5204|       |
 5205|  20.9k|                    m_temp_reg_90 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5206|       |
 5207|  20.9k|                }
 5208|       |
 5209|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
 5210|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //0  -43
 5211|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80  90
 5212|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70  25
 5213|       |
 5214|       |                /* eo1[0-3] */
 5215|  20.9k|                {
 5216|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5217|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5218|       |
 5219|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5220|       |
 5221|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5222|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5223|       |
 5224|  20.9k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5225|       |
 5226|  20.9k|                    m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_32);
 5227|       |
 5228|  20.9k|                }
 5229|       |
 5230|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
 5231|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[9][0]); //70  87
 5232|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[10][0]); //-25  57
 5233|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[11][0]); //90  43
 5234|       |
 5235|       |                /* eo2[0-3] */
 5236|  20.9k|                {
 5237|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5238|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5239|       |
 5240|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 5241|       |
 5242|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5243|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5244|       |
 5245|  20.9k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5246|       |
 5247|  20.9k|                    m_temp_reg_92 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5248|       |
 5249|  20.9k|                }
 5250|       |
 5251|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
 5252|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[13][0]); //-87  9
 5253|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[14][0]); //90  25
 5254|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[15][0]); //80  57
 5255|       |
 5256|       |                /* eo3[0-3] */
 5257|  20.9k|                {
 5258|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5259|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5260|       |
 5261|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5262|       |
 5263|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5264|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5265|       |
 5266|  20.9k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_32, m_temp_reg_33);
 5267|       |
 5268|  20.9k|                    m_temp_reg_93 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5269|       |
 5270|  20.9k|                }
 5271|       |
 5272|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
 5273|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[17][0]); //-25  90
 5274|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[18][0]); //9  87
 5275|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43  70
 5276|       |
 5277|       |
 5278|       |                /* eo4[0-3] */
 5279|  20.9k|                {
 5280|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5281|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5282|       |
 5283|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5284|       |
 5285|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5286|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5287|       |
 5288|  20.9k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
 5289|       |
 5290|  20.9k|                    m_temp_reg_94 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5291|       |
 5292|  20.9k|                }
 5293|       |
 5294|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
 5295|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[21][0]); //57  25
 5296|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[22][0]); //-87  70
 5297|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[23][0]); //9  -80
 5298|       |
 5299|       |                /* eo5[0-3] */
 5300|  20.9k|                {
 5301|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5302|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5303|       |
 5304|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5305|       |
 5306|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5307|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5308|       |
 5309|  20.9k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5310|       |
 5311|  20.9k|                    m_temp_reg_95 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5312|  20.9k|                }
 5313|       |
 5314|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 5315|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[25][0]); //90  -80
 5316|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[26][0]); //43  9
 5317|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[27][0]); //-57  87
 5318|       |
 5319|       |                /* eo6[0-3] */
 5320|  20.9k|                {
 5321|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5322|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5323|       |
 5324|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5325|       |
 5326|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5327|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5328|       |
 5329|  20.9k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5330|       |
 5331|  20.9k|                    m_temp_reg_96 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5332|       |
 5333|  20.9k|                }
 5334|       |
 5335|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 5336|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[29][0]); //43  -57
 5337|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[30][0]); //70  -80
 5338|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[31][0]); //87  -90
 5339|       |
 5340|       |                /* eo7[0-3] */
 5341|  20.9k|                {
 5342|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5343|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5344|       |
 5345|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5346|       |
 5347|  20.9k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5348|  20.9k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5349|       |
 5350|  20.9k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5351|       |
 5352|  20.9k|                    m_temp_reg_97 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5353|       |
 5354|       |
 5355|  20.9k|                }
 5356|       |
 5357|  20.9k|            }
 5358|       |
 5359|       |            /* eeo */
 5360|  20.9k|            {
 5361|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
 5362|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[5][0]); //50 18
 5363|       |
 5364|  20.9k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[4 * trans_size]);
 5365|  20.9k|                m_temp_reg_76 = _mm_loadu_si128((__m128i *)&pi2_tmp[12 * trans_size]);
 5366|  20.9k|                m_temp_reg_82 = _mm_loadu_si128((__m128i *)&pi2_tmp[20 * trans_size]);
 5367|  20.9k|                m_temp_reg_86 = _mm_loadu_si128((__m128i *)&pi2_tmp[28 * trans_size]);
 5368|       |
 5369|       |                /* eeo0[0-3] */
 5370|  20.9k|                {
 5371|       |
 5372|  20.9k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 5373|  20.9k|                    m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_86);
 5374|       |
 5375|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5376|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5377|       |
 5378|  20.9k|                    temp1 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5379|       |
 5380|  20.9k|                }
 5381|       |
 5382|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75 -18
 5383|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[7][0]); //89  50
 5384|       |
 5385|       |                /* eeo1[0-3] */
 5386|  20.9k|                {
 5387|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 5388|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 5389|       |
 5390|  20.9k|                    temp2 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 5391|       |
 5392|  20.9k|                }
 5393|       |
 5394|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[8][0]); //50 -89
 5395|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18  75
 5396|       |
 5397|       |                /* eo2[0-3] */
 5398|  20.9k|                {
 5399|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 5400|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 5401|       |
 5402|  20.9k|                    temp3 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5403|       |
 5404|  20.9k|                }
 5405|       |
 5406|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[10][0]); //18 -50
 5407|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[11][0]); //75  -89
 5408|       |
 5409|       |                /* eo3[0-3] */
 5410|  20.9k|                {
 5411|  20.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 5412|  20.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 5413|       |
 5414|  20.9k|                    temp4 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5415|       |
 5416|  20.9k|                }
 5417|       |
 5418|       |
 5419|  20.9k|            }
 5420|       |
 5421|  20.9k|            m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83 36
 5422|  20.9k|            m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36 -83
 5423|       |
 5424|  20.9k|            m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64 64
 5425|  20.9k|            m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[3][0]); //64 -64
 5426|       |
 5427|  20.9k|            m_temp_reg_74 = _mm_loadu_si128((__m128i *)&pi2_tmp[8 * trans_size]);
 5428|  20.9k|            m_temp_reg_84 = _mm_loadu_si128((__m128i *)&pi2_tmp[24 * trans_size]);
 5429|       |
 5430|  20.9k|            m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_84);
 5431|       |
 5432|  20.9k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[0 * trans_size]);
 5433|  20.9k|            m_temp_reg_80 = _mm_loadu_si128((__m128i *)&pi2_tmp[16 * trans_size]);
 5434|       |
 5435|  20.9k|            m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_80);
 5436|       |
 5437|  20.9k|            m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);  /* eeeo[0] */
 5438|  20.9k|            m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);  /* eeeo[1] */
 5439|       |
 5440|  20.9k|            m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);  /* eeee[0] */
 5441|  20.9k|            m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);  /* eeee[1] */
 5442|       |
 5443|       |/* eeeo[0]= m_temp_reg_20  */
 5444|       |/* eeeo[1]= m_temp_reg_21  */
 5445|       |/* eeee[0]= m_temp_reg_22  */
 5446|       |/* eeee[1]= m_temp_reg_23  */
 5447|       |
 5448|       |            /* eee[0] = eeee[0] + eeeo[0]; */
 5449|  20.9k|            m_temp_reg_40 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[0] */
 5450|       |
 5451|       |            /* eee[3] = eeee[0] - eeeo[0]; */
 5452|  20.9k|            m_temp_reg_43 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[1] */
 5453|       |
 5454|       |            /* eee[2] = eeee[1] - eeeo[1]; */
 5455|  20.9k|            m_temp_reg_42 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[1] */
 5456|       |
 5457|       |            /* eee[1] = eeee[1] + eeeo[1];*/
 5458|  20.9k|            m_temp_reg_41 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[0] */
 5459|       |
 5460|  20.9k|            m_temp_reg_70 = _mm_add_epi32(m_temp_reg_40, temp1);  /* ee[0] */
 5461|  20.9k|            m_temp_reg_71 = _mm_sub_epi32(m_temp_reg_40, temp1);  /* ee[7] */
 5462|       |
 5463|  20.9k|            m_temp_reg_72 = _mm_add_epi32(m_temp_reg_41, temp2);  /* ee[1] */
 5464|  20.9k|            m_temp_reg_73 = _mm_sub_epi32(m_temp_reg_41, temp2);  /* ee[6] */
 5465|       |
 5466|  20.9k|            m_temp_reg_74 = _mm_add_epi32(m_temp_reg_42, temp3);  /* ee[2] */
 5467|  20.9k|            m_temp_reg_75 = _mm_sub_epi32(m_temp_reg_42, temp3);  /* ee[5] */
 5468|       |
 5469|  20.9k|            m_temp_reg_76 = _mm_add_epi32(m_temp_reg_43, temp4);  /* ee[3] */
 5470|  20.9k|            m_temp_reg_77 = _mm_sub_epi32(m_temp_reg_43, temp4);  /* ee[4] */
 5471|       |
 5472|       |/* e[]*/
 5473|       |
 5474|  20.9k|            temp1 = _mm_add_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[0] */
 5475|  20.9k|            temp2 = _mm_sub_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[15] */
 5476|       |
 5477|  20.9k|            temp3 = _mm_add_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[1] */
 5478|  20.9k|            temp4 = _mm_sub_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[14] */
 5479|       |
 5480|  20.9k|            temp5 = _mm_add_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[2] */
 5481|  20.9k|            temp6 = _mm_sub_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[13] */
 5482|       |
 5483|  20.9k|            temp7 = _mm_add_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[3] */
 5484|  20.9k|            temp8 = _mm_sub_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[12] */
 5485|       |
 5486|  20.9k|            m_temp_reg_90 = _mm_add_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[4] */
 5487|  20.9k|            m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[11] */
 5488|       |
 5489|  20.9k|            m_temp_reg_92 = _mm_add_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[5] */
 5490|  20.9k|            m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[10] */
 5491|       |
 5492|  20.9k|            m_temp_reg_94 = _mm_add_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[6] */
 5493|  20.9k|            m_temp_reg_95 = _mm_sub_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[9] */
 5494|       |
 5495|  20.9k|            m_temp_reg_96 = _mm_add_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[7] */
 5496|  20.9k|            m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[8] */
 5497|       |
 5498|       |/*o[k] */
 5499|  20.9k|            {
 5500|       |
 5501|  20.9k|                WORD16 *pi2_dst_scratch = temp_ptr;
 5502|  20.9k|                WORD32 out_stride = 8;
 5503|       |
 5504|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 5505|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 5506|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[2][0]);
 5507|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[3][0]);
 5508|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[4][0]);
 5509|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[5][0]);
 5510|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[6][0]);
 5511|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[7][0]);
 5512|       |
 5513|       |
 5514|  20.9k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[trans_size]);
 5515|  20.9k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)&pi2_tmp[3 * trans_size]);
 5516|  20.9k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[5 * trans_size]);
 5517|  20.9k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)&pi2_tmp[7 * trans_size]);
 5518|  20.9k|                m_temp_reg_74 = _mm_loadu_si128((__m128i *)&pi2_tmp[9 * trans_size]);
 5519|  20.9k|                m_temp_reg_75 = _mm_loadu_si128((__m128i *)&pi2_tmp[11 * trans_size]);
 5520|  20.9k|                m_temp_reg_76 = _mm_loadu_si128((__m128i *)&pi2_tmp[13 * trans_size]);
 5521|  20.9k|                m_temp_reg_77 = _mm_loadu_si128((__m128i *)&pi2_tmp[15 * trans_size]);
 5522|       |
 5523|  20.9k|                m_temp_reg_80 = _mm_loadu_si128((__m128i *)&pi2_tmp[17 * trans_size]);
 5524|  20.9k|                m_temp_reg_81 = _mm_loadu_si128((__m128i *)&pi2_tmp[19 * trans_size]);
 5525|  20.9k|                m_temp_reg_82 = _mm_loadu_si128((__m128i *)&pi2_tmp[21 * trans_size]);
 5526|  20.9k|                m_temp_reg_83 = _mm_loadu_si128((__m128i *)&pi2_tmp[23 * trans_size]);
 5527|  20.9k|                m_temp_reg_84 = _mm_loadu_si128((__m128i *)&pi2_tmp[25 * trans_size]);
 5528|  20.9k|                m_temp_reg_85 = _mm_loadu_si128((__m128i *)&pi2_tmp[27 * trans_size]);
 5529|  20.9k|                m_temp_reg_86 = _mm_loadu_si128((__m128i *)&pi2_tmp[29 * trans_size]);
 5530|  20.9k|                m_temp_reg_87 = _mm_loadu_si128((__m128i *)&pi2_tmp[31 * trans_size]);
 5531|       |
 5532|  20.9k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 5533|  20.9k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 interleaved
 5534|  20.9k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 interleaved
 5535|  20.9k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 interleaved
 5536|  20.9k|                m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_80, m_temp_reg_81); //row 17 and row 19 interleaved
 5537|  20.9k|                m_temp_reg_15 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_83); //row 21 and row 23 interleaved
 5538|  20.9k|                m_temp_reg_16 = _mm_unpacklo_epi16(m_temp_reg_84, m_temp_reg_85); //row 25 and row 27 interleaved
 5539|  20.9k|                m_temp_reg_17 = _mm_unpacklo_epi16(m_temp_reg_86, m_temp_reg_87); //row 29 and row 31 interleaved
 5540|       |
 5541|       |                /* o0[0-3] */
 5542|  20.9k|                {
 5543|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5544|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5545|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5546|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5547|       |
 5548|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5549|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5550|       |
 5551|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5552|       |
 5553|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5554|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5555|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5556|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5557|       |
 5558|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5559|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5560|       |
 5561|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5562|       |
 5563|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5564|       |
 5565|  20.9k|                    m_temp_reg_31 = _mm_sub_epi32(temp1, m_temp_reg_20);
 5566|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(temp1, m_temp_reg_20);
 5567|       |
 5568|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5569|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5570|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5571|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5572|       |
 5573|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5574|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5575|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5576|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5577|       |
 5578|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5579|       |
 5580|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5581|  20.9k|                    pi2_dst_scratch += out_stride;
 5582|       |
 5583|  20.9k|                }
 5584|       |
 5585|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 5586|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 5587|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[10][0]);
 5588|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[11][0]);
 5589|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[12][0]);
 5590|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[13][0]);
 5591|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[14][0]);
 5592|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[15][0]);
 5593|       |
 5594|       |                /* o1[0-3] */
 5595|  20.9k|                {
 5596|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5597|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5598|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5599|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5600|       |
 5601|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5602|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5603|       |
 5604|  20.9k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_20);
 5605|       |
 5606|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5607|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5608|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5609|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5610|       |
 5611|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5612|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5613|       |
 5614|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5615|       |
 5616|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5617|       |
 5618|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp3, m_temp_reg_20);
 5619|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp3, m_temp_reg_20);
 5620|       |
 5621|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5622|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5623|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5624|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5625|       |
 5626|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5627|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5628|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5629|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5630|       |
 5631|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5632|       |
 5633|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5634|  20.9k|                    pi2_dst_scratch += out_stride;
 5635|       |
 5636|  20.9k|                }
 5637|       |
 5638|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 5639|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 5640|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[18][0]);
 5641|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[19][0]);
 5642|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[20][0]);
 5643|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[21][0]);
 5644|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[22][0]);
 5645|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[23][0]);
 5646|       |
 5647|       |                /* o2[0-3] */
 5648|  20.9k|                {
 5649|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5650|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5651|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5652|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5653|       |
 5654|  20.9k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 5655|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5656|       |
 5657|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5658|       |
 5659|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5660|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5661|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5662|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5663|       |
 5664|  20.9k|                    m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_41);
 5665|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5666|       |
 5667|  20.9k|                    m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_42);
 5668|       |
 5669|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5670|       |
 5671|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp5, m_temp_reg_20);
 5672|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp5, m_temp_reg_20);
 5673|       |
 5674|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5675|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5676|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5677|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5678|       |
 5679|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5680|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5681|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5682|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5683|       |
 5684|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5685|       |
 5686|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5687|  20.9k|                    pi2_dst_scratch += out_stride;
 5688|       |
 5689|  20.9k|                }
 5690|       |
 5691|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 5692|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 5693|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[26][0]);
 5694|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[27][0]);
 5695|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[28][0]);
 5696|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[29][0]);
 5697|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[30][0]);
 5698|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[31][0]);
 5699|       |
 5700|       |                /* o3[0-3] */
 5701|  20.9k|                {
 5702|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5703|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5704|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5705|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5706|       |
 5707|  20.9k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 5708|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5709|       |
 5710|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5711|       |
 5712|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5713|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5714|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5715|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5716|       |
 5717|  20.9k|                    m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_40);
 5718|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5719|       |
 5720|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5721|       |
 5722|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5723|       |
 5724|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp7, m_temp_reg_20);
 5725|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp7, m_temp_reg_20);
 5726|       |
 5727|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5728|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5729|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5730|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5731|       |
 5732|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5733|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5734|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5735|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5736|       |
 5737|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5738|       |
 5739|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5740|  20.9k|                    pi2_dst_scratch += out_stride;
 5741|       |
 5742|  20.9k|                }
 5743|       |
 5744|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 5745|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 5746|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[34][0]);
 5747|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[35][0]);
 5748|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[36][0]);
 5749|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[37][0]);
 5750|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[38][0]);
 5751|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[39][0]);
 5752|       |
 5753|       |                /* o4[0-3] */
 5754|  20.9k|                {
 5755|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5756|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5757|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5758|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5759|       |
 5760|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5761|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5762|       |
 5763|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5764|       |
 5765|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5766|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5767|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5768|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5769|       |
 5770|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5771|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5772|       |
 5773|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5774|       |
 5775|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5776|       |
 5777|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_20);
 5778|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_20);
 5779|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5780|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5781|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5782|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5783|       |
 5784|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5785|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5786|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5787|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5788|       |
 5789|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5790|       |
 5791|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5792|  20.9k|                    pi2_dst_scratch += out_stride;
 5793|       |
 5794|  20.9k|                }
 5795|       |
 5796|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 5797|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 5798|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[42][0]);
 5799|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[43][0]);
 5800|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[44][0]);
 5801|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[45][0]);
 5802|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[46][0]);
 5803|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[47][0]);
 5804|       |
 5805|       |                /* o5[0-3] */
 5806|  20.9k|                {
 5807|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5808|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5809|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5810|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5811|       |
 5812|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5813|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5814|       |
 5815|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5816|       |
 5817|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5818|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5819|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5820|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5821|       |
 5822|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5823|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5824|       |
 5825|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5826|       |
 5827|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5828|       |
 5829|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_20);
 5830|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_20);
 5831|       |
 5832|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5833|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5834|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5835|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5836|       |
 5837|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5838|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5839|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5840|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5841|       |
 5842|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5843|       |
 5844|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5845|  20.9k|                    pi2_dst_scratch += out_stride;
 5846|       |
 5847|  20.9k|                }
 5848|       |
 5849|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 5850|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 5851|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[50][0]);
 5852|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[51][0]);
 5853|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[52][0]);
 5854|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[53][0]);
 5855|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[54][0]);
 5856|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[55][0]);
 5857|       |
 5858|       |                /* o6[0-3] */
 5859|  20.9k|                {
 5860|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5861|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5862|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5863|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5864|       |
 5865|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5866|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5867|       |
 5868|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5869|       |
 5870|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5871|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5872|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5873|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5874|       |
 5875|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5876|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5877|       |
 5878|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5879|       |
 5880|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5881|       |
 5882|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_20);
 5883|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_20);
 5884|       |
 5885|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5886|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5887|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5888|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5889|       |
 5890|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5891|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5892|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5893|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5894|       |
 5895|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5896|       |
 5897|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5898|  20.9k|                    pi2_dst_scratch += out_stride;
 5899|       |
 5900|  20.9k|                }
 5901|       |
 5902|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 5903|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 5904|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[58][0]);
 5905|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[59][0]);
 5906|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[60][0]);
 5907|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[61][0]);
 5908|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[62][0]);
 5909|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[63][0]);
 5910|       |
 5911|       |                /* o7[0-3] */
 5912|  20.9k|                {
 5913|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5914|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5915|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5916|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5917|       |
 5918|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5919|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5920|       |
 5921|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5922|       |
 5923|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5924|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5925|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5926|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5927|       |
 5928|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5929|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5930|       |
 5931|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5932|       |
 5933|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5934|       |
 5935|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_20);
 5936|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_20);
 5937|       |
 5938|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5939|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5940|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5941|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5942|       |
 5943|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5944|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5945|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5946|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5947|       |
 5948|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5949|       |
 5950|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5951|  20.9k|                    pi2_dst_scratch += 8;
 5952|       |
 5953|  20.9k|                }
 5954|       |
 5955|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 5956|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 5957|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[66][0]);
 5958|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[67][0]);
 5959|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[68][0]);
 5960|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[69][0]);
 5961|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[70][0]);
 5962|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[71][0]);
 5963|       |
 5964|       |                /* o8[0-3] */
 5965|  20.9k|                {
 5966|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5967|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5968|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5969|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5970|       |
 5971|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5972|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5973|       |
 5974|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5975|       |
 5976|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5977|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5978|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5979|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5980|       |
 5981|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5982|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5983|       |
 5984|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5985|       |
 5986|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5987|       |
 5988|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_20);
 5989|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_20);
 5990|       |
 5991|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5992|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5993|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5994|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5995|       |
 5996|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5997|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5998|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5999|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6000|       |
 6001|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6002|       |
 6003|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6004|  20.9k|                    pi2_dst_scratch += out_stride;
 6005|  20.9k|                }
 6006|       |
 6007|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 6008|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 6009|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[74][0]);
 6010|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[75][0]);
 6011|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[76][0]);
 6012|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[77][0]);
 6013|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[78][0]);
 6014|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[79][0]);
 6015|       |
 6016|       |                /* o9[0-3] */
 6017|  20.9k|                {
 6018|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6019|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6020|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6021|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6022|       |
 6023|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6024|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6025|       |
 6026|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6027|       |
 6028|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6029|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6030|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6031|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6032|       |
 6033|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6034|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6035|       |
 6036|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6037|       |
 6038|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6039|       |
 6040|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_20);
 6041|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_20);
 6042|       |
 6043|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6044|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6045|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6046|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6047|       |
 6048|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6049|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6050|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6051|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6052|       |
 6053|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6054|       |
 6055|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6056|  20.9k|                    pi2_dst_scratch += out_stride;
 6057|  20.9k|                }
 6058|       |
 6059|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 6060|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 6061|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[82][0]);
 6062|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[83][0]);
 6063|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[84][0]);
 6064|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[85][0]);
 6065|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[86][0]);
 6066|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[87][0]);
 6067|       |
 6068|       |                /* o10[0-3] */
 6069|  20.9k|                {
 6070|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6071|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6072|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6073|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6074|       |
 6075|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6076|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6077|       |
 6078|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6079|       |
 6080|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6081|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6082|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6083|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6084|       |
 6085|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6086|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6087|       |
 6088|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6089|       |
 6090|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6091|       |
 6092|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_20);
 6093|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_20);
 6094|       |
 6095|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6096|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6097|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6098|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6099|       |
 6100|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6101|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6102|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6103|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6104|       |
 6105|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6106|       |
 6107|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6108|  20.9k|                    pi2_dst_scratch += out_stride;
 6109|  20.9k|                }
 6110|       |
 6111|       |
 6112|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 6113|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 6114|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[90][0]);
 6115|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[91][0]);
 6116|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[92][0]);
 6117|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[93][0]);
 6118|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[94][0]);
 6119|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[95][0]);
 6120|       |
 6121|       |                /* o11[0-3] */
 6122|  20.9k|                {
 6123|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6124|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6125|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6126|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6127|       |
 6128|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6129|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6130|       |
 6131|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6132|       |
 6133|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6134|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6135|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6136|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6137|       |
 6138|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6139|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6140|       |
 6141|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6142|       |
 6143|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6144|       |
 6145|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_20);
 6146|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_20);
 6147|       |
 6148|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6149|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6150|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6151|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6152|       |
 6153|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6154|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6155|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6156|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6157|       |
 6158|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6159|       |
 6160|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6161|  20.9k|                    pi2_dst_scratch += out_stride;
 6162|       |
 6163|  20.9k|                }
 6164|       |
 6165|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 6166|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 6167|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[98][0]);
 6168|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[99][0]);
 6169|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[100][0]);
 6170|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[101][0]);
 6171|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[102][0]);
 6172|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[103][0]);
 6173|       |
 6174|       |                /* o12[0-3] */
 6175|  20.9k|                {
 6176|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6177|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6178|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6179|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6180|       |
 6181|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6182|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6183|       |
 6184|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6185|       |
 6186|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6187|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6188|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6189|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6190|       |
 6191|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6192|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6193|       |
 6194|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6195|       |
 6196|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6197|       |
 6198|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp8, m_temp_reg_20);
 6199|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp8, m_temp_reg_20);
 6200|       |
 6201|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6202|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6203|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6204|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6205|       |
 6206|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6207|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6208|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6209|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6210|       |
 6211|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6212|       |
 6213|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6214|  20.9k|                    pi2_dst_scratch += out_stride;
 6215|       |
 6216|  20.9k|                }
 6217|       |
 6218|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 6219|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 6220|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[106][0]);
 6221|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[107][0]);
 6222|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[108][0]);
 6223|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[109][0]);
 6224|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[110][0]);
 6225|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[111][0]);
 6226|       |
 6227|       |                /* o13[0-3] */
 6228|  20.9k|                {
 6229|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6230|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6231|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6232|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6233|       |
 6234|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6235|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6236|       |
 6237|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6238|       |
 6239|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6240|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6241|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6242|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6243|       |
 6244|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6245|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6246|       |
 6247|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6248|       |
 6249|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6250|       |
 6251|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp6, m_temp_reg_20);
 6252|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp6, m_temp_reg_20);
 6253|       |
 6254|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6255|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6256|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6257|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6258|       |
 6259|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6260|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6261|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6262|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6263|       |
 6264|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6265|       |
 6266|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6267|  20.9k|                    pi2_dst_scratch += out_stride;
 6268|  20.9k|                }
 6269|       |
 6270|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 6271|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 6272|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[114][0]);
 6273|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[115][0]);
 6274|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[116][0]);
 6275|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[117][0]);
 6276|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[118][0]);
 6277|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[119][0]);
 6278|       |
 6279|       |                /* o14[0-3] */
 6280|  20.9k|                {
 6281|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6282|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6283|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6284|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6285|       |
 6286|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6287|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6288|       |
 6289|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6290|       |
 6291|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6292|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6293|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6294|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6295|       |
 6296|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6297|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6298|       |
 6299|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6300|       |
 6301|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6302|       |
 6303|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp4, m_temp_reg_20);
 6304|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp4, m_temp_reg_20);
 6305|       |
 6306|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6307|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6308|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6309|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6310|       |
 6311|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6312|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6313|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6314|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6315|       |
 6316|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6317|       |
 6318|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6319|  20.9k|                    pi2_dst_scratch += out_stride;
 6320|       |
 6321|  20.9k|                }
 6322|       |
 6323|  20.9k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 6324|  20.9k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 6325|  20.9k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[122][0]);
 6326|  20.9k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[123][0]);
 6327|  20.9k|                m_coeff5 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[124][0]);
 6328|  20.9k|                m_coeff6 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[125][0]);
 6329|  20.9k|                m_coeff7 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[126][0]);
 6330|  20.9k|                m_coeff8 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[127][0]);
 6331|       |
 6332|       |                /* o15[0-3] */
 6333|  20.9k|                {
 6334|  20.9k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6335|  20.9k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6336|  20.9k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6337|  20.9k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6338|       |
 6339|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6340|  20.9k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6341|       |
 6342|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6343|       |
 6344|  20.9k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6345|  20.9k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6346|  20.9k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6347|  20.9k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6348|       |
 6349|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6350|  20.9k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6351|       |
 6352|  20.9k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6353|       |
 6354|  20.9k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6355|       |
 6356|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(temp2, m_temp_reg_20);
 6357|  20.9k|                    m_temp_reg_30 = _mm_sub_epi32(temp2, m_temp_reg_20);
 6358|       |
 6359|  20.9k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6360|  20.9k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6361|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6362|  20.9k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6363|       |
 6364|  20.9k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6365|  20.9k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6366|  20.9k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6367|  20.9k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6368|       |
 6369|  20.9k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6370|       |
 6371|  20.9k|                    _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6372|  20.9k|                    pi2_dst_scratch += 8;
 6373|  20.9k|                }
 6374|       |
 6375|  20.9k|            }
 6376|  20.9k|        }
 6377|       |
 6378|       |        /* Transpose */
 6379|  45.9k|        {
 6380|       |
 6381|  45.9k|            WORD16 *pi2_src_scratch = temp_ptr;
 6382|  45.9k|            WORD32 out_stride = dst_strd;
 6383|  45.9k|            WORD32 in_stride = 8;
 6384|       |
 6385|  45.9k|            m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6386|  45.9k|            pi2_src_scratch += in_stride;
 6387|  45.9k|            m_temp_reg_31 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6388|  45.9k|            pi2_src_scratch += in_stride;
 6389|  45.9k|            m_temp_reg_32 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6390|  45.9k|            pi2_src_scratch += in_stride;
 6391|  45.9k|            m_temp_reg_33 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6392|  45.9k|            pi2_src_scratch += in_stride;
 6393|  45.9k|            m_temp_reg_34 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6394|  45.9k|            pi2_src_scratch += in_stride;
 6395|  45.9k|            m_temp_reg_35 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6396|  45.9k|            pi2_src_scratch += in_stride;
 6397|  45.9k|            m_temp_reg_36 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6398|  45.9k|            pi2_src_scratch += in_stride;
 6399|  45.9k|            m_temp_reg_37 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6400|  45.9k|            pi2_src_scratch += 8;
 6401|       |
 6402|  45.9k|            m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6403|  45.9k|            pi2_src_scratch += in_stride;
 6404|  45.9k|            m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6405|  45.9k|            pi2_src_scratch += in_stride;
 6406|  45.9k|            m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6407|  45.9k|            pi2_src_scratch += in_stride;
 6408|  45.9k|            m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6409|  45.9k|            pi2_src_scratch += in_stride;
 6410|  45.9k|            m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6411|  45.9k|            pi2_src_scratch += in_stride;
 6412|  45.9k|            m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6413|  45.9k|            pi2_src_scratch += in_stride;
 6414|  45.9k|            m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6415|  45.9k|            pi2_src_scratch += in_stride;
 6416|  45.9k|            m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6417|  45.9k|            pi2_src_scratch += 8;
 6418|       |
 6419|       |
 6420|  45.9k|            m_temp_reg_40 = _mm_unpacklo_epi16(m_temp_reg_30, m_temp_reg_31);
 6421|  45.9k|            m_temp_reg_41 = _mm_unpackhi_epi16(m_temp_reg_31, m_temp_reg_30);
 6422|       |
 6423|  45.9k|            m_temp_reg_42 = _mm_unpacklo_epi16(m_temp_reg_32, m_temp_reg_33);
 6424|  45.9k|            m_temp_reg_43 = _mm_unpackhi_epi16(m_temp_reg_33, m_temp_reg_32);
 6425|       |
 6426|  45.9k|            m_temp_reg_44 = _mm_unpacklo_epi16(m_temp_reg_34, m_temp_reg_35);
 6427|  45.9k|            m_temp_reg_45 = _mm_unpackhi_epi16(m_temp_reg_35, m_temp_reg_34);
 6428|       |
 6429|  45.9k|            m_temp_reg_46 = _mm_unpacklo_epi16(m_temp_reg_36, m_temp_reg_37);
 6430|  45.9k|            m_temp_reg_47 = _mm_unpackhi_epi16(m_temp_reg_37, m_temp_reg_36);
 6431|       |
 6432|  45.9k|            m_temp_reg_80 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 6433|  45.9k|            m_temp_reg_81 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_70);
 6434|       |
 6435|  45.9k|            m_temp_reg_82 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73);
 6436|  45.9k|            m_temp_reg_83 = _mm_unpackhi_epi16(m_temp_reg_73, m_temp_reg_72);
 6437|       |
 6438|  45.9k|            m_temp_reg_84 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75);
 6439|  45.9k|            m_temp_reg_85 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_74);
 6440|       |
 6441|  45.9k|            m_temp_reg_86 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77);
 6442|  45.9k|            m_temp_reg_87 = _mm_unpackhi_epi16(m_temp_reg_77, m_temp_reg_76);
 6443|       |
 6444|       |
 6445|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_40, m_temp_reg_42);
 6446|  45.9k|            m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_40, m_temp_reg_42);
 6447|       |
 6448|  45.9k|            m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_44, m_temp_reg_46);
 6449|  45.9k|            m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_44, m_temp_reg_46);
 6450|       |
 6451|  45.9k|            m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_80, m_temp_reg_82);
 6452|  45.9k|            m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_80, m_temp_reg_82);
 6453|       |
 6454|  45.9k|            m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_84, m_temp_reg_86);
 6455|  45.9k|            m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_84, m_temp_reg_86);
 6456|       |
 6457|  45.9k|            m_temp_reg_90 = _mm_unpacklo_epi32(m_temp_reg_43, m_temp_reg_41);
 6458|  45.9k|            m_temp_reg_91 = _mm_unpackhi_epi32(m_temp_reg_43, m_temp_reg_41);
 6459|       |
 6460|  45.9k|            m_temp_reg_92 = _mm_unpacklo_epi32(m_temp_reg_47, m_temp_reg_45);
 6461|  45.9k|            m_temp_reg_93 = _mm_unpackhi_epi32(m_temp_reg_47, m_temp_reg_45);
 6462|       |
 6463|  45.9k|            m_temp_reg_94 = _mm_unpacklo_epi32(m_temp_reg_83, m_temp_reg_81);
 6464|  45.9k|            m_temp_reg_95 = _mm_unpackhi_epi32(m_temp_reg_83, m_temp_reg_81);
 6465|       |
 6466|  45.9k|            m_temp_reg_96 = _mm_unpacklo_epi32(m_temp_reg_87, m_temp_reg_85);
 6467|  45.9k|            m_temp_reg_97 = _mm_unpackhi_epi32(m_temp_reg_87, m_temp_reg_85);
 6468|       |
 6469|       |
 6470|  45.9k|            m_temp_reg_30 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_2);       // row0 = 0-7
 6471|  45.9k|            m_temp_reg_31 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_2);       // row1 = 0-7
 6472|       |
 6473|  45.9k|            m_temp_reg_32 = _mm_unpacklo_epi64(m_temp_reg_92, m_temp_reg_90);     // row0=24-31
 6474|  45.9k|            m_temp_reg_33 = _mm_unpackhi_epi64(m_temp_reg_92, m_temp_reg_90);     // row1=24-31
 6475|       |
 6476|  45.9k|            m_temp_reg_34 = _mm_unpacklo_epi64(m_temp_reg_4, m_temp_reg_6);       // row0=8-15
 6477|  45.9k|            m_temp_reg_35 = _mm_unpackhi_epi64(m_temp_reg_4, m_temp_reg_6);       // row1=8-15
 6478|       |
 6479|  45.9k|            m_temp_reg_36 = _mm_unpacklo_epi64(m_temp_reg_96, m_temp_reg_94);     // row0=16-23
 6480|  45.9k|            m_temp_reg_37 = _mm_unpackhi_epi64(m_temp_reg_96, m_temp_reg_94);     // row1=16-23
 6481|       |
 6482|  45.9k|            m_temp_reg_80 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_3);      // row2 =0-7
 6483|  45.9k|            m_temp_reg_81 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_3);      // row3 =0-7
 6484|       |
 6485|  45.9k|            m_temp_reg_82 = _mm_unpacklo_epi64(m_temp_reg_93, m_temp_reg_91);    // row2=24-31
 6486|  45.9k|            m_temp_reg_83 = _mm_unpackhi_epi64(m_temp_reg_93, m_temp_reg_91);    // row3=24-31
 6487|       |
 6488|  45.9k|            m_temp_reg_84 = _mm_unpacklo_epi64(m_temp_reg_5, m_temp_reg_7);      // row2=8-15
 6489|  45.9k|            m_temp_reg_85 = _mm_unpackhi_epi64(m_temp_reg_5, m_temp_reg_7);      // row3=8-15
 6490|       |
 6491|  45.9k|            m_temp_reg_86 = _mm_unpacklo_epi64(m_temp_reg_97, m_temp_reg_95);    // row2=16-23
 6492|  45.9k|            m_temp_reg_87 = _mm_unpackhi_epi64(m_temp_reg_97, m_temp_reg_95);    // row3=16-23
 6493|       |
 6494|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6495|       |
 6496|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6497|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6498|       |
 6499|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_30, m_temp_reg_0);
 6500|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6501|       |
 6502|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6503|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6504|       |
 6505|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_34, m_temp_reg_0);
 6506|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6507|       |
 6508|  45.9k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6509|       |
 6510|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6511|       |
 6512|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6513|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6514|       |
 6515|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_36, m_temp_reg_0);
 6516|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6517|       |
 6518|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6519|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6520|       |
 6521|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_32, m_temp_reg_0);
 6522|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6523|       |
 6524|  45.9k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6525|  45.9k|            pu1_dst += out_stride;
 6526|  45.9k|            pu1_pred += pred_strd;
 6527|       |
 6528|       |
 6529|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6530|       |
 6531|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6532|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6533|       |
 6534|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_31, m_temp_reg_0);
 6535|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6536|       |
 6537|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6538|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6539|       |
 6540|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_35, m_temp_reg_0);
 6541|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6542|       |
 6543|  45.9k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6544|       |
 6545|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6546|       |
 6547|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6548|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6549|       |
 6550|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_37, m_temp_reg_0);
 6551|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6552|       |
 6553|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6554|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6555|       |
 6556|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_33, m_temp_reg_0);
 6557|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6558|       |
 6559|  45.9k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6560|  45.9k|            pu1_dst += out_stride;
 6561|  45.9k|            pu1_pred += pred_strd;
 6562|       |
 6563|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6564|       |
 6565|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6566|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6567|       |
 6568|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_80, m_temp_reg_0);
 6569|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6570|       |
 6571|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6572|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6573|       |
 6574|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_84, m_temp_reg_0);
 6575|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6576|       |
 6577|  45.9k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6578|       |
 6579|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6580|       |
 6581|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6582|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6583|       |
 6584|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_86, m_temp_reg_0);
 6585|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6586|       |
 6587|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6588|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6589|       |
 6590|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_82, m_temp_reg_0);
 6591|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6592|       |
 6593|  45.9k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6594|  45.9k|            pu1_dst += out_stride;
 6595|  45.9k|            pu1_pred += pred_strd;
 6596|       |
 6597|       |
 6598|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6599|       |
 6600|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6601|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6602|       |
 6603|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_81, m_temp_reg_0);
 6604|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6605|       |
 6606|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6607|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6608|       |
 6609|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_85, m_temp_reg_0);
 6610|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6611|       |
 6612|  45.9k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6613|       |
 6614|  45.9k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6615|       |
 6616|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_20);
 6617|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6618|       |
 6619|  45.9k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_87, m_temp_reg_0);
 6620|  45.9k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6621|       |
 6622|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
 6623|  45.9k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6624|       |
 6625|  45.9k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_83, m_temp_reg_0);
 6626|  45.9k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6627|       |
 6628|  45.9k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6629|  45.9k|            pu1_dst += out_stride;
 6630|  45.9k|            pu1_pred += pred_strd;
 6631|       |
 6632|  45.9k|        }
 6633|  45.9k|        pi2_tmp += 4;
 6634|  45.9k|    }
 6635|  6.11k|}

ihevc_intra_pred_chroma_planar_sse42:
  115|  55.0k|{
  116|       |
  117|  55.0k|    WORD32 row, col;
  118|  55.0k|    WORD32 log2nt = 5;
  119|  55.0k|    WORD32 two_nt, three_nt;
  120|       |
  121|  55.0k|    __m128i const_temp_4x32b, const_temp1_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
  122|  55.0k|    __m128i col_8x16b, const_temp5_4x32b, const_temp6_4x32b, zero_8x16b, const_temp7_4x32b;
  123|  55.0k|    UNUSED(src_strd);
  ------------------
  |  |   38|  55.0k|#define UNUSED(x) ((void)(x))
  ------------------
  124|  55.0k|    UNUSED(mode);
  ------------------
  |  |   38|  55.0k|#define UNUSED(x) ((void)(x))
  ------------------
  125|       |
  126|  55.0k|    switch(nt)
  127|  55.0k|    {
  128|  8.53k|        case 16:
  ------------------
  |  Branch (128:9): [True: 8.53k, False: 46.5k]
  ------------------
  129|  8.53k|            log2nt = 4;
  130|  8.53k|            break;
  131|  15.1k|        case 8:
  ------------------
  |  Branch (131:9): [True: 15.1k, False: 39.9k]
  ------------------
  132|  15.1k|            log2nt = 3;
  133|  15.1k|            break;
  134|  31.5k|        case 4:
  ------------------
  |  Branch (134:9): [True: 31.5k, False: 23.4k]
  ------------------
  135|  31.5k|            log2nt = 2;
  136|  31.5k|            break;
  137|      0|        default:
  ------------------
  |  Branch (137:9): [True: 0, False: 55.0k]
  ------------------
  138|      0|            break;
  139|  55.0k|    }
  140|  55.0k|    two_nt = 2 * nt;
  141|  55.0k|    three_nt = 3 * nt;
  142|       |
  143|       |    /* Planar filtering */
  144|       |
  145|       |/* setting vallues in  registera*/
  146|       |
  147|       |//  pu1_ref[2*(two_nt - 1 - row)]
  148|       |//  pu1_ref[2 * (three_nt + 1)]
  149|       |//  pu1_ref[2 * (two_nt + 1) + col]
  150|       |//  pu1_ref[2 * (nt - 1)]
  151|       |
  152|  55.0k|    const_temp_4x32b  = _mm_set_epi16(pu1_ref[2 * (three_nt + 1) + 1], pu1_ref[2 * (three_nt + 1)], pu1_ref[2 * (three_nt + 1) + 1],
  153|  55.0k|                                      pu1_ref[2 * (three_nt + 1)], pu1_ref[2 * (three_nt + 1) + 1], pu1_ref[2 * (three_nt + 1)],
  154|  55.0k|                                      pu1_ref[2 * (three_nt + 1) + 1], pu1_ref[2 * (three_nt + 1)]);
  155|       |
  156|  55.0k|    const_temp1_4x32b = _mm_set_epi16(pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)], pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)],
  157|  55.0k|                                      pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)], pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)]);
  158|       |
  159|  55.0k|    const_temp4_4x32b = _mm_set1_epi16(nt - 1);
  160|  55.0k|    const_temp6_4x32b = _mm_set1_epi16(nt);
  161|  55.0k|    const_temp7_4x32b = _mm_set1_epi16(4);
  162|       |
  163|  55.0k|    zero_8x16b = _mm_set1_epi32(0);
  164|       |
  165|  55.0k|    if(nt % 4 == 0)
  ------------------
  |  Branch (165:8): [True: 54.9k, False: 106]
  ------------------
  166|  54.9k|    {
  167|  54.9k|        const_temp7_4x32b = _mm_set1_epi16(4);
  168|       |
  169|   427k|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (169:22): [True: 372k, False: 54.9k]
  ------------------
  170|   372k|        {
  171|   372k|            __m128i res_temp_8x16b, row_8x16b, res_temp1_8x16b, res_temp2_8x16b;
  172|   372k|            __m128i res_temp3_8x16b;
  173|       |
  174|   372k|            const_temp2_4x32b  = _mm_set_epi16(pu1_ref[2 * (two_nt - 1 - row) + 1], pu1_ref[2 * (two_nt - 1 - row)], pu1_ref[2 * (two_nt - 1 - row) + 1],
  175|   372k|                                               pu1_ref[2 * (two_nt - 1 - row)], pu1_ref[2 * (two_nt - 1 - row) + 1], pu1_ref[2 * (two_nt - 1 - row)],
  176|   372k|                                               pu1_ref[2 * (two_nt - 1 - row) + 1], pu1_ref[2 * (two_nt - 1 - row)]);
  177|       |
  178|   372k|            const_temp3_4x32b  = _mm_set1_epi16((row + 1));
  179|   372k|            row_8x16b = _mm_set1_epi16((nt - 1 - row));
  180|       |
  181|   372k|            const_temp5_4x32b = _mm_set_epi16(3, 3, 2, 2, 1, 1, 0, 0);
  182|   372k|            col_8x16b = _mm_set_epi16(4, 4, 3, 3, 2, 2, 1, 1);
  183|       |
  184|   372k|            const_temp5_4x32b = _mm_sub_epi16(const_temp4_4x32b, const_temp5_4x32b);
  185|       |
  186|       |            /*(row + 1) * pu1_ref[nt - 1]*/
  187|   372k|            res_temp_8x16b  = _mm_mullo_epi16(const_temp3_4x32b,  const_temp1_4x32b);
  188|       |
  189|       |            /*(row + 1) * pu1_ref[nt - 1] + nt)*/
  190|   372k|            res_temp_8x16b = _mm_add_epi16(res_temp_8x16b, const_temp6_4x32b);
  191|       |
  192|  1.25M|            for(col = 0; col < 2 * nt; col += 8)
  ------------------
  |  Branch (192:26): [True: 887k, False: 372k]
  ------------------
  193|   887k|            {
  194|   887k|                __m128i src_temp_8x16b;
  195|       |
  196|       |                /* loding 8bit 16 pixles*/
  197|   887k|                src_temp_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (two_nt + 1) + col));
  198|       |
  199|   887k|                src_temp_8x16b =  _mm_cvtepu8_epi16(src_temp_8x16b); /* row=0*/
  200|       |
  201|       |                /* (nt - 1 - row) * pu1_ref[two_nt + 1 + col] */
  202|   887k|                res_temp1_8x16b  = _mm_mullo_epi16(src_temp_8x16b,  row_8x16b);
  203|       |
  204|       |                /*(col + 1) * pu1_ref[three_nt + 1]*/
  205|   887k|                res_temp2_8x16b  = _mm_mullo_epi16(const_temp_4x32b,  col_8x16b);
  206|       |
  207|       |                /*(nt - 1 - col)* pu1_ref[two_nt - 1 - row]*/
  208|   887k|                res_temp3_8x16b  = _mm_mullo_epi16(const_temp2_4x32b,  const_temp5_4x32b);
  209|       |
  210|   887k|                res_temp1_8x16b = _mm_add_epi16(res_temp_8x16b, res_temp1_8x16b);
  211|   887k|                res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  212|   887k|                res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp3_8x16b);
  213|       |
  214|   887k|                res_temp1_8x16b = _mm_srli_epi16(res_temp1_8x16b, (log2nt + 1));
  215|   887k|                res_temp1_8x16b = _mm_packus_epi16(res_temp1_8x16b, zero_8x16b);
  216|       |
  217|   887k|                _mm_storel_epi64((__m128i *)(pu1_dst + (row * dst_strd) + col), res_temp1_8x16b);
  218|       |
  219|   887k|                const_temp5_4x32b = _mm_sub_epi16(const_temp5_4x32b, const_temp7_4x32b);
  220|   887k|                col_8x16b = _mm_add_epi16(col_8x16b, const_temp7_4x32b);
  221|   887k|            } /* inner loop ends here */
  222|   372k|        }
  223|  54.9k|    }
  224|  55.0k|}
ihevc_intra_pred_chroma_dc_sse42:
  269|  16.8k|{
  270|       |
  271|  16.8k|    WORD32 acc_dc_u, acc_dc_v;
  272|  16.8k|    WORD32 dc_val_u, dc_val_v;
  273|  16.8k|    WORD32 row;
  274|  16.8k|    WORD32 log2nt = 5;
  275|  16.8k|    __m128i src_temp1, src_temp3, src_temp4, src_temp5, src_temp6, m_mask;
  276|  16.8k|    __m128i src_temp7, src_temp8, src_temp9, src_temp10;
  277|  16.8k|    __m128i m_zero = _mm_set1_epi32(0);
  278|  16.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  16.8k|#define UNUSED(x) ((void)(x))
  ------------------
  279|  16.8k|    UNUSED(mode);
  ------------------
  |  |   38|  16.8k|#define UNUSED(x) ((void)(x))
  ------------------
  280|       |
  281|  16.8k|    switch(nt)
  282|  16.8k|    {
  283|      0|        case 32:
  ------------------
  |  Branch (283:9): [True: 0, False: 16.8k]
  ------------------
  284|      0|            log2nt = 5;
  285|      0|            break;
  286|  1.79k|        case 16:
  ------------------
  |  Branch (286:9): [True: 1.79k, False: 15.0k]
  ------------------
  287|  1.79k|            log2nt = 4;
  288|  1.79k|            break;
  289|  4.30k|        case 8:
  ------------------
  |  Branch (289:9): [True: 4.30k, False: 12.5k]
  ------------------
  290|  4.30k|            log2nt = 3;
  291|  4.30k|            break;
  292|  10.7k|        case 4:
  ------------------
  |  Branch (292:9): [True: 10.7k, False: 6.09k]
  ------------------
  293|  10.7k|            log2nt = 2;
  294|  10.7k|            break;
  295|      0|        default:
  ------------------
  |  Branch (295:9): [True: 0, False: 16.8k]
  ------------------
  296|      0|            break;
  297|  16.8k|    }
  298|       |
  299|  16.8k|    acc_dc_u = 0;
  300|  16.8k|    acc_dc_v = 0;
  301|       |
  302|       |    /* Calculate DC value for the transform block */
  303|       |
  304|  16.8k|    m_mask = _mm_loadu_si128((__m128i *)&IHEVCE_SHUFFLEMASKY9[0]);
  305|       |
  306|  16.8k|    if(nt == 16)
  ------------------
  |  Branch (306:8): [True: 1.79k, False: 15.0k]
  ------------------
  307|  1.79k|    {
  308|  1.79k|        __m128i temp_sad;
  309|       |
  310|  1.79k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt)));
  311|  1.79k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 16));
  312|  1.79k|        src_temp7 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 32));
  313|  1.79k|        src_temp8 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 48));
  314|       |
  315|  1.79k|        src_temp5 =  _mm_cvtepu8_epi16(src_temp3);
  316|  1.79k|        src_temp6 =  _mm_cvtepu8_epi16(src_temp4);
  317|  1.79k|        src_temp9 =  _mm_cvtepu8_epi16(src_temp7);
  318|  1.79k|        src_temp10 =  _mm_cvtepu8_epi16(src_temp8);
  319|       |
  320|  1.79k|        src_temp3 = _mm_srli_si128(src_temp3, 8);
  321|  1.79k|        src_temp4 = _mm_srli_si128(src_temp4, 8);
  322|  1.79k|        src_temp7 = _mm_srli_si128(src_temp7, 8);
  323|  1.79k|        src_temp8 = _mm_srli_si128(src_temp8, 8);
  324|       |
  325|  1.79k|        src_temp3 =  _mm_cvtepu8_epi16(src_temp3);
  326|  1.79k|        src_temp4 =  _mm_cvtepu8_epi16(src_temp4);
  327|  1.79k|        src_temp7 =  _mm_cvtepu8_epi16(src_temp7);
  328|  1.79k|        src_temp8 =  _mm_cvtepu8_epi16(src_temp8);
  329|       |
  330|  1.79k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  331|  1.79k|        src_temp6 = _mm_add_epi16(src_temp3, src_temp5);
  332|  1.79k|        src_temp8 = _mm_add_epi16(src_temp7, src_temp8);
  333|  1.79k|        src_temp10 = _mm_add_epi16(src_temp9, src_temp10);
  334|       |
  335|  1.79k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  336|  1.79k|        src_temp8 = _mm_add_epi16(src_temp8, src_temp10);
  337|       |
  338|  1.79k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp8);
  339|  1.79k|        src_temp4 = _mm_shuffle_epi8(src_temp4, m_mask);
  340|  1.79k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  341|  1.79k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  342|       |
  343|  1.79k|        src_temp4 = _mm_cvtepi16_epi32(src_temp4);
  344|  1.79k|        temp_sad  = _mm_srli_si128(src_temp4, 4); /* Next 32 bits */
  345|  1.79k|        acc_dc_u  = _mm_cvtsi128_si32(src_temp4);
  346|  1.79k|        acc_dc_v  = _mm_cvtsi128_si32(temp_sad);
  347|  1.79k|    }
  348|       |
  349|  15.0k|    else if(nt == 8)
  ------------------
  |  Branch (349:13): [True: 4.30k, False: 10.7k]
  ------------------
  350|  4.30k|    {
  351|  4.30k|        __m128i temp_sad;
  352|  4.30k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt)));
  353|  4.30k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 16));
  354|       |
  355|  4.30k|        src_temp5 =  _mm_cvtepu8_epi16(src_temp3);
  356|  4.30k|        src_temp6 =  _mm_cvtepu8_epi16(src_temp4);
  357|       |
  358|  4.30k|        src_temp3 = _mm_srli_si128(src_temp3, 8);
  359|  4.30k|        src_temp4 = _mm_srli_si128(src_temp4, 8);
  360|       |
  361|  4.30k|        src_temp3 =  _mm_cvtepu8_epi16(src_temp3);
  362|  4.30k|        src_temp4 =  _mm_cvtepu8_epi16(src_temp4);
  363|       |
  364|  4.30k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  365|  4.30k|        src_temp6 = _mm_add_epi16(src_temp3, src_temp5);
  366|       |
  367|  4.30k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  368|  4.30k|        src_temp4 = _mm_shuffle_epi8(src_temp4, m_mask);
  369|  4.30k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  370|  4.30k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  371|       |
  372|  4.30k|        src_temp4 = _mm_cvtepi16_epi32(src_temp4);
  373|  4.30k|        temp_sad  = _mm_srli_si128(src_temp4, 4); /* Next 32 bits */
  374|  4.30k|        acc_dc_u  = _mm_cvtsi128_si32(src_temp4);
  375|  4.30k|        acc_dc_v  = _mm_cvtsi128_si32(temp_sad);
  376|  4.30k|    }
  377|       |
  378|  10.7k|    else if(nt == 4)
  ------------------
  |  Branch (378:13): [True: 10.7k, False: 18.4E]
  ------------------
  379|  10.7k|    {
  380|  10.7k|        __m128i temp_sad;
  381|  10.7k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt)));
  382|       |
  383|  10.7k|        src_temp5 =  _mm_cvtepu8_epi16(src_temp3);
  384|  10.7k|        src_temp4 = _mm_srli_si128(src_temp3, 8);
  385|  10.7k|        src_temp4 =  _mm_cvtepu8_epi16(src_temp4);
  386|       |
  387|  10.7k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp5);
  388|       |
  389|  10.7k|        src_temp4 = _mm_shuffle_epi8(src_temp4, m_mask);
  390|  10.7k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  391|  10.7k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  392|       |
  393|  10.7k|        src_temp4 = _mm_cvtepi16_epi32(src_temp4);
  394|  10.7k|        temp_sad  = _mm_srli_si128(src_temp4, 4); /* Next 32 bits */
  395|  10.7k|        acc_dc_u  = _mm_cvtsi128_si32(src_temp4);
  396|  10.7k|        acc_dc_v  = _mm_cvtsi128_si32(temp_sad);
  397|  10.7k|    }
  398|       |
  399|       |
  400|  16.8k|    acc_dc_u += pu1_ref[6 * nt];
  401|  16.8k|    acc_dc_v += pu1_ref[6 * nt + 1];
  402|       |
  403|  16.8k|    acc_dc_u -= pu1_ref[4 * nt];
  404|  16.8k|    acc_dc_v -= pu1_ref[4 * nt + 1];
  405|       |
  406|  16.8k|    dc_val_u = (acc_dc_u + nt) >> (log2nt + 1);
  407|  16.8k|    dc_val_v = (acc_dc_v + nt) >> (log2nt + 1);
  408|       |
  409|  16.8k|    dc_val_u = dc_val_u | (dc_val_v << 8);
  410|       |
  411|       |    /* Fill the remaining rows with DC value*/
  412|       |
  413|  16.8k|    if(nt == 4)
  ------------------
  |  Branch (413:8): [True: 10.7k, False: 6.09k]
  ------------------
  414|  10.7k|    {
  415|  10.7k|        src_temp1 = _mm_set1_epi16(dc_val_u);
  416|       |
  417|       |        /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  418|  10.7k|        _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  419|  10.7k|        _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  420|  10.7k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  421|  10.7k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  422|       |
  423|  10.7k|    }
  424|  6.09k|    else if(nt == 8)
  ------------------
  |  Branch (424:13): [True: 4.30k, False: 1.78k]
  ------------------
  425|  4.30k|    {
  426|  4.30k|        src_temp1 = _mm_set1_epi16(dc_val_u);
  427|       |
  428|       |        /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  429|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  430|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  431|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  432|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  433|       |
  434|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp1);
  435|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp1);
  436|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp1);
  437|  4.30k|        _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp1);
  438|       |
  439|  4.30k|    }
  440|       |
  441|  1.78k|    else /* nt == 16 */
  442|  1.78k|    {
  443|       |
  444|  1.78k|        src_temp1 = _mm_set1_epi16(dc_val_u);
  445|       |
  446|  5.37k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (446:22): [True: 3.59k, False: 1.78k]
  ------------------
  447|  3.59k|        {
  448|       |            /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  449|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  450|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  451|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  452|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  453|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (0 * dst_strd)), src_temp1);
  454|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (1 * dst_strd)), src_temp1);
  455|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (2 * dst_strd)), src_temp1);
  456|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (3 * dst_strd)), src_temp1);
  457|       |
  458|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp1);
  459|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp1);
  460|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp1);
  461|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp1);
  462|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (4 * dst_strd)), src_temp1);
  463|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (5 * dst_strd)), src_temp1);
  464|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (6 * dst_strd)), src_temp1);
  465|  3.59k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (7 * dst_strd)), src_temp1);
  466|       |
  467|  3.59k|            pu1_dst += 8 * dst_strd;
  468|  3.59k|        }
  469|       |
  470|       |
  471|  1.78k|    }
  472|       |
  473|  16.8k|}

ihevc_intra_pred_chroma_planar_ssse3:
  134|  74.8k|{
  135|       |
  136|  74.8k|    WORD32 row, col;
  137|  74.8k|    WORD32 log2nt = 5;
  138|  74.8k|    WORD32 two_nt, three_nt;
  139|       |
  140|  74.8k|    __m128i const_temp_4x32b, const_temp1_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
  141|  74.8k|    __m128i col_8x16b, const_temp5_4x32b, const_temp6_4x32b, zero_8x16b, const_temp7_4x32b;
  142|  74.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  74.8k|#define UNUSED(x) ((void)(x))
  ------------------
  143|  74.8k|    UNUSED(mode);
  ------------------
  |  |   38|  74.8k|#define UNUSED(x) ((void)(x))
  ------------------
  144|  74.8k|    switch(nt)
  145|  74.8k|    {
  146|  16.2k|        case 16:
  ------------------
  |  Branch (146:9): [True: 16.2k, False: 58.5k]
  ------------------
  147|  16.2k|            log2nt = 4;
  148|  16.2k|            break;
  149|  31.4k|        case 8:
  ------------------
  |  Branch (149:9): [True: 31.4k, False: 43.3k]
  ------------------
  150|  31.4k|            log2nt = 3;
  151|  31.4k|            break;
  152|  27.3k|        case 4:
  ------------------
  |  Branch (152:9): [True: 27.3k, False: 47.5k]
  ------------------
  153|  27.3k|            log2nt = 2;
  154|  27.3k|            break;
  155|      0|        default:
  ------------------
  |  Branch (155:9): [True: 0, False: 74.8k]
  ------------------
  156|      0|            break;
  157|  74.8k|    }
  158|  74.8k|    two_nt = 2 * nt;
  159|  74.8k|    three_nt = 3 * nt;
  160|       |
  161|       |    /* Planar filtering */
  162|       |
  163|       |/* setting vallues in  registera*/
  164|       |
  165|       |//  pu1_ref[2*(two_nt - 1 - row)]
  166|       |//  pu1_ref[2 * (three_nt + 1)]
  167|       |//  pu1_ref[2 * (two_nt + 1) + col]
  168|       |//  pu1_ref[2 * (nt - 1)]
  169|       |
  170|  74.8k|    const_temp_4x32b  = _mm_set_epi16(pu1_ref[2 * (three_nt + 1) + 1], pu1_ref[2 * (three_nt + 1)], pu1_ref[2 * (three_nt + 1) + 1],
  171|  74.8k|                                      pu1_ref[2 * (three_nt + 1)], pu1_ref[2 * (three_nt + 1) + 1], pu1_ref[2 * (three_nt + 1)],
  172|  74.8k|                                      pu1_ref[2 * (three_nt + 1) + 1], pu1_ref[2 * (three_nt + 1)]);
  173|       |
  174|  74.8k|    const_temp1_4x32b = _mm_set_epi16(pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)], pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)],
  175|  74.8k|                                      pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)], pu1_ref[2 * (nt - 1) + 1], pu1_ref[2 * (nt - 1)]);
  176|       |
  177|  74.8k|    const_temp4_4x32b = _mm_set1_epi16(nt - 1);
  178|  74.8k|    const_temp6_4x32b = _mm_set1_epi16(nt);
  179|  74.8k|    const_temp7_4x32b = _mm_set1_epi16(4);
  180|       |
  181|  74.8k|    zero_8x16b = _mm_set1_epi32(0);
  182|       |
  183|       |
  184|  74.8k|    if(nt % 4 == 0)
  ------------------
  |  Branch (184:8): [True: 74.7k, False: 83]
  ------------------
  185|  74.7k|    {
  186|  74.7k|        const_temp7_4x32b = _mm_set1_epi16(4);
  187|       |
  188|   678k|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (188:22): [True: 604k, False: 74.7k]
  ------------------
  189|   604k|        {
  190|   604k|            __m128i res_temp_8x16b, row_8x16b, res_temp1_8x16b, res_temp2_8x16b;
  191|   604k|            __m128i res_temp3_8x16b;
  192|       |
  193|   604k|            const_temp2_4x32b  = _mm_set_epi16(pu1_ref[2 * (two_nt - 1 - row) + 1], pu1_ref[2 * (two_nt - 1 - row)], pu1_ref[2 * (two_nt - 1 - row) + 1],
  194|   604k|                                               pu1_ref[2 * (two_nt - 1 - row)], pu1_ref[2 * (two_nt - 1 - row) + 1], pu1_ref[2 * (two_nt - 1 - row)],
  195|   604k|                                               pu1_ref[2 * (two_nt - 1 - row) + 1], pu1_ref[2 * (two_nt - 1 - row)]);
  196|       |
  197|   604k|            const_temp3_4x32b  = _mm_set1_epi16((row + 1));
  198|   604k|            row_8x16b = _mm_set1_epi16((nt - 1 - row));
  199|       |
  200|   604k|            const_temp5_4x32b = _mm_set_epi16(3, 3, 2, 2, 1, 1, 0, 0);
  201|   604k|            col_8x16b = _mm_set_epi16(4, 4, 3, 3, 2, 2, 1, 1);
  202|       |
  203|   604k|            const_temp5_4x32b = _mm_sub_epi16(const_temp4_4x32b, const_temp5_4x32b);
  204|       |
  205|       |            /*(row + 1) * pu1_ref[nt - 1]*/
  206|   604k|            res_temp_8x16b  = _mm_mullo_epi16(const_temp3_4x32b,  const_temp1_4x32b);
  207|       |
  208|       |            /*(row + 1) * pu1_ref[nt - 1] + nt)*/
  209|   604k|            res_temp_8x16b = _mm_add_epi16(res_temp_8x16b, const_temp6_4x32b);
  210|       |
  211|  2.21M|            for(col = 0; col < 2 * nt; col += 8)
  ------------------
  |  Branch (211:26): [True: 1.61M, False: 604k]
  ------------------
  212|  1.61M|            {
  213|  1.61M|                __m128i src_temp_8x16b;
  214|       |
  215|       |                /* loding 8bit 16 pixles*/
  216|  1.61M|                src_temp_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (two_nt + 1) + col));
  217|       |
  218|       |                //src_temp_8x16b =  _mm_cvtepu8_epi16 (src_temp_8x16b); /* row=0*/
  219|  1.61M|                src_temp_8x16b = _mm_unpacklo_epi8(src_temp_8x16b, zero_8x16b);
  220|       |
  221|       |                /* (nt - 1 - row) * pu1_ref[two_nt + 1 + col] */
  222|  1.61M|                res_temp1_8x16b  = _mm_mullo_epi16(src_temp_8x16b,  row_8x16b);
  223|       |
  224|       |                /*(col + 1) * pu1_ref[three_nt + 1]*/
  225|  1.61M|                res_temp2_8x16b  = _mm_mullo_epi16(const_temp_4x32b,  col_8x16b);
  226|       |
  227|       |                /*(nt - 1 - col)* pu1_ref[two_nt - 1 - row]*/
  228|  1.61M|                res_temp3_8x16b  = _mm_mullo_epi16(const_temp2_4x32b,  const_temp5_4x32b);
  229|       |
  230|  1.61M|                res_temp1_8x16b = _mm_add_epi16(res_temp_8x16b, res_temp1_8x16b);
  231|  1.61M|                res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  232|  1.61M|                res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp3_8x16b);
  233|       |
  234|  1.61M|                res_temp1_8x16b = _mm_srli_epi16(res_temp1_8x16b, (log2nt + 1));
  235|  1.61M|                res_temp1_8x16b = _mm_packus_epi16(res_temp1_8x16b, zero_8x16b);
  236|       |
  237|  1.61M|                _mm_storel_epi64((__m128i *)(pu1_dst + (row * dst_strd) + col), res_temp1_8x16b);
  238|       |
  239|  1.61M|                const_temp5_4x32b = _mm_sub_epi16(const_temp5_4x32b, const_temp7_4x32b);
  240|  1.61M|                col_8x16b = _mm_add_epi16(col_8x16b, const_temp7_4x32b);
  241|  1.61M|            } /* inner loop ends here */
  242|   604k|        }
  243|  74.7k|    }
  244|  74.8k|}
ihevc_intra_pred_chroma_dc_ssse3:
  290|  35.7k|{
  291|       |
  292|  35.7k|    WORD32 acc_dc_u, acc_dc_v;
  293|  35.7k|    WORD32 dc_val_u, dc_val_v;
  294|  35.7k|    WORD32 row;
  295|  35.7k|    WORD32 log2nt = 5;
  296|  35.7k|    __m128i src_temp1, src_temp3, src_temp4, src_temp5, src_temp6, m_mask;
  297|  35.7k|    __m128i src_temp7, src_temp8, src_temp9, src_temp10;
  298|  35.7k|    __m128i m_zero = _mm_set1_epi32(0);
  299|  35.7k|    UNUSED(src_strd);
  ------------------
  |  |   38|  35.7k|#define UNUSED(x) ((void)(x))
  ------------------
  300|  35.7k|    UNUSED(mode);
  ------------------
  |  |   38|  35.7k|#define UNUSED(x) ((void)(x))
  ------------------
  301|       |
  302|  35.7k|    switch(nt)
  303|  35.7k|    {
  304|      0|        case 32:
  ------------------
  |  Branch (304:9): [True: 0, False: 35.7k]
  ------------------
  305|      0|            log2nt = 5;
  306|      0|            break;
  307|  8.32k|        case 16:
  ------------------
  |  Branch (307:9): [True: 8.32k, False: 27.4k]
  ------------------
  308|  8.32k|            log2nt = 4;
  309|  8.32k|            break;
  310|  11.6k|        case 8:
  ------------------
  |  Branch (310:9): [True: 11.6k, False: 24.1k]
  ------------------
  311|  11.6k|            log2nt = 3;
  312|  11.6k|            break;
  313|  15.8k|        case 4:
  ------------------
  |  Branch (313:9): [True: 15.8k, False: 19.8k]
  ------------------
  314|  15.8k|            log2nt = 2;
  315|  15.8k|            break;
  316|      0|        default:
  ------------------
  |  Branch (316:9): [True: 0, False: 35.7k]
  ------------------
  317|      0|            break;
  318|  35.7k|    }
  319|       |
  320|  35.7k|    acc_dc_u = 0;
  321|  35.7k|    acc_dc_v = 0;
  322|       |
  323|       |    /* Calculate DC value for the transform block */
  324|       |
  325|  35.7k|    m_mask = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY9[0]);
  326|       |
  327|  35.7k|    if(nt == 16)
  ------------------
  |  Branch (327:8): [True: 8.31k, False: 27.4k]
  ------------------
  328|  8.31k|    {
  329|  8.31k|        __m128i temp_sad, sign_8x16b;
  330|       |
  331|  8.31k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt)));
  332|  8.31k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 16));
  333|  8.31k|        src_temp7 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 32));
  334|  8.31k|        src_temp8 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 48));
  335|       |
  336|  8.31k|        src_temp5  = _mm_unpacklo_epi8(src_temp3, m_zero);
  337|  8.31k|        src_temp6  = _mm_unpacklo_epi8(src_temp4, m_zero);
  338|  8.31k|        src_temp9  = _mm_unpacklo_epi8(src_temp7, m_zero);
  339|  8.31k|        src_temp10 = _mm_unpacklo_epi8(src_temp8, m_zero);
  340|       |
  341|  8.31k|        src_temp3 = _mm_srli_si128(src_temp3, 8);
  342|  8.31k|        src_temp4 = _mm_srli_si128(src_temp4, 8);
  343|  8.31k|        src_temp7 = _mm_srli_si128(src_temp7, 8);
  344|  8.31k|        src_temp8 = _mm_srli_si128(src_temp8, 8);
  345|       |
  346|  8.31k|        src_temp3 = _mm_unpacklo_epi8(src_temp3, m_zero);
  347|  8.31k|        src_temp4 = _mm_unpacklo_epi8(src_temp4, m_zero);
  348|  8.31k|        src_temp7 = _mm_unpacklo_epi8(src_temp7, m_zero);
  349|  8.31k|        src_temp8 = _mm_unpacklo_epi8(src_temp8, m_zero);
  350|       |
  351|  8.31k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  352|  8.31k|        src_temp6 = _mm_add_epi16(src_temp3, src_temp5);
  353|  8.31k|        src_temp8 = _mm_add_epi16(src_temp7, src_temp8);
  354|  8.31k|        src_temp10 = _mm_add_epi16(src_temp9, src_temp10);
  355|       |
  356|  8.31k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  357|  8.31k|        src_temp8 = _mm_add_epi16(src_temp8, src_temp10);
  358|       |
  359|  8.31k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp8);
  360|  8.31k|        src_temp4 = _mm_shuffle_epi8(src_temp4, m_mask);
  361|  8.31k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  362|  8.31k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  363|       |
  364|  8.31k|        sign_8x16b = _mm_cmpgt_epi16(m_zero, src_temp4);
  365|  8.31k|        src_temp4  = _mm_unpacklo_epi16(src_temp4, sign_8x16b);
  366|       |
  367|  8.31k|        temp_sad  = _mm_srli_si128(src_temp4, 4); /* Next 32 bits */
  368|  8.31k|        acc_dc_u  = _mm_cvtsi128_si32(src_temp4);
  369|  8.31k|        acc_dc_v  = _mm_cvtsi128_si32(temp_sad);
  370|  8.31k|    }
  371|       |
  372|  27.4k|    else if(nt == 8)
  ------------------
  |  Branch (372:13): [True: 11.6k, False: 15.8k]
  ------------------
  373|  11.6k|    {
  374|  11.6k|        __m128i temp_sad, sign_8x16b;
  375|  11.6k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt)));
  376|  11.6k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt) + 16));
  377|       |
  378|  11.6k|        src_temp5 = _mm_unpacklo_epi8(src_temp3, m_zero);
  379|  11.6k|        src_temp6 = _mm_unpacklo_epi8(src_temp4, m_zero);
  380|       |
  381|  11.6k|        src_temp3 = _mm_srli_si128(src_temp3, 8);
  382|  11.6k|        src_temp4 = _mm_srli_si128(src_temp4, 8);
  383|       |
  384|  11.6k|        src_temp3 = _mm_unpacklo_epi8(src_temp3, m_zero);
  385|  11.6k|        src_temp4 = _mm_unpacklo_epi8(src_temp4, m_zero);
  386|       |
  387|  11.6k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  388|  11.6k|        src_temp6 = _mm_add_epi16(src_temp3, src_temp5);
  389|       |
  390|  11.6k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  391|  11.6k|        src_temp4 = _mm_shuffle_epi8(src_temp4, m_mask);
  392|  11.6k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  393|  11.6k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  394|       |
  395|  11.6k|        sign_8x16b = _mm_cmpgt_epi16(m_zero, src_temp4);
  396|  11.6k|        src_temp4  = _mm_unpacklo_epi16(src_temp4, sign_8x16b);
  397|       |
  398|  11.6k|        temp_sad  = _mm_srli_si128(src_temp4, 4); /* Next 32 bits */
  399|  11.6k|        acc_dc_u  = _mm_cvtsi128_si32(src_temp4);
  400|  11.6k|        acc_dc_v  = _mm_cvtsi128_si32(temp_sad);
  401|  11.6k|    }
  402|       |
  403|  15.8k|    else if(nt == 4)
  ------------------
  |  Branch (403:13): [True: 15.8k, False: 18.4E]
  ------------------
  404|  15.8k|    {
  405|  15.8k|        __m128i temp_sad, sign_8x16b;
  406|  15.8k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + (2 * nt)));
  407|       |
  408|  15.8k|        src_temp5 =  _mm_unpacklo_epi8(src_temp3, m_zero);
  409|  15.8k|        src_temp4 = _mm_srli_si128(src_temp3, 8);
  410|       |
  411|  15.8k|        src_temp4 =  _mm_unpacklo_epi8(src_temp4, m_zero);
  412|       |
  413|  15.8k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp5);
  414|       |
  415|  15.8k|        src_temp4 = _mm_shuffle_epi8(src_temp4, m_mask);
  416|  15.8k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  417|  15.8k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  418|       |
  419|  15.8k|        sign_8x16b = _mm_cmpgt_epi16(m_zero, src_temp4);
  420|  15.8k|        src_temp4  = _mm_unpacklo_epi16(src_temp4, sign_8x16b);
  421|       |
  422|  15.8k|        temp_sad  = _mm_srli_si128(src_temp4, 4); /* Next 32 bits */
  423|  15.8k|        acc_dc_u  = _mm_cvtsi128_si32(src_temp4);
  424|  15.8k|        acc_dc_v  = _mm_cvtsi128_si32(temp_sad);
  425|  15.8k|    }
  426|       |
  427|       |
  428|  35.7k|    acc_dc_u += pu1_ref[6 * nt];
  429|  35.7k|    acc_dc_v += pu1_ref[6 * nt + 1];
  430|       |
  431|  35.7k|    acc_dc_u -= pu1_ref[4 * nt];
  432|  35.7k|    acc_dc_v -= pu1_ref[4 * nt + 1];
  433|       |
  434|  35.7k|    dc_val_u = (acc_dc_u + nt) >> (log2nt + 1);
  435|  35.7k|    dc_val_v = (acc_dc_v + nt) >> (log2nt + 1);
  436|       |
  437|  35.7k|    dc_val_u = dc_val_u | (dc_val_v << 8);
  438|       |
  439|       |    /* Fill the remaining rows with DC value*/
  440|       |
  441|  35.7k|    if(nt == 4)
  ------------------
  |  Branch (441:8): [True: 15.8k, False: 19.8k]
  ------------------
  442|  15.8k|    {
  443|  15.8k|        src_temp1 = _mm_set1_epi16(dc_val_u);
  444|       |
  445|       |        /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  446|  15.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  447|  15.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  448|  15.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  449|  15.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  450|       |
  451|  15.8k|    }
  452|  19.8k|    else if(nt == 8)
  ------------------
  |  Branch (452:13): [True: 11.6k, False: 8.27k]
  ------------------
  453|  11.6k|    {
  454|  11.6k|        src_temp1 = _mm_set1_epi16(dc_val_u);
  455|       |
  456|       |        /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  457|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  458|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  459|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  460|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  461|       |
  462|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp1);
  463|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp1);
  464|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp1);
  465|  11.6k|        _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp1);
  466|       |
  467|  11.6k|    }
  468|       |
  469|  8.27k|    else /* nt == 16 */
  470|  8.27k|    {
  471|  8.27k|        src_temp1 = _mm_set1_epi16(dc_val_u);
  472|       |
  473|  24.9k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (473:22): [True: 16.6k, False: 8.27k]
  ------------------
  474|  16.6k|        {
  475|       |            /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  476|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  477|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  478|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  479|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  480|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (0 * dst_strd)), src_temp1);
  481|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (1 * dst_strd)), src_temp1);
  482|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (2 * dst_strd)), src_temp1);
  483|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (3 * dst_strd)), src_temp1);
  484|       |
  485|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp1);
  486|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp1);
  487|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp1);
  488|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp1);
  489|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (4 * dst_strd)), src_temp1);
  490|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (5 * dst_strd)), src_temp1);
  491|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (6 * dst_strd)), src_temp1);
  492|  16.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (7 * dst_strd)), src_temp1);
  493|       |
  494|  16.6k|            pu1_dst += 8 * dst_strd;
  495|  16.6k|        }
  496|  8.27k|    }
  497|       |
  498|  35.7k|}
ihevc_intra_pred_chroma_horz_ssse3:
  544|  20.9k|{
  545|       |
  546|  20.9k|    WORD32 row;
  547|  20.9k|    __m128i temp1, temp2, temp3, temp4, temp5, temp6,  temp7, temp8;
  548|  20.9k|    UNUSED(src_strd);
  ------------------
  |  |   38|  20.9k|#define UNUSED(x) ((void)(x))
  ------------------
  549|  20.9k|    UNUSED(mode);
  ------------------
  |  |   38|  20.9k|#define UNUSED(x) ((void)(x))
  ------------------
  550|       |
  551|       |    /* Replication to next rows*/
  552|       |
  553|  20.9k|    if(nt == 8)
  ------------------
  |  Branch (553:8): [True: 4.91k, False: 16.0k]
  ------------------
  554|  4.91k|    {
  555|  14.7k|        for(row = 0; row < nt; row += 4)
  ------------------
  |  Branch (555:22): [True: 9.82k, False: 4.91k]
  ------------------
  556|  9.82k|        {
  557|  9.82k|            temp1 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 0)]);
  558|  9.82k|            temp2 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 0)]);
  559|  9.82k|            temp3 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 1)]);
  560|  9.82k|            temp4 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 1)]);
  561|  9.82k|            temp5 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 2)]);
  562|  9.82k|            temp6 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 2)]);
  563|  9.82k|            temp7 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 3)]);
  564|  9.82k|            temp8 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 3)]);
  565|       |
  566|  9.82k|            temp2 = _mm_unpacklo_epi8(temp1, temp2);
  567|  9.82k|            temp4 = _mm_unpacklo_epi8(temp3, temp4);
  568|  9.82k|            temp6 = _mm_unpacklo_epi8(temp5, temp6);
  569|  9.82k|            temp8 = _mm_unpacklo_epi8(temp7, temp8);
  570|       |
  571|  9.82k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), temp2);
  572|  9.82k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), temp4);
  573|  9.82k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), temp6);
  574|  9.82k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), temp8);
  575|       |
  576|  9.82k|        }
  577|  4.91k|    }
  578|  16.0k|    else if(nt == 16)
  ------------------
  |  Branch (578:13): [True: 3.15k, False: 12.8k]
  ------------------
  579|  3.15k|    {
  580|  15.7k|        for(row = 0; row < nt; row += 4)
  ------------------
  |  Branch (580:22): [True: 12.6k, False: 3.15k]
  ------------------
  581|  12.6k|        {
  582|  12.6k|            temp1 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 0)]);
  583|  12.6k|            temp2 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 0)]);
  584|       |
  585|  12.6k|            temp3 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 1)]);
  586|  12.6k|            temp4 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 1)]);
  587|       |
  588|  12.6k|            temp5 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 2)]);
  589|  12.6k|            temp6 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 2)]);
  590|       |
  591|  12.6k|            temp7 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * (row + 3)]);
  592|  12.6k|            temp8 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * (row + 3)]);
  593|       |
  594|  12.6k|            temp2 = _mm_unpacklo_epi8(temp1, temp2);
  595|  12.6k|            temp4 = _mm_unpacklo_epi8(temp3, temp4);
  596|  12.6k|            temp6 = _mm_unpacklo_epi8(temp5, temp6);
  597|  12.6k|            temp8 = _mm_unpacklo_epi8(temp7, temp8);
  598|       |
  599|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd) + 0), temp2);
  600|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd) + 16), temp2);
  601|       |
  602|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd) + 0), temp4);
  603|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd) + 16), temp4);
  604|       |
  605|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd) + 0), temp6);
  606|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd) + 16), temp6);
  607|       |
  608|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd) + 0), temp8);
  609|  12.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd) + 16), temp8);
  610|       |
  611|       |
  612|  12.6k|        }
  613|  3.15k|    }
  614|  12.8k|    else
  615|  12.8k|    {
  616|  12.8k|        temp1 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * 0]);
  617|  12.8k|        temp2 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * 0]);
  618|       |
  619|  12.8k|        temp3 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * 1]);
  620|  12.8k|        temp4 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * 1]);
  621|       |
  622|  12.8k|        temp5 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * 2]);
  623|  12.8k|        temp6 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * 2]);
  624|       |
  625|  12.8k|        temp7 = _mm_set1_epi8(pu1_ref[(4 * nt) - 2 - 2 * 3]);
  626|  12.8k|        temp8 = _mm_set1_epi8(pu1_ref[(4 * nt) - 1 - 2 * 3]);
  627|       |
  628|  12.8k|        temp2 = _mm_unpacklo_epi8(temp1, temp2);
  629|  12.8k|        temp4 = _mm_unpacklo_epi8(temp3, temp4);
  630|  12.8k|        temp6 = _mm_unpacklo_epi8(temp5, temp6);
  631|  12.8k|        temp8 = _mm_unpacklo_epi8(temp7, temp8);
  632|       |
  633|  12.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), temp2);
  634|  12.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), temp4);
  635|  12.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), temp6);
  636|  12.8k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), temp8);
  637|  12.8k|    }
  638|  20.9k|}
ihevc_intra_pred_chroma_ver_ssse3:
  684|  49.5k|{
  685|  49.5k|    __m128i src_temp1;
  686|  49.5k|    UNUSED(src_strd);
  ------------------
  |  |   38|  49.5k|#define UNUSED(x) ((void)(x))
  ------------------
  687|  49.5k|    UNUSED(mode);
  ------------------
  |  |   38|  49.5k|#define UNUSED(x) ((void)(x))
  ------------------
  688|       |
  689|       |    /* Replication to next columns*/
  690|  49.5k|    if(nt == 8)
  ------------------
  |  Branch (690:8): [True: 13.7k, False: 35.7k]
  ------------------
  691|  13.7k|    {
  692|  13.7k|        src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) + 2 + 0));
  693|       |
  694|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((0) * dst_strd)), src_temp1);
  695|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
  696|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp1);
  697|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp1);
  698|       |
  699|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp1);
  700|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp1);
  701|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp1);
  702|  13.7k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp1);
  703|       |
  704|  13.7k|    }
  705|  49.5k|    if(nt == 16)
  ------------------
  |  Branch (705:8): [True: 11.2k, False: 38.2k]
  ------------------
  706|  11.2k|    {
  707|  11.2k|        __m128i temp1, temp2;
  708|       |
  709|  11.2k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) + 2 + 0));
  710|  11.2k|        temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) + 2 + 16));
  711|       |
  712|       |        /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  713|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((0) * dst_strd)), temp1);
  714|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), temp1);
  715|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), temp1);
  716|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), temp1);
  717|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), temp1);
  718|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), temp1);
  719|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), temp1);
  720|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), temp1);
  721|       |
  722|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((0) * dst_strd)), temp2);
  723|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((1) * dst_strd)), temp2);
  724|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((2) * dst_strd)), temp2);
  725|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((3) * dst_strd)), temp2);
  726|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((4) * dst_strd)), temp2);
  727|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((5) * dst_strd)), temp2);
  728|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((6) * dst_strd)), temp2);
  729|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((7) * dst_strd)), temp2);
  730|       |
  731|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), temp1);
  732|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), temp1);
  733|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), temp1);
  734|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), temp1);
  735|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), temp1);
  736|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), temp1);
  737|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), temp1);
  738|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), temp1);
  739|       |
  740|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((8) * dst_strd)), temp2);
  741|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((9) * dst_strd)), temp2);
  742|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((10) * dst_strd)), temp2);
  743|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((11) * dst_strd)), temp2);
  744|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((12) * dst_strd)), temp2);
  745|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((13) * dst_strd)), temp2);
  746|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((14) * dst_strd)), temp2);
  747|  11.2k|        _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((15) * dst_strd)), temp2);
  748|       |
  749|  11.2k|    }
  750|  38.2k|    else
  751|  38.2k|    {
  752|  38.2k|        src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) + 2 + 0));
  753|       |
  754|  38.2k|        _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  755|  38.2k|        _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
  756|  38.2k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp1);
  757|  38.2k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp1);
  758|       |
  759|       |
  760|  38.2k|    }
  761|       |
  762|  49.5k|}
ihevc_intra_pred_chroma_mode2_ssse3:
  807|  19.5k|{
  808|  19.5k|    WORD32 row, col;
  809|       |
  810|       |
  811|  19.5k|    __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7, src_temp8, sm2, sm3;
  812|  19.5k|    UNUSED(src_strd);
  ------------------
  |  |   38|  19.5k|#define UNUSED(x) ((void)(x))
  ------------------
  813|  19.5k|    UNUSED(mode);
  ------------------
  |  |   38|  19.5k|#define UNUSED(x) ((void)(x))
  ------------------
  814|       |
  815|  19.5k|    sm2 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY7[0]);
  816|  19.5k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY8[0]);
  817|       |
  818|       |    /* For the angle 45, replication is done from the corresponding angle */
  819|       |    /* intra_pred_ang = tan(angle) in q5 format */
  820|       |
  821|  19.5k|    if(nt == 4)
  ------------------
  |  Branch (821:8): [True: 6.29k, False: 13.2k]
  ------------------
  822|  6.29k|    {
  823|       |        /*pu1_ref[two_nt - row - (col+1) - 1]*/
  824|  6.29k|        src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 0 - 8 - 2));
  825|  6.29k|        src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 1 - 8 - 2));
  826|  6.29k|        src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 2 - 8 - 2));
  827|  6.29k|        src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 3 - 8 - 2));
  828|       |
  829|  6.29k|        _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), _mm_shuffle_epi8(src_temp1, sm2));
  830|  6.29k|        _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), _mm_shuffle_epi8(src_temp2, sm2));
  831|  6.29k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), _mm_shuffle_epi8(src_temp3, sm2));
  832|  6.29k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), _mm_shuffle_epi8(src_temp4, sm2));
  833|       |
  834|  6.29k|    }
  835|  13.2k|    else if(nt == 8)
  ------------------
  |  Branch (835:13): [True: 9.65k, False: 3.60k]
  ------------------
  836|  9.65k|    {
  837|       |        /*pu1_ref[two_nt - row - (col+1) - 1]*/
  838|  9.65k|        src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 0 - 16 - 2));
  839|  9.65k|        src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 1 - 16 - 2));
  840|  9.65k|        src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 2 - 16 - 2));
  841|  9.65k|        src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 3 - 16 - 2));
  842|  9.65k|        src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 4 - 16 - 2));
  843|  9.65k|        src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 5 - 16 - 2));
  844|  9.65k|        src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 6 - 16 - 2));
  845|  9.65k|        src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * 7 - 16 - 2));
  846|       |
  847|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), _mm_shuffle_epi8(src_temp1, sm3));
  848|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), _mm_shuffle_epi8(src_temp2, sm3));
  849|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), _mm_shuffle_epi8(src_temp3, sm3));
  850|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), _mm_shuffle_epi8(src_temp4, sm3));
  851|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), _mm_shuffle_epi8(src_temp5, sm3));
  852|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), _mm_shuffle_epi8(src_temp6, sm3));
  853|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), _mm_shuffle_epi8(src_temp7, sm3));
  854|  9.65k|        _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), _mm_shuffle_epi8(src_temp8, sm3));
  855|       |
  856|       |
  857|  9.65k|    }
  858|  3.60k|    else
  859|  3.60k|    {
  860|  10.8k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (860:22): [True: 7.27k, False: 3.60k]
  ------------------
  861|  7.27k|        {
  862|  21.8k|            for(col = 0; col < 2 * nt; col += 16)
  ------------------
  |  Branch (862:26): [True: 14.5k, False: 7.27k]
  ------------------
  863|  14.5k|            {   /*pu1_ref[two_nt - row - (col+1) - 1]*/
  864|  14.5k|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 0) - (col + 16) - 2));
  865|  14.5k|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 1) - (col + 16) - 2));
  866|  14.5k|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 2) - (col + 16) - 2));
  867|  14.5k|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 3) - (col + 16) - 2));
  868|  14.5k|                src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 4) - (col + 16) - 2));
  869|  14.5k|                src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 5) - (col + 16) - 2));
  870|  14.5k|                src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 6) - (col + 16) - 2));
  871|  14.5k|                src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + (4 * nt) - 2 * (row + 7) - (col + 16) - 2));
  872|       |
  873|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 0) * dst_strd)), _mm_shuffle_epi8(src_temp1, sm3));
  874|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 1) * dst_strd)), _mm_shuffle_epi8(src_temp2, sm3));
  875|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 2) * dst_strd)), _mm_shuffle_epi8(src_temp3, sm3));
  876|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 3) * dst_strd)), _mm_shuffle_epi8(src_temp4, sm3));
  877|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 4) * dst_strd)), _mm_shuffle_epi8(src_temp5, sm3));
  878|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 5) * dst_strd)), _mm_shuffle_epi8(src_temp6, sm3));
  879|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 6) * dst_strd)), _mm_shuffle_epi8(src_temp7, sm3));
  880|  14.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 7) * dst_strd)), _mm_shuffle_epi8(src_temp8, sm3));
  881|  14.5k|            }
  882|  7.27k|        }
  883|  3.60k|    }
  884|  19.5k|}
ihevc_intra_pred_chroma_mode_18_34_ssse3:
  929|  18.8k|{
  930|  18.8k|    WORD32 row;
  931|  18.8k|    WORD32 idx = 0;
  932|       |
  933|  18.8k|    __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7, src_temp8;
  934|  18.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  18.8k|#define UNUSED(x) ((void)(x))
  ------------------
  935|       |
  936|  18.8k|    if(mode == 34)
  ------------------
  |  Branch (936:8): [True: 13.6k, False: 5.16k]
  ------------------
  937|  13.6k|    {
  938|  13.6k|        if(nt == 4)
  ------------------
  |  Branch (938:12): [True: 7.43k, False: 6.25k]
  ------------------
  939|  7.43k|        {
  940|       |            /*pu1_ref[two_nt + col + idx + 1]*/
  941|  7.43k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (0 + 1) + (4 * nt) + 2 * idx + 2));
  942|  7.43k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (1 + 1) + (4 * nt) + 2 * idx + 2));
  943|  7.43k|            src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (2 + 1) + (4 * nt) + 2 * idx + 2));
  944|  7.43k|            src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (3 + 1) + (4 * nt) + 2 * idx + 2));
  945|       |
  946|  7.43k|            _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  947|  7.43k|            _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp2);
  948|  7.43k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp3);
  949|  7.43k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp4);
  950|       |
  951|  7.43k|        }
  952|  6.25k|        else if(nt == 8)
  ------------------
  |  Branch (952:17): [True: 2.69k, False: 3.55k]
  ------------------
  953|  2.69k|        {
  954|       |            /*pu1_ref[two_nt + col + idx + 1]*/
  955|  2.69k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (0 + 1) + (4 * nt) + 2 * idx + 2));
  956|  2.69k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (1 + 1) + (4 * nt) + 2 * idx + 2));
  957|  2.69k|            src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (2 + 1) + (4 * nt) + 2 * idx + 2));
  958|  2.69k|            src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (3 + 1) + (4 * nt) + 2 * idx + 2));
  959|  2.69k|            src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (4 + 1) + (4 * nt) + 2 * idx + 2));
  960|  2.69k|            src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (5 + 1) + (4 * nt) + 2 * idx + 2));
  961|  2.69k|            src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (6 + 1) + (4 * nt) + 2 * idx + 2));
  962|  2.69k|            src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (7 + 1) + (4 * nt) + 2 * idx + 2));
  963|       |
  964|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
  965|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp2);
  966|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp3);
  967|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp4);
  968|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp5);
  969|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp6);
  970|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp7);
  971|  2.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp8);
  972|       |
  973|       |
  974|  2.69k|        }
  975|  3.55k|        else
  976|  3.55k|        {
  977|  3.55k|            __m128i src_temp9, src_temp10, src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16;
  978|  10.6k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (978:26): [True: 7.13k, False: 3.55k]
  ------------------
  979|  7.13k|            {
  980|       |                /*pu1_ref[two_nt + col + idx + 1]*/
  981|  7.13k|                src_temp1  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (0 + 1) +  0 + (4 * nt) + 2 * idx + 2));
  982|  7.13k|                src_temp9  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (0 + 1) + 16 + (4 * nt) + 2 * idx + 2));
  983|  7.13k|                src_temp2  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (1 + 1) +  0 + (4 * nt) + 2 * idx + 2));
  984|  7.13k|                src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (1 + 1) + 16 + (4 * nt) + 2 * idx + 2));
  985|  7.13k|                src_temp3  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (2 + 1) +  0 + (4 * nt) + 2 * idx + 2));
  986|  7.13k|                src_temp11 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (2 + 1) + 16 + (4 * nt) + 2 * idx + 2));
  987|  7.13k|                src_temp4  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (3 + 1) +  0 + (4 * nt) + 2 * idx + 2));
  988|  7.13k|                src_temp12 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (3 + 1) + 16 + (4 * nt) + 2 * idx + 2));
  989|       |
  990|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (0 * dst_strd)), src_temp1);
  991|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (0 * dst_strd)), src_temp9);
  992|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (1 * dst_strd)), src_temp2);
  993|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (1 * dst_strd)), src_temp10);
  994|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (2 * dst_strd)), src_temp3);
  995|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (2 * dst_strd)), src_temp11);
  996|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (3 * dst_strd)), src_temp4);
  997|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (3 * dst_strd)), src_temp12);
  998|       |
  999|  7.13k|                src_temp5  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (4 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1000|  7.13k|                src_temp13 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (4 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1001|  7.13k|                src_temp6  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (5 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1002|  7.13k|                src_temp14 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (5 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1003|  7.13k|                src_temp7  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (6 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1004|  7.13k|                src_temp15 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (6 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1005|  7.13k|                src_temp8  = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (7 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1006|  7.13k|                src_temp16 = _mm_loadu_si128((__m128i *)(pu1_ref + 2 * (7 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1007|       |
 1008|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (4 * dst_strd)), src_temp5);
 1009|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (4 * dst_strd)), src_temp13);
 1010|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (5 * dst_strd)), src_temp6);
 1011|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (5 * dst_strd)), src_temp14);
 1012|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (6 * dst_strd)), src_temp7);
 1013|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (6 * dst_strd)), src_temp15);
 1014|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (7 * dst_strd)), src_temp8);
 1015|  7.13k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (7 * dst_strd)), src_temp16);
 1016|       |
 1017|  7.13k|                pu1_ref += 2 * 8;
 1018|  7.13k|                pu1_dst += 8 * dst_strd;
 1019|  7.13k|            }
 1020|  3.55k|        }
 1021|  13.6k|    }
 1022|  5.16k|    else
 1023|  5.16k|    {
 1024|  5.16k|        if(nt == 4)
  ------------------
  |  Branch (1024:12): [True: 1.48k, False: 3.67k]
  ------------------
 1025|  1.48k|        {
 1026|       |            /*pu1_ref[two_nt + col + idx + 1]*/
 1027|  1.48k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (0 + 1) + (4 * nt) + 2 * idx + 2));
 1028|  1.48k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (1 + 1) + (4 * nt) + 2 * idx + 2));
 1029|  1.48k|            src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (2 + 1) + (4 * nt) + 2 * idx + 2));
 1030|  1.48k|            src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (3 + 1) + (4 * nt) + 2 * idx + 2));
 1031|       |
 1032|  1.48k|            _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
 1033|  1.48k|            _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp2);
 1034|  1.48k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp3);
 1035|  1.48k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp4);
 1036|       |
 1037|       |
 1038|  1.48k|        }
 1039|  3.67k|        else if(nt == 8)
  ------------------
  |  Branch (1039:17): [True: 3.07k, False: 602]
  ------------------
 1040|  3.07k|        {
 1041|       |            /*pu1_ref[two_nt + col + idx + 1]*/
 1042|  3.07k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (0 + 1) + (4 * nt) + 2 * idx + 2));
 1043|  3.07k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (1 + 1) + (4 * nt) + 2 * idx + 2));
 1044|  3.07k|            src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (2 + 1) + (4 * nt) + 2 * idx + 2));
 1045|  3.07k|            src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (3 + 1) + (4 * nt) + 2 * idx + 2));
 1046|  3.07k|            src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (4 + 1) + (4 * nt) + 2 * idx + 2));
 1047|  3.07k|            src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (5 + 1) + (4 * nt) + 2 * idx + 2));
 1048|  3.07k|            src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (6 + 1) + (4 * nt) + 2 * idx + 2));
 1049|  3.07k|            src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (7 + 1) + (4 * nt) + 2 * idx + 2));
 1050|       |
 1051|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
 1052|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp2);
 1053|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp3);
 1054|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp4);
 1055|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp5);
 1056|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp6);
 1057|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp7);
 1058|  3.07k|            _mm_storeu_si128((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp8);
 1059|       |
 1060|       |
 1061|  3.07k|        }
 1062|    602|        else
 1063|    602|        {
 1064|    602|            __m128i src_temp9, src_temp10, src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16;
 1065|  1.81k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (1065:26): [True: 1.21k, False: 602]
  ------------------
 1066|  1.21k|            {
 1067|       |                /*pu1_ref[two_nt + col + idx + 1]*/
 1068|  1.21k|                src_temp1  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (0 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1069|  1.21k|                src_temp9  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (0 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1070|  1.21k|                src_temp2  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (1 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1071|  1.21k|                src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (1 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1072|  1.21k|                src_temp3  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (2 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1073|  1.21k|                src_temp11 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (2 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1074|  1.21k|                src_temp4  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (3 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1075|  1.21k|                src_temp12 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (3 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1076|       |
 1077|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (0 * dst_strd)), src_temp1);
 1078|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (0 * dst_strd)), src_temp9);
 1079|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (1 * dst_strd)), src_temp2);
 1080|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (1 * dst_strd)), src_temp10);
 1081|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (2 * dst_strd)), src_temp3);
 1082|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (2 * dst_strd)), src_temp11);
 1083|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (3 * dst_strd)), src_temp4);
 1084|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (3 * dst_strd)), src_temp12);
 1085|       |
 1086|  1.21k|                src_temp5  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (4 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1087|  1.21k|                src_temp13 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (4 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1088|  1.21k|                src_temp6  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (5 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1089|  1.21k|                src_temp14 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (5 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1090|  1.21k|                src_temp7  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (6 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1091|  1.21k|                src_temp15 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (6 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1092|  1.21k|                src_temp8  = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (7 + 1) +  0 + (4 * nt) + 2 * idx + 2));
 1093|  1.21k|                src_temp16 = _mm_loadu_si128((__m128i *)(pu1_ref - 2 * (7 + 1) + 16 + (4 * nt) + 2 * idx + 2));
 1094|       |
 1095|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (4 * dst_strd)), src_temp5);
 1096|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (4 * dst_strd)), src_temp13);
 1097|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (5 * dst_strd)), src_temp6);
 1098|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (5 * dst_strd)), src_temp14);
 1099|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (6 * dst_strd)), src_temp7);
 1100|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (6 * dst_strd)), src_temp15);
 1101|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (7 * dst_strd)), src_temp8);
 1102|  1.21k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (7 * dst_strd)), src_temp16);
 1103|       |
 1104|  1.21k|                pu1_ref -= 2 * 8;
 1105|  1.21k|                pu1_dst += 8 * dst_strd;
 1106|  1.21k|            }
 1107|    602|        }
 1108|  5.16k|    }
 1109|       |
 1110|  18.8k|}
ihevc_intra_pred_chroma_mode_3_to_9_ssse3:
 1155|  31.7k|{
 1156|  31.7k|    WORD32 row, col;
 1157|       |
 1158|  31.7k|    WORD32 intra_pred_ang;
 1159|       |
 1160|  31.7k|    __m128i const_temp_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
 1161|  31.7k|    __m128i fract_4x32b, zero_8x16b, intra_pred_ang_4x32b;
 1162|  31.7k|    __m128i row_4x32b, two_nt_4x32b, ref_main_idx_4x32b, res_temp5_4x32b, sm1;
 1163|  31.7k|    UNUSED(src_strd);
  ------------------
  |  |   38|  31.7k|#define UNUSED(x) ((void)(x))
  ------------------
 1164|       |
 1165|       |    /* Intra Pred Angle according to the mode */
 1166|  31.7k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1167|       |
 1168|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1169|       |    /* samples dependent on distance to obtain destination sample */
 1170|       |
 1171|  31.7k|    sm1 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY7[0]);
 1172|  31.7k|    const_temp_4x32b  = _mm_set1_epi16(16);
 1173|  31.7k|    const_temp2_4x32b = _mm_set1_epi32(31);
 1174|  31.7k|    const_temp3_4x32b = _mm_set1_epi16(32);
 1175|  31.7k|    const_temp4_4x32b = _mm_set1_epi32(4);
 1176|       |
 1177|  31.7k|    two_nt_4x32b = _mm_set1_epi32(1);
 1178|       |
 1179|  31.7k|    zero_8x16b = _mm_set1_epi16(0);
 1180|       |
 1181|       |
 1182|       |    /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 1183|  31.7k|    intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 1184|       |
 1185|  31.7k|    row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 1186|       |
 1187|  31.7k|    if(nt == 4)
  ------------------
  |  Branch (1187:8): [True: 13.1k, False: 18.5k]
  ------------------
 1188|  13.1k|    {
 1189|  13.1k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 1190|  13.1k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 1191|  13.1k|        const_temp2_4x32b = _mm_set1_epi16(31);
 1192|  13.1k|        const_temp4_4x32b = _mm_set1_epi16(4);
 1193|  13.1k|        two_nt_4x32b = _mm_set1_epi16((4 * nt) - 2);
 1194|       |
 1195|  13.1k|        {
 1196|  13.1k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 1197|  13.1k|            WORD8  ai1_fract_temp_val[16], ai1_src_temp_val[16];
 1198|       |
 1199|  13.1k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract4_8x16b;
 1200|  13.1k|            __m128i src_values10;
 1201|       |
 1202|  13.1k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1203|       |
 1204|       |            /* pos = ((row + 1) * intra_pred_ang); */
 1205|  13.1k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 1206|       |
 1207|       |            /* fract = pos & (31); */
 1208|  13.1k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1209|       |
 1210|  13.1k|            ref_main_idx_4x32b = _mm_srai_epi16(res_temp5_4x32b,  5);
 1211|       |
 1212|  13.1k|            ref_main_idx_4x32b = _mm_add_epi16(ref_main_idx_4x32b,  ref_main_idx_4x32b);
 1213|       |
 1214|  13.1k|            ref_main_idx_4x32b = _mm_sub_epi16(two_nt_4x32b, ref_main_idx_4x32b);
 1215|       |
 1216|  13.1k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 1217|       |
 1218|       |            /*(32 - fract) */
 1219|  13.1k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 1220|       |
 1221|  13.1k|            _mm_storel_epi64((__m128i *)(ai1_fract_temp_val), fract_4x32b);
 1222|  13.1k|            _mm_storel_epi64((__m128i *)(ai1_src_temp_val),  src_values10);
 1223|       |
 1224|  13.1k|            fract1_8x16b = _mm_set1_epi8(ai1_fract_temp_val[0]);  /* col=0*/
 1225|  13.1k|            fract2_8x16b = _mm_set1_epi8(ai1_fract_temp_val[2]);  /* col=1*/
 1226|  13.1k|            fract3_8x16b = _mm_set1_epi8(ai1_fract_temp_val[4]);  /* col=2*/
 1227|  13.1k|            fract4_8x16b = _mm_set1_epi8(ai1_fract_temp_val[6]);  /* col=3*/
 1228|       |
 1229|  13.1k|            temp1_8x16b = _mm_set1_epi8(ai1_src_temp_val[0]);  /* col=0*/
 1230|  13.1k|            temp2_8x16b = _mm_set1_epi8(ai1_src_temp_val[2]);  /* col=1*/
 1231|  13.1k|            temp3_8x16b = _mm_set1_epi8(ai1_src_temp_val[4]);  /* col=2*/
 1232|  13.1k|            temp4_8x16b = _mm_set1_epi8(ai1_src_temp_val[6]);  /* col=3*/
 1233|       |
 1234|  13.1k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 1235|  13.1k|            temp2_8x16b = _mm_unpacklo_epi8(temp2_8x16b, fract2_8x16b);
 1236|  13.1k|            temp3_8x16b = _mm_unpacklo_epi8(temp3_8x16b, fract3_8x16b);
 1237|  13.1k|            temp4_8x16b = _mm_unpacklo_epi8(temp4_8x16b, fract4_8x16b);
 1238|       |
 1239|  13.1k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 1240|  13.1k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 1241|  13.1k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 1242|  13.1k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 1243|       |
 1244|  13.1k|            {
 1245|  13.1k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1246|  13.1k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1247|       |
 1248|       |                /* loding 8-bit 16 pixels */
 1249|  13.1k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx1 - 8)); /* col=0*/
 1250|  13.1k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx2 - 8)); /* col=1*/
 1251|  13.1k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx3 - 8)); /* col=2*/
 1252|  13.1k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx4 - 8)); /* col=3*/
 1253|       |
 1254|  13.1k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 2); /* col=0*/
 1255|  13.1k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 2); /* col=1*/
 1256|  13.1k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 2); /* col=2*/
 1257|  13.1k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 2); /* col=3*/
 1258|       |
 1259|  13.1k|                src_temp1_8x16b =  _mm_unpacklo_epi8(src_temp1_8x16b, src_temp5_8x16b); /* col=0*/
 1260|  13.1k|                src_temp2_8x16b =  _mm_unpacklo_epi8(src_temp2_8x16b, src_temp6_8x16b); /* col=1*/
 1261|  13.1k|                src_temp3_8x16b =  _mm_unpacklo_epi8(src_temp3_8x16b, src_temp7_8x16b); /* col=2*/
 1262|  13.1k|                src_temp4_8x16b =  _mm_unpacklo_epi8(src_temp4_8x16b, src_temp8_8x16b); /* col=3*/
 1263|       |
 1264|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1265|  13.1k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1266|  13.1k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1267|  13.1k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1268|  13.1k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1269|       |
 1270|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1271|  13.1k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1272|  13.1k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1273|  13.1k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1274|  13.1k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1275|       |
 1276|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1277|  13.1k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1278|  13.1k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1279|  13.1k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1280|  13.1k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1281|       |
 1282|       |                /* converting 16 bit to 8 bit */
 1283|  13.1k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, zero_8x16b); /* col=0*/
 1284|  13.1k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, zero_8x16b); /* col=1*/
 1285|  13.1k|                src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, zero_8x16b); /* col=2*/
 1286|  13.1k|                src_temp4_8x16b = _mm_packus_epi16(src_temp4_8x16b, zero_8x16b); /* col=3*/
 1287|       |
 1288|  13.1k|                src_temp1_8x16b = _mm_shuffle_epi8(src_temp1_8x16b, sm1);
 1289|  13.1k|                src_temp2_8x16b = _mm_shuffle_epi8(src_temp2_8x16b, sm1);
 1290|  13.1k|                src_temp3_8x16b = _mm_shuffle_epi8(src_temp3_8x16b, sm1);
 1291|  13.1k|                src_temp4_8x16b = _mm_shuffle_epi8(src_temp4_8x16b, sm1);
 1292|       |
 1293|  13.1k|                src_temp5_8x16b = _mm_unpacklo_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1294|  13.1k|                src_temp6_8x16b = _mm_unpacklo_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1295|       |
 1296|  13.1k|                src_temp8_8x16b = _mm_unpacklo_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1297|  13.1k|                src_temp7_8x16b = _mm_unpackhi_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1298|       |
 1299|  13.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 0)), src_temp8_8x16b);             /* row=0*/
 1300|       |
 1301|  13.1k|                src_temp2_8x16b  = _mm_shuffle_epi32(src_temp8_8x16b, _MM_SHUFFLE(3, 2, 3, 2));
 1302|  13.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (1))), src_temp2_8x16b);       /* row=1*/
 1303|       |
 1304|  13.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (2))), src_temp7_8x16b);       /* row=2*/
 1305|       |
 1306|  13.1k|                src_temp4_8x16b  = _mm_shuffle_epi32(src_temp7_8x16b, _MM_SHUFFLE(3, 2, 3, 2));
 1307|  13.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (3))), src_temp4_8x16b);       /* row=4*/
 1308|       |
 1309|  13.1k|            }
 1310|  13.1k|        }
 1311|  13.1k|    }
 1312|  18.5k|    else
 1313|  18.5k|    {
 1314|  18.5k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 1315|  18.5k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 1316|  18.5k|        const_temp2_4x32b = _mm_set1_epi16(31);
 1317|  18.5k|        const_temp4_4x32b = _mm_set1_epi16(8);
 1318|  18.5k|        two_nt_4x32b = _mm_set1_epi16((4 * nt) - 2);
 1319|       |
 1320|  44.3k|        for(col = 0; col < 2 * nt; col += 16)
  ------------------
  |  Branch (1320:22): [True: 25.8k, False: 18.5k]
  ------------------
 1321|  25.8k|        {
 1322|  25.8k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 1323|  25.8k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 1324|  25.8k|            WORD8  ai1_fract_temp_val[16], ai1_src_temp_val[16];
 1325|       |
 1326|  25.8k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract4_8x16b;
 1327|  25.8k|            __m128i fract5_8x16b, fract6_8x16b, fract7_8x16b, fract8_8x16b, src_values10;
 1328|       |
 1329|  25.8k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1330|  25.8k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 1331|       |
 1332|       |            /* pos = ((row + 1) * intra_pred_ang); */
 1333|  25.8k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 1334|       |
 1335|       |            /* fract = pos & (31); */
 1336|  25.8k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1337|       |
 1338|  25.8k|            ref_main_idx_4x32b = _mm_srai_epi16(res_temp5_4x32b,  5);
 1339|       |
 1340|  25.8k|            ref_main_idx_4x32b = _mm_add_epi16(ref_main_idx_4x32b,  ref_main_idx_4x32b);
 1341|       |
 1342|  25.8k|            ref_main_idx_4x32b = _mm_sub_epi16(two_nt_4x32b, ref_main_idx_4x32b);
 1343|       |
 1344|  25.8k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 1345|       |
 1346|       |            /*(32 - fract) */
 1347|  25.8k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 1348|       |
 1349|  25.8k|            _mm_storeu_si128((__m128i *)(ai1_fract_temp_val), fract_4x32b);
 1350|  25.8k|            _mm_storeu_si128((__m128i *)(ai1_src_temp_val),  src_values10);
 1351|       |
 1352|  25.8k|            fract1_8x16b = _mm_set1_epi8(ai1_fract_temp_val[0]);  /* col=0*/
 1353|  25.8k|            fract2_8x16b = _mm_set1_epi8(ai1_fract_temp_val[2]);  /* col=1*/
 1354|  25.8k|            fract3_8x16b = _mm_set1_epi8(ai1_fract_temp_val[4]);  /* col=2*/
 1355|  25.8k|            fract4_8x16b = _mm_set1_epi8(ai1_fract_temp_val[6]);  /* col=3*/
 1356|       |
 1357|  25.8k|            temp1_8x16b = _mm_set1_epi8(ai1_src_temp_val[0]);  /* col=0*/
 1358|  25.8k|            temp2_8x16b = _mm_set1_epi8(ai1_src_temp_val[2]);  /* col=1*/
 1359|  25.8k|            temp3_8x16b = _mm_set1_epi8(ai1_src_temp_val[4]);  /* col=2*/
 1360|  25.8k|            temp4_8x16b = _mm_set1_epi8(ai1_src_temp_val[6]);  /* col=3*/
 1361|       |
 1362|  25.8k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 1363|  25.8k|            temp2_8x16b = _mm_unpacklo_epi8(temp2_8x16b, fract2_8x16b);
 1364|  25.8k|            temp3_8x16b = _mm_unpacklo_epi8(temp3_8x16b, fract3_8x16b);
 1365|  25.8k|            temp4_8x16b = _mm_unpacklo_epi8(temp4_8x16b, fract4_8x16b);
 1366|       |
 1367|  25.8k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 1368|  25.8k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 1369|  25.8k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 1370|  25.8k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 1371|       |
 1372|  25.8k|            fract5_8x16b = _mm_set1_epi8(ai1_fract_temp_val[8]);  /* col=5*/
 1373|  25.8k|            fract6_8x16b = _mm_set1_epi8(ai1_fract_temp_val[10]);  /* col=6*/
 1374|  25.8k|            fract7_8x16b = _mm_set1_epi8(ai1_fract_temp_val[12]);  /* col=7*/
 1375|  25.8k|            fract8_8x16b = _mm_set1_epi8(ai1_fract_temp_val[14]);  /* col=8*/
 1376|       |
 1377|  25.8k|            temp11_8x16b = _mm_set1_epi8(ai1_src_temp_val[8]);  /* col=0*/
 1378|  25.8k|            temp12_8x16b = _mm_set1_epi8(ai1_src_temp_val[10]);  /* col=1*/
 1379|  25.8k|            temp13_8x16b = _mm_set1_epi8(ai1_src_temp_val[12]);  /* col=2*/
 1380|  25.8k|            temp14_8x16b = _mm_set1_epi8(ai1_src_temp_val[14]);  /* col=3*/
 1381|       |
 1382|  25.8k|            temp11_8x16b = _mm_unpacklo_epi8(temp11_8x16b, fract5_8x16b);
 1383|  25.8k|            temp12_8x16b = _mm_unpacklo_epi8(temp12_8x16b, fract6_8x16b);
 1384|  25.8k|            temp13_8x16b = _mm_unpacklo_epi8(temp13_8x16b, fract7_8x16b);
 1385|  25.8k|            temp14_8x16b = _mm_unpacklo_epi8(temp14_8x16b, fract8_8x16b);
 1386|       |
 1387|  25.8k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 1388|  25.8k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 1389|  25.8k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 1390|  25.8k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 1391|       |
 1392|   106k|            for(row = 0; row < nt; row += 4)
  ------------------
  |  Branch (1392:26): [True: 80.6k, False: 25.8k]
  ------------------
 1393|  80.6k|            {
 1394|  80.6k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1395|  80.6k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1396|       |
 1397|  80.6k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 1398|  80.6k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 1399|       |
 1400|       |                /* loding 8-bit 16 pixels */
 1401|  80.6k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx1 - row - (8 + row))); /* col=0*/
 1402|  80.6k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx2 - row - (8 + row))); /* col=1*/
 1403|  80.6k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx3 - row - (8 + row))); /* col=2*/
 1404|  80.6k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx4 - row - (8 + row))); /* col=3*/
 1405|       |
 1406|  80.6k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 2); /* col=0*/
 1407|  80.6k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 2); /* col=1*/
 1408|  80.6k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 2); /* col=2*/
 1409|  80.6k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 2); /* col=3*/
 1410|       |
 1411|  80.6k|                src_temp1_8x16b =  _mm_unpacklo_epi8(src_temp1_8x16b, src_temp5_8x16b); /* col=0*/
 1412|  80.6k|                src_temp2_8x16b =  _mm_unpacklo_epi8(src_temp2_8x16b, src_temp6_8x16b); /* col=1*/
 1413|  80.6k|                src_temp3_8x16b =  _mm_unpacklo_epi8(src_temp3_8x16b, src_temp7_8x16b); /* col=2*/
 1414|  80.6k|                src_temp4_8x16b =  _mm_unpacklo_epi8(src_temp4_8x16b, src_temp8_8x16b); /* col=3*/
 1415|       |
 1416|       |                /* loding 8-bit 16 pixels */
 1417|  80.6k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx5 - row - row - 8)); /* col=5*/
 1418|  80.6k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx6 - row - row - 8)); /* col=6*/
 1419|  80.6k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx7 - row - row - 8)); /* col=7*/
 1420|  80.6k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx8 - row - row - 8)); /* col=8*/
 1421|       |
 1422|  80.6k|                src_temp11_8x16b = _mm_srli_si128(src_temp15_8x16b, 2); /* col=5*/
 1423|  80.6k|                src_temp12_8x16b = _mm_srli_si128(src_temp16_8x16b, 2); /* col=6*/
 1424|  80.6k|                src_temp13_8x16b = _mm_srli_si128(src_temp17_8x16b, 2); /* col=7*/
 1425|  80.6k|                src_temp14_8x16b = _mm_srli_si128(src_temp18_8x16b, 2); /* col=8*/
 1426|       |
 1427|  80.6k|                src_temp11_8x16b =  _mm_unpacklo_epi8(src_temp11_8x16b, src_temp15_8x16b); /* col=0*/
 1428|  80.6k|                src_temp12_8x16b =  _mm_unpacklo_epi8(src_temp12_8x16b, src_temp16_8x16b); /* col=1*/
 1429|  80.6k|                src_temp13_8x16b =  _mm_unpacklo_epi8(src_temp13_8x16b, src_temp17_8x16b); /* col=2*/
 1430|  80.6k|                src_temp14_8x16b =  _mm_unpacklo_epi8(src_temp14_8x16b, src_temp18_8x16b); /* col=3*/
 1431|       |
 1432|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1433|  80.6k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1434|  80.6k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1435|  80.6k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1436|  80.6k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1437|       |
 1438|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1439|  80.6k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 1440|  80.6k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 1441|  80.6k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 1442|  80.6k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 1443|       |
 1444|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1445|  80.6k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1446|  80.6k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1447|  80.6k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1448|  80.6k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1449|       |
 1450|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1451|  80.6k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1452|  80.6k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1453|  80.6k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1454|  80.6k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1455|       |
 1456|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1457|  80.6k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 1458|  80.6k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 1459|  80.6k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 1460|  80.6k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 1461|       |
 1462|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1463|  80.6k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 1464|  80.6k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 1465|  80.6k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 1466|  80.6k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 1467|       |
 1468|       |                /* converting 16 bit to 8 bit */
 1469|  80.6k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, zero_8x16b); /* col=0*/
 1470|  80.6k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, zero_8x16b); /* col=1*/
 1471|  80.6k|                src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, zero_8x16b); /* col=2*/
 1472|  80.6k|                src_temp4_8x16b = _mm_packus_epi16(src_temp4_8x16b, zero_8x16b); /* col=3*/
 1473|       |
 1474|  80.6k|                src_temp1_8x16b = _mm_shuffle_epi8(src_temp1_8x16b, sm1);
 1475|  80.6k|                src_temp2_8x16b = _mm_shuffle_epi8(src_temp2_8x16b, sm1);
 1476|  80.6k|                src_temp3_8x16b = _mm_shuffle_epi8(src_temp3_8x16b, sm1);
 1477|  80.6k|                src_temp4_8x16b = _mm_shuffle_epi8(src_temp4_8x16b, sm1);
 1478|       |
 1479|       |                /* converting 16 bit to 8 bit */
 1480|  80.6k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, zero_8x16b); /* col=5*/
 1481|  80.6k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, zero_8x16b); /* col=6*/
 1482|  80.6k|                src_temp13_8x16b = _mm_packus_epi16(src_temp13_8x16b, zero_8x16b); /* col=7*/
 1483|  80.6k|                src_temp14_8x16b = _mm_packus_epi16(src_temp14_8x16b, zero_8x16b); /* col=8*/
 1484|       |
 1485|  80.6k|                src_temp11_8x16b = _mm_shuffle_epi8(src_temp11_8x16b, sm1);
 1486|  80.6k|                src_temp12_8x16b = _mm_shuffle_epi8(src_temp12_8x16b, sm1);
 1487|  80.6k|                src_temp13_8x16b = _mm_shuffle_epi8(src_temp13_8x16b, sm1);
 1488|  80.6k|                src_temp14_8x16b = _mm_shuffle_epi8(src_temp14_8x16b, sm1);
 1489|       |
 1490|  80.6k|                src_temp5_8x16b = _mm_unpacklo_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1491|  80.6k|                src_temp6_8x16b = _mm_unpacklo_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1492|       |
 1493|  80.6k|                src_temp8_8x16b = _mm_unpacklo_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1494|  80.6k|                src_temp7_8x16b = _mm_unpackhi_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1495|       |
 1496|  80.6k|                src_temp15_8x16b = _mm_unpacklo_epi16(src_temp11_8x16b, src_temp12_8x16b);
 1497|  80.6k|                src_temp16_8x16b = _mm_unpacklo_epi16(src_temp13_8x16b, src_temp14_8x16b);
 1498|       |
 1499|  80.6k|                src_temp18_8x16b = _mm_unpacklo_epi32(src_temp15_8x16b, src_temp16_8x16b);
 1500|  80.6k|                src_temp17_8x16b = _mm_unpackhi_epi32(src_temp15_8x16b, src_temp16_8x16b);
 1501|       |
 1502|  80.6k|                src_temp11_8x16b = _mm_unpacklo_epi64(src_temp8_8x16b, src_temp18_8x16b);
 1503|  80.6k|                src_temp12_8x16b = _mm_unpackhi_epi64(src_temp8_8x16b, src_temp18_8x16b);
 1504|  80.6k|                src_temp13_8x16b = _mm_unpacklo_epi64(src_temp7_8x16b, src_temp17_8x16b);
 1505|  80.6k|                src_temp14_8x16b = _mm_unpackhi_epi64(src_temp7_8x16b, src_temp17_8x16b);
 1506|       |
 1507|  80.6k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * row)),    src_temp11_8x16b);          /* row=0*/
 1508|  80.6k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp12_8x16b);       /* row=1*/
 1509|  80.6k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp13_8x16b);       /* row=2*/
 1510|  80.6k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp14_8x16b);       /* row=4*/
 1511|       |
 1512|  80.6k|            }
 1513|  25.8k|        }
 1514|  18.5k|    }
 1515|  31.7k|}
ihevc_intra_pred_chroma_mode_11_to_17_ssse3:
 1561|  26.4k|{
 1562|       |    /* This function and ihevc_intra_pred_CHROMA_mode_19_to_25 are same except*/
 1563|       |    /* for ref main & side samples assignment,can be combined for */
 1564|       |    /* optimzation*/
 1565|       |
 1566|  26.4k|    WORD32 row, col, k;
 1567|  26.4k|    WORD32 intra_pred_ang, inv_ang, inv_ang_sum;
 1568|  26.4k|    WORD32 ref_idx;
 1569|       |
 1570|       |
 1571|  26.4k|    __m128i const_temp_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
 1572|  26.4k|    __m128i fract_4x32b, zero_8x16b, intra_pred_ang_4x32b;
 1573|  26.4k|    __m128i row_4x32b, two_nt_4x32b, ref_main_idx_4x32b, res_temp5_4x32b;
 1574|       |
 1575|  26.4k|    UWORD8 ref_temp[2 * MAX_CU_SIZE + 2];
 1576|  26.4k|    UWORD8 *ref_main;
 1577|  26.4k|    UNUSED(src_strd);
  ------------------
  |  |   38|  26.4k|#define UNUSED(x) ((void)(x))
  ------------------
 1578|       |
 1579|  26.4k|    inv_ang_sum = 128;
 1580|       |
 1581|  26.4k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1582|       |
 1583|  26.4k|    inv_ang = gai4_ihevc_inv_ang_table[mode - 11];
 1584|       |    /* Intermediate reference samples for negative angle modes */
 1585|       |    /* This have to be removed during optimization*/
 1586|       |
 1587|       |    /* For horizontal modes, (ref main = ref left) (ref side = ref above) */
 1588|       |
 1589|       |
 1590|  26.4k|    ref_main = ref_temp + 2 * nt;
 1591|   264k|    for(k = 0; k < (2 * (nt + 1)); k += 2)
  ------------------
  |  Branch (1591:16): [True: 237k, False: 26.4k]
  ------------------
 1592|   237k|    {
 1593|   237k|        ref_temp[k + (2 * (nt - 1))] = pu1_ref[(4 * nt) - k];
 1594|   237k|        ref_temp[k + 1 + (2 * (nt - 1))] = pu1_ref[(4 * nt) - k + 1];
 1595|   237k|    }
 1596|       |
 1597|  26.4k|    ref_main = ref_temp + (2 * (nt - 1));
 1598|  26.4k|    ref_idx = (nt * intra_pred_ang) >> 5;
 1599|       |
 1600|       |    /* SIMD Optimization can be done using look-up table for the loop */
 1601|       |    /* For negative angled derive the main reference samples from side */
 1602|       |    /* reference samples refer to section 8.4.4.2.6 */
 1603|       |
 1604|   106k|    for(k = -2; k > (2 * ref_idx); k -= 2)
  ------------------
  |  Branch (1604:17): [True: 80.4k, False: 26.4k]
  ------------------
 1605|  80.4k|    {
 1606|  80.4k|        inv_ang_sum += inv_ang;
 1607|  80.4k|        ref_main[k] = pu1_ref[(4 * nt) + ((inv_ang_sum >> 8) << 1)];
 1608|  80.4k|        ref_main[k + 1] = pu1_ref[((4 * nt) + 1) + ((inv_ang_sum >> 8) << 1)];
 1609|  80.4k|    }
 1610|       |
 1611|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1612|       |    /* samples dependent on distance to obtain destination sample */
 1613|       |
 1614|  26.4k|    const_temp_4x32b  = _mm_set1_epi16(16);
 1615|  26.4k|    const_temp2_4x32b = _mm_set1_epi32(31);
 1616|  26.4k|    const_temp3_4x32b = _mm_set1_epi16(32);
 1617|  26.4k|    const_temp4_4x32b = _mm_set1_epi32(4);
 1618|       |
 1619|  26.4k|    two_nt_4x32b = _mm_set1_epi32(1);
 1620|       |
 1621|  26.4k|    zero_8x16b = _mm_set1_epi16(0);
 1622|       |
 1623|       |
 1624|       |    /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 1625|  26.4k|    intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 1626|       |
 1627|  26.4k|    row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 1628|       |
 1629|  26.4k|    if(nt == 4)
  ------------------
  |  Branch (1629:8): [True: 12.0k, False: 14.4k]
  ------------------
 1630|  12.0k|    {
 1631|  12.0k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 1632|  12.0k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 1633|  12.0k|        const_temp2_4x32b = _mm_set1_epi16(31);
 1634|  12.0k|        const_temp4_4x32b = _mm_set1_epi16(4);
 1635|  12.0k|        two_nt_4x32b = _mm_set1_epi16(1);
 1636|       |
 1637|  12.0k|        {
 1638|  12.0k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 1639|  12.0k|            WORD8  ai1_fract_temp_val[16], ai1_src_temp_val[16];
 1640|       |
 1641|  12.0k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract4_8x16b;
 1642|  12.0k|            __m128i src_values10;
 1643|       |
 1644|  12.0k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1645|       |
 1646|       |            /* pos = ((row + 1) * intra_pred_ang); */
 1647|  12.0k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 1648|       |
 1649|       |            /* fract = pos & (31); */
 1650|  12.0k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1651|       |
 1652|  12.0k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 1653|  12.0k|            ref_main_idx_4x32b = _mm_add_epi16(ref_main_idx_4x32b, ref_main_idx_4x32b);
 1654|       |
 1655|  12.0k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 1656|       |
 1657|       |            /*(32 - fract) */
 1658|  12.0k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 1659|       |
 1660|  12.0k|            _mm_storel_epi64((__m128i *)(ai1_fract_temp_val), fract_4x32b);
 1661|  12.0k|            _mm_storel_epi64((__m128i *)(ai1_src_temp_val),  src_values10);
 1662|       |
 1663|  12.0k|            fract1_8x16b = _mm_set1_epi8(ai1_fract_temp_val[0]);  /* col=0*/
 1664|  12.0k|            fract2_8x16b = _mm_set1_epi8(ai1_fract_temp_val[2]);  /* col=1*/
 1665|  12.0k|            fract3_8x16b = _mm_set1_epi8(ai1_fract_temp_val[4]);  /* col=2*/
 1666|  12.0k|            fract4_8x16b = _mm_set1_epi8(ai1_fract_temp_val[6]);  /* col=3*/
 1667|       |
 1668|  12.0k|            temp1_8x16b = _mm_set1_epi8(ai1_src_temp_val[0]);  /* col=0*/
 1669|  12.0k|            temp2_8x16b = _mm_set1_epi8(ai1_src_temp_val[2]);  /* col=1*/
 1670|  12.0k|            temp3_8x16b = _mm_set1_epi8(ai1_src_temp_val[4]);  /* col=2*/
 1671|  12.0k|            temp4_8x16b = _mm_set1_epi8(ai1_src_temp_val[6]);  /* col=3*/
 1672|       |
 1673|  12.0k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 1674|  12.0k|            temp2_8x16b = _mm_unpacklo_epi8(temp2_8x16b, fract2_8x16b);
 1675|  12.0k|            temp3_8x16b = _mm_unpacklo_epi8(temp3_8x16b, fract3_8x16b);
 1676|  12.0k|            temp4_8x16b = _mm_unpacklo_epi8(temp4_8x16b, fract4_8x16b);
 1677|       |
 1678|  12.0k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 1679|  12.0k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 1680|  12.0k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 1681|  12.0k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 1682|       |
 1683|  12.0k|            {
 1684|  12.0k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1685|  12.0k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1686|       |
 1687|       |                /* loding 8-bit 16 pixels */
 1688|  12.0k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1)); /* col=0*/
 1689|  12.0k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2)); /* col=1*/
 1690|  12.0k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3)); /* col=2*/
 1691|  12.0k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4)); /* col=3*/
 1692|       |
 1693|  12.0k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 2); /* col=0*/
 1694|  12.0k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 2); /* col=1*/
 1695|  12.0k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 2); /* col=2*/
 1696|  12.0k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 2); /* col=3*/
 1697|       |
 1698|  12.0k|                src_temp1_8x16b =  _mm_unpacklo_epi8(src_temp5_8x16b, src_temp1_8x16b); /* col=0*/
 1699|  12.0k|                src_temp2_8x16b =  _mm_unpacklo_epi8(src_temp6_8x16b, src_temp2_8x16b); /* col=1*/
 1700|  12.0k|                src_temp3_8x16b =  _mm_unpacklo_epi8(src_temp7_8x16b, src_temp3_8x16b); /* col=2*/
 1701|  12.0k|                src_temp4_8x16b =  _mm_unpacklo_epi8(src_temp8_8x16b, src_temp4_8x16b); /* col=3*/
 1702|       |
 1703|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1704|  12.0k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1705|  12.0k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1706|  12.0k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1707|  12.0k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1708|       |
 1709|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1710|  12.0k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1711|  12.0k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1712|  12.0k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1713|  12.0k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1714|       |
 1715|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1716|  12.0k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1717|  12.0k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1718|  12.0k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1719|  12.0k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1720|       |
 1721|       |                /* converting 16 bit to 8 bit */
 1722|  12.0k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, zero_8x16b); /* col=0*/
 1723|  12.0k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, zero_8x16b); /* col=1*/
 1724|  12.0k|                src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, zero_8x16b); /* col=2*/
 1725|  12.0k|                src_temp4_8x16b = _mm_packus_epi16(src_temp4_8x16b, zero_8x16b); /* col=3*/
 1726|       |
 1727|  12.0k|                src_temp5_8x16b = _mm_unpacklo_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1728|  12.0k|                src_temp6_8x16b = _mm_unpacklo_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1729|       |
 1730|  12.0k|                src_temp8_8x16b = _mm_unpacklo_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1731|  12.0k|                src_temp7_8x16b = _mm_unpackhi_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1732|       |
 1733|  12.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 0)), src_temp8_8x16b);             /* row=0*/
 1734|       |
 1735|  12.0k|                src_temp2_8x16b  = _mm_shuffle_epi32(src_temp8_8x16b, _MM_SHUFFLE(3, 2, 3, 2));
 1736|  12.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (1))), src_temp2_8x16b);       /* row=1*/
 1737|       |
 1738|  12.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (2))), src_temp7_8x16b);       /* row=2*/
 1739|       |
 1740|  12.0k|                src_temp4_8x16b  = _mm_shuffle_epi32(src_temp7_8x16b, _MM_SHUFFLE(3, 2, 3, 2));
 1741|  12.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (3))), src_temp4_8x16b);       /* row=4*/
 1742|       |
 1743|  12.0k|            }
 1744|  12.0k|        }
 1745|  12.0k|    }
 1746|  14.4k|    else
 1747|  14.4k|    {
 1748|  14.4k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 1749|  14.4k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 1750|  14.4k|        const_temp2_4x32b = _mm_set1_epi16(31);
 1751|  14.4k|        const_temp4_4x32b = _mm_set1_epi16(8);
 1752|  14.4k|        two_nt_4x32b = _mm_set1_epi16(1);
 1753|       |
 1754|  34.8k|        for(col = 0; col < 2 * nt; col += 16)
  ------------------
  |  Branch (1754:22): [True: 20.3k, False: 14.4k]
  ------------------
 1755|  20.3k|        {
 1756|  20.3k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 1757|  20.3k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 1758|  20.3k|            WORD8  ai1_fract_temp_val[16], ai1_src_temp_val[16];
 1759|       |
 1760|  20.3k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract4_8x16b;
 1761|  20.3k|            __m128i fract5_8x16b, fract6_8x16b, fract7_8x16b, fract8_8x16b, src_values10;
 1762|       |
 1763|  20.3k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1764|  20.3k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 1765|       |
 1766|       |            /* pos = ((row + 1) * intra_pred_ang); */
 1767|  20.3k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 1768|       |
 1769|       |            /* fract = pos & (31); */
 1770|  20.3k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1771|       |
 1772|  20.3k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 1773|  20.3k|            ref_main_idx_4x32b = _mm_add_epi16(ref_main_idx_4x32b, ref_main_idx_4x32b);
 1774|       |
 1775|  20.3k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 1776|       |
 1777|       |            /*(32 - fract) */
 1778|  20.3k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 1779|       |
 1780|  20.3k|            _mm_storeu_si128((__m128i *)(ai1_fract_temp_val), fract_4x32b);
 1781|  20.3k|            _mm_storeu_si128((__m128i *)(ai1_src_temp_val),  src_values10);
 1782|       |
 1783|  20.3k|            fract1_8x16b = _mm_set1_epi8(ai1_fract_temp_val[0]);  /* col=0*/
 1784|  20.3k|            fract2_8x16b = _mm_set1_epi8(ai1_fract_temp_val[2]);  /* col=1*/
 1785|  20.3k|            fract3_8x16b = _mm_set1_epi8(ai1_fract_temp_val[4]);  /* col=2*/
 1786|  20.3k|            fract4_8x16b = _mm_set1_epi8(ai1_fract_temp_val[6]);  /* col=3*/
 1787|       |
 1788|  20.3k|            temp1_8x16b = _mm_set1_epi8(ai1_src_temp_val[0]);  /* col=0*/
 1789|  20.3k|            temp2_8x16b = _mm_set1_epi8(ai1_src_temp_val[2]);  /* col=1*/
 1790|  20.3k|            temp3_8x16b = _mm_set1_epi8(ai1_src_temp_val[4]);  /* col=2*/
 1791|  20.3k|            temp4_8x16b = _mm_set1_epi8(ai1_src_temp_val[6]);  /* col=3*/
 1792|       |
 1793|  20.3k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 1794|  20.3k|            temp2_8x16b = _mm_unpacklo_epi8(temp2_8x16b, fract2_8x16b);
 1795|  20.3k|            temp3_8x16b = _mm_unpacklo_epi8(temp3_8x16b, fract3_8x16b);
 1796|  20.3k|            temp4_8x16b = _mm_unpacklo_epi8(temp4_8x16b, fract4_8x16b);
 1797|       |
 1798|  20.3k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 1799|  20.3k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 1800|  20.3k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 1801|  20.3k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 1802|       |
 1803|  20.3k|            fract5_8x16b = _mm_set1_epi8(ai1_fract_temp_val[8]);  /* col=5*/
 1804|  20.3k|            fract6_8x16b = _mm_set1_epi8(ai1_fract_temp_val[10]);  /* col=6*/
 1805|  20.3k|            fract7_8x16b = _mm_set1_epi8(ai1_fract_temp_val[12]);  /* col=7*/
 1806|  20.3k|            fract8_8x16b = _mm_set1_epi8(ai1_fract_temp_val[14]);  /* col=8*/
 1807|       |
 1808|  20.3k|            temp11_8x16b = _mm_set1_epi8(ai1_src_temp_val[8]);  /* col=0*/
 1809|  20.3k|            temp12_8x16b = _mm_set1_epi8(ai1_src_temp_val[10]);  /* col=1*/
 1810|  20.3k|            temp13_8x16b = _mm_set1_epi8(ai1_src_temp_val[12]);  /* col=2*/
 1811|  20.3k|            temp14_8x16b = _mm_set1_epi8(ai1_src_temp_val[14]);  /* col=3*/
 1812|       |
 1813|  20.3k|            temp11_8x16b = _mm_unpacklo_epi8(temp11_8x16b, fract5_8x16b);
 1814|  20.3k|            temp12_8x16b = _mm_unpacklo_epi8(temp12_8x16b, fract6_8x16b);
 1815|  20.3k|            temp13_8x16b = _mm_unpacklo_epi8(temp13_8x16b, fract7_8x16b);
 1816|  20.3k|            temp14_8x16b = _mm_unpacklo_epi8(temp14_8x16b, fract8_8x16b);
 1817|       |
 1818|  20.3k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 1819|  20.3k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 1820|  20.3k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 1821|  20.3k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 1822|       |
 1823|  84.9k|            for(row = 0; row < nt; row += 4)
  ------------------
  |  Branch (1823:26): [True: 64.5k, False: 20.3k]
  ------------------
 1824|  64.5k|            {
 1825|  64.5k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1826|  64.5k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1827|       |
 1828|  64.5k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 1829|  64.5k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 1830|       |
 1831|       |                /* loding 8-bit 16 pixels */
 1832|  64.5k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1 + row + row)); /* col=0*/
 1833|  64.5k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2 + row + row)); /* col=1*/
 1834|  64.5k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3 + row + row)); /* col=2*/
 1835|  64.5k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4 + row + row)); /* col=3*/
 1836|       |
 1837|  64.5k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 2); /* col=0*/
 1838|  64.5k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 2); /* col=1*/
 1839|  64.5k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 2); /* col=2*/
 1840|  64.5k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 2); /* col=3*/
 1841|       |
 1842|  64.5k|                src_temp1_8x16b =  _mm_unpacklo_epi8(src_temp5_8x16b, src_temp1_8x16b); /* col=0*/
 1843|  64.5k|                src_temp2_8x16b =  _mm_unpacklo_epi8(src_temp6_8x16b, src_temp2_8x16b); /* col=1*/
 1844|  64.5k|                src_temp3_8x16b =  _mm_unpacklo_epi8(src_temp7_8x16b, src_temp3_8x16b); /* col=2*/
 1845|  64.5k|                src_temp4_8x16b =  _mm_unpacklo_epi8(src_temp8_8x16b, src_temp4_8x16b); /* col=3*/
 1846|       |
 1847|       |                /* loding 8-bit 16 pixels */
 1848|  64.5k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5 + row + row)); /* col=5*/
 1849|  64.5k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6 + row + row)); /* col=6*/
 1850|  64.5k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7 + row + row)); /* col=7*/
 1851|  64.5k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8 + row + row)); /* col=8*/
 1852|       |
 1853|  64.5k|                src_temp11_8x16b = _mm_srli_si128(src_temp15_8x16b, 2); /* col=5*/
 1854|  64.5k|                src_temp12_8x16b = _mm_srli_si128(src_temp16_8x16b, 2); /* col=6*/
 1855|  64.5k|                src_temp13_8x16b = _mm_srli_si128(src_temp17_8x16b, 2); /* col=7*/
 1856|  64.5k|                src_temp14_8x16b = _mm_srli_si128(src_temp18_8x16b, 2); /* col=8*/
 1857|       |
 1858|  64.5k|                src_temp11_8x16b =  _mm_unpacklo_epi8(src_temp15_8x16b, src_temp11_8x16b); /* col=0*/
 1859|  64.5k|                src_temp12_8x16b =  _mm_unpacklo_epi8(src_temp16_8x16b, src_temp12_8x16b); /* col=1*/
 1860|  64.5k|                src_temp13_8x16b =  _mm_unpacklo_epi8(src_temp17_8x16b, src_temp13_8x16b); /* col=2*/
 1861|  64.5k|                src_temp14_8x16b =  _mm_unpacklo_epi8(src_temp18_8x16b, src_temp14_8x16b); /* col=3*/
 1862|       |
 1863|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1864|  64.5k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1865|  64.5k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1866|  64.5k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1867|  64.5k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1868|       |
 1869|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1870|  64.5k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 1871|  64.5k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 1872|  64.5k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 1873|  64.5k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 1874|       |
 1875|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1876|  64.5k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1877|  64.5k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1878|  64.5k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1879|  64.5k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1880|       |
 1881|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1882|  64.5k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1883|  64.5k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1884|  64.5k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1885|  64.5k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1886|       |
 1887|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1888|  64.5k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 1889|  64.5k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 1890|  64.5k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 1891|  64.5k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 1892|       |
 1893|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1894|  64.5k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 1895|  64.5k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 1896|  64.5k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 1897|  64.5k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 1898|       |
 1899|       |                /* converting 16 bit to 8 bit */
 1900|  64.5k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, zero_8x16b); /* col=0*/
 1901|  64.5k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, zero_8x16b); /* col=1*/
 1902|  64.5k|                src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, zero_8x16b); /* col=2*/
 1903|  64.5k|                src_temp4_8x16b = _mm_packus_epi16(src_temp4_8x16b, zero_8x16b); /* col=3*/
 1904|       |
 1905|       |                /* converting 16 bit to 8 bit */
 1906|  64.5k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, zero_8x16b); /* col=5*/
 1907|  64.5k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, zero_8x16b); /* col=6*/
 1908|  64.5k|                src_temp13_8x16b = _mm_packus_epi16(src_temp13_8x16b, zero_8x16b); /* col=7*/
 1909|  64.5k|                src_temp14_8x16b = _mm_packus_epi16(src_temp14_8x16b, zero_8x16b); /* col=8*/
 1910|       |
 1911|  64.5k|                src_temp5_8x16b = _mm_unpacklo_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1912|  64.5k|                src_temp6_8x16b = _mm_unpacklo_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1913|       |
 1914|  64.5k|                src_temp8_8x16b = _mm_unpacklo_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1915|  64.5k|                src_temp7_8x16b = _mm_unpackhi_epi32(src_temp5_8x16b, src_temp6_8x16b);
 1916|       |
 1917|  64.5k|                src_temp15_8x16b = _mm_unpacklo_epi16(src_temp11_8x16b, src_temp12_8x16b);
 1918|  64.5k|                src_temp16_8x16b = _mm_unpacklo_epi16(src_temp13_8x16b, src_temp14_8x16b);
 1919|       |
 1920|  64.5k|                src_temp18_8x16b = _mm_unpacklo_epi32(src_temp15_8x16b, src_temp16_8x16b);
 1921|  64.5k|                src_temp17_8x16b = _mm_unpackhi_epi32(src_temp15_8x16b, src_temp16_8x16b);
 1922|       |
 1923|  64.5k|                src_temp11_8x16b = _mm_unpacklo_epi64(src_temp8_8x16b, src_temp18_8x16b);
 1924|  64.5k|                src_temp12_8x16b = _mm_unpackhi_epi64(src_temp8_8x16b, src_temp18_8x16b);
 1925|  64.5k|                src_temp13_8x16b = _mm_unpacklo_epi64(src_temp7_8x16b, src_temp17_8x16b);
 1926|  64.5k|                src_temp14_8x16b = _mm_unpackhi_epi64(src_temp7_8x16b, src_temp17_8x16b);
 1927|       |
 1928|  64.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * row)),    src_temp11_8x16b);          /* row=0*/
 1929|  64.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp12_8x16b);       /* row=1*/
 1930|  64.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp13_8x16b);       /* row=2*/
 1931|  64.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp14_8x16b);       /* row=4*/
 1932|       |
 1933|  64.5k|            }
 1934|  20.3k|        }
 1935|  14.4k|    }
 1936|  26.4k|}
ihevc_intra_pred_chroma_mode_19_to_25_ssse3:
 1981|  26.3k|{
 1982|  26.3k|    WORD32 row, k;
 1983|  26.3k|    WORD32 intra_pred_ang, idx;
 1984|  26.3k|    WORD32 inv_ang, inv_ang_sum, pos, fract;
 1985|  26.3k|    WORD32 ref_main_idx, ref_idx;
 1986|  26.3k|    UWORD8 ref_temp[(2 * MAX_CU_SIZE) + 2];
 1987|  26.3k|    UWORD8 *ref_main;
 1988|       |
 1989|  26.3k|    __m128i zero_8x16b, fract_8x16b, const_temp_8x16b;
 1990|  26.3k|    UNUSED(src_strd);
  ------------------
  |  |   38|  26.3k|#define UNUSED(x) ((void)(x))
  ------------------
 1991|       |
 1992|  26.3k|    intra_pred_ang = gai4_ihevc_ang_table_chroma[mode];
 1993|  26.3k|    inv_ang = gai4_ihevc_inv_ang_table_chroma[mode - 12];
 1994|       |
 1995|       |    /* Intermediate reference samples for negative angle modes */
 1996|       |    /* This have to be removed during optimization*/
 1997|       |    /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 1998|  26.3k|    ref_main = ref_temp + 2 * nt;
 1999|   243k|    for(k = 0; k < (2 * (nt + 1)); k += 2)
  ------------------
  |  Branch (1999:16): [True: 217k, False: 26.3k]
  ------------------
 2000|   217k|    {
 2001|   217k|        ref_temp[k + (2 * (nt - 1))] = pu1_ref[(4 * nt) + k];
 2002|   217k|        ref_temp[k + 1 + (2 * (nt - 1))] = pu1_ref[(4 * nt) + k + 1];
 2003|   217k|    }
 2004|       |
 2005|  26.3k|    ref_idx = (nt * intra_pred_ang) >> 5;
 2006|  26.3k|    inv_ang_sum = 128;
 2007|  26.3k|    ref_main = ref_temp + (2 * (nt - 1));
 2008|       |    /* SIMD Optimization can be done using look-up table for the loop */
 2009|       |    /* For negative angled derive the main reference samples from side */
 2010|       |    /*  reference samples refer to section 8.4.4.2.6 */
 2011|  91.8k|    for(k = -2; k > (2 * ref_idx); k -= 2)
  ------------------
  |  Branch (2011:17): [True: 65.5k, False: 26.3k]
  ------------------
 2012|  65.5k|    {
 2013|  65.5k|        inv_ang_sum += inv_ang;
 2014|  65.5k|        ref_main[k] = pu1_ref[(4 * nt) - (inv_ang_sum >> 8) * 2];
 2015|  65.5k|        ref_main[k + 1] = pu1_ref[((4 * nt) + 1) - (inv_ang_sum >> 8) * 2];
 2016|  65.5k|    }
 2017|       |
 2018|  26.3k|    const_temp_8x16b = _mm_set1_epi16(16);
 2019|       |
 2020|  26.3k|    if(nt == 4) /* if nt =4*/
  ------------------
  |  Branch (2020:8): [True: 12.8k, False: 13.4k]
  ------------------
 2021|  12.8k|    {
 2022|  12.8k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 2023|  12.8k|        __m128i src_values10, src_values11, zero_8x16b, intra_pred_ang_4x32b;
 2024|  12.8k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 2025|       |
 2026|       |
 2027|  12.8k|        const_temp2_4x32b = _mm_set1_epi32(31);
 2028|  12.8k|        const_temp3_4x32b = _mm_set1_epi32(32);
 2029|       |
 2030|  12.8k|        two_nt_4x32b = _mm_set1_epi32(2);
 2031|       |
 2032|  12.8k|        zero_8x16b = _mm_set1_epi16(0);
 2033|       |
 2034|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 2035|  12.8k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2036|       |
 2037|  12.8k|        row_4x32b = _mm_set_epi16(4, 3, 2, 1, 4, 3, 2, 1);
 2038|  12.8k|        {
 2039|  12.8k|            WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 2040|  12.8k|            WORD8  ai1_src_temp0_val[16], ai1_src_temp1_val[16];
 2041|       |
 2042|  12.8k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract4_8x16b, res_temp5_4x32b;
 2043|  12.8k|            __m128i src_values0, src_values1, src_values2, src_values3, src_values13;
 2044|  12.8k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2045|  12.8k|            __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2, sign_8x16b;
 2046|       |
 2047|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2048|  12.8k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2049|  12.8k|            sign_8x16b      = _mm_cmpgt_epi16(zero_8x16b, res_temp5_4x32b);
 2050|  12.8k|            res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, sign_8x16b);
 2051|       |
 2052|  12.8k|            src_values12 = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 2053|  12.8k|            src_values12 = _mm_add_epi32(src_values12, _mm_srai_epi32(res_temp5_4x32b,  5));
 2054|       |
 2055|  12.8k|            ref_main_temp0 = _mm_srli_si128(src_values12, 4);  /* next 32 bit values */
 2056|  12.8k|            ref_main_temp1 = _mm_srli_si128(src_values12, 8);  /* next 32 bit values */
 2057|  12.8k|            ref_main_temp2 = _mm_srli_si128(src_values12, 12); /* next 32 bit values */
 2058|  12.8k|            ref_main_idx1  = _mm_cvtsi128_si32(src_values12);    /* row=0*/
 2059|  12.8k|            ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* row=1*/
 2060|  12.8k|            ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* row=2*/
 2061|  12.8k|            ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* row=3*/
 2062|       |
 2063|       |            /* fract = pos & (31); */
 2064|  12.8k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2065|       |
 2066|       |            /*(32 - fract) */
 2067|  12.8k|            src_values10 = _mm_sub_epi32(const_temp3_4x32b, src_values11);
 2068|       |
 2069|  12.8k|            _mm_storeu_si128((__m128i *)(ai1_src_temp1_val), src_values11);
 2070|  12.8k|            _mm_storeu_si128((__m128i *)(ai1_src_temp0_val), src_values10);
 2071|       |
 2072|  12.8k|            fract1_8x16b = _mm_set1_epi8(ai1_src_temp1_val[0]);  /* row=0*/
 2073|  12.8k|            fract2_8x16b = _mm_set1_epi8(ai1_src_temp1_val[4]);  /* row=1*/
 2074|  12.8k|            fract3_8x16b = _mm_set1_epi8(ai1_src_temp1_val[8]);  /* row=2*/
 2075|  12.8k|            fract4_8x16b = _mm_set1_epi8(ai1_src_temp1_val[12]);  /* row=3*/
 2076|       |
 2077|  12.8k|            temp1_8x16b = _mm_set1_epi8(ai1_src_temp0_val[0]);  /* row=0*/
 2078|  12.8k|            temp2_8x16b = _mm_set1_epi8(ai1_src_temp0_val[4]);  /* row=1*/
 2079|  12.8k|            temp3_8x16b = _mm_set1_epi8(ai1_src_temp0_val[8]);  /* row=2*/
 2080|  12.8k|            temp4_8x16b = _mm_set1_epi8(ai1_src_temp0_val[12]);  /* row=3*/
 2081|       |
 2082|  12.8k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 2083|  12.8k|            temp2_8x16b = _mm_unpacklo_epi8(temp2_8x16b, fract2_8x16b);
 2084|  12.8k|            temp3_8x16b = _mm_unpacklo_epi8(temp3_8x16b, fract3_8x16b);
 2085|  12.8k|            temp4_8x16b = _mm_unpacklo_epi8(temp4_8x16b, fract4_8x16b);
 2086|       |
 2087|       |// inner loop starts from here
 2088|  12.8k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1));  /* col = 0-7   */
 2089|  12.8k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx2));  /* col = 8-15  */
 2090|  12.8k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx3));  /* col = 16-23 */
 2091|  12.8k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx4));  /* col = 24-31 */
 2092|       |
 2093|  12.8k|            src_values10 = _mm_srli_si128(src_values0, 2);
 2094|  12.8k|            src_values11 = _mm_srli_si128(src_values1, 2);
 2095|  12.8k|            src_values12 = _mm_srli_si128(src_values2, 2);
 2096|  12.8k|            src_values13 = _mm_srli_si128(src_values3, 2);
 2097|       |
 2098|  12.8k|            src_values0 = _mm_unpacklo_epi8(src_values0, src_values10);
 2099|  12.8k|            src_values1 = _mm_unpacklo_epi8(src_values1, src_values11);
 2100|  12.8k|            src_values2 = _mm_unpacklo_epi8(src_values2, src_values12);
 2101|  12.8k|            src_values3 = _mm_unpacklo_epi8(src_values3, src_values13);
 2102|       |
 2103|  12.8k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1_8x16b);
 2104|  12.8k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2_8x16b);
 2105|  12.8k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3_8x16b);
 2106|  12.8k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4_8x16b);
 2107|       |
 2108|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2109|  12.8k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2110|  12.8k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2111|  12.8k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2112|  12.8k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2113|       |
 2114|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2115|  12.8k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 2116|  12.8k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 2117|  12.8k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 2118|  12.8k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 2119|       |
 2120|       |            /* converting 16 bit to 8 bit */
 2121|  12.8k|            src_values0 = _mm_packus_epi16(src_values0, zero_8x16b);
 2122|  12.8k|            src_values1 = _mm_packus_epi16(src_values1, zero_8x16b);
 2123|  12.8k|            src_values2 = _mm_packus_epi16(src_values2, zero_8x16b);
 2124|  12.8k|            src_values3 = _mm_packus_epi16(src_values3, zero_8x16b);
 2125|       |
 2126|  12.8k|            _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_values0);       /* row=0*/
 2127|  12.8k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((1) * dst_strd)), src_values1);   /* row=1*/
 2128|  12.8k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((2) * dst_strd)), src_values2);   /* row=2*/
 2129|  12.8k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((3) * dst_strd)), src_values3);   /* row=3*/
 2130|       |
 2131|  12.8k|        }
 2132|  12.8k|    }
 2133|  13.4k|    else if(nt == 8) /* for nt = 16 case */
  ------------------
  |  Branch (2133:13): [True: 9.60k, False: 3.88k]
  ------------------
 2134|  9.60k|    {
 2135|  9.60k|        WORD32 ref_main_idx1, fract1, temp, temp1;
 2136|  9.60k|        __m128i fract1_8x16b, temp_8x16b, temp1_8x16b;
 2137|       |
 2138|  9.60k|        zero_8x16b = _mm_set1_epi16(0);
 2139|       |
 2140|  48.0k|        for(row = 0; row < nt; row += 2)
  ------------------
  |  Branch (2140:22): [True: 38.4k, False: 9.60k]
  ------------------
 2141|  38.4k|        {
 2142|  38.4k|            __m128i src_values0, src_values1, src_values2, src_values3;
 2143|  38.4k|            __m128i  src_values10, src_values11, src_values12, src_values13;
 2144|       |
 2145|  38.4k|            pos = ((row + 1) * intra_pred_ang);
 2146|  38.4k|            idx = pos >> 5;
 2147|  38.4k|            fract = pos & (31);
 2148|  38.4k|            temp = 32 - fract;
 2149|  38.4k|            ref_main_idx = 2 * idx + 2; /* col from 0-15 */
 2150|       |
 2151|  38.4k|            pos = ((row + 2) * intra_pred_ang);
 2152|  38.4k|            idx = pos >> 5;
 2153|  38.4k|            fract1 = pos & (31);
 2154|  38.4k|            temp1 = 32 - fract1;
 2155|  38.4k|            ref_main_idx1 = 2 * idx + 2; /* col from 0-15 */
 2156|       |
 2157|  38.4k|            fract_8x16b  = _mm_set1_epi8(fract);
 2158|  38.4k|            fract1_8x16b = _mm_set1_epi8(fract1);
 2159|  38.4k|            temp_8x16b   = _mm_set1_epi8(temp);
 2160|  38.4k|            temp1_8x16b  = _mm_set1_epi8(temp1);
 2161|       |
 2162|  38.4k|            temp_8x16b = _mm_unpacklo_epi8(temp_8x16b, fract_8x16b);
 2163|  38.4k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 2164|       |
 2165|       |            /* row=0 */
 2166|  38.4k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx));     /* col = 0-7   */
 2167|  38.4k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx + 8));   /* col = 8-15  */
 2168|       |
 2169|       |            /* row=1 */
 2170|  38.4k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1));   /* col = 0-7  */
 2171|  38.4k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1 + 8));  /* col = 8-15 */
 2172|       |
 2173|  38.4k|            src_values10 = _mm_srli_si128(src_values0, 2);
 2174|  38.4k|            src_values11 = _mm_srli_si128(src_values1, 2);
 2175|  38.4k|            src_values12 = _mm_srli_si128(src_values2, 2);
 2176|  38.4k|            src_values13 = _mm_srli_si128(src_values3, 2);
 2177|       |
 2178|  38.4k|            src_values0 = _mm_unpacklo_epi8(src_values0, src_values10);
 2179|  38.4k|            src_values1 = _mm_unpacklo_epi8(src_values1, src_values11);
 2180|  38.4k|            src_values2 = _mm_unpacklo_epi8(src_values2, src_values12);
 2181|  38.4k|            src_values3 = _mm_unpacklo_epi8(src_values3, src_values13);
 2182|       |
 2183|  38.4k|            src_values0 = _mm_maddubs_epi16(src_values0, temp_8x16b);
 2184|  38.4k|            src_values1 = _mm_maddubs_epi16(src_values1, temp_8x16b);
 2185|       |
 2186|  38.4k|            src_values2 = _mm_maddubs_epi16(src_values2, temp1_8x16b);
 2187|  38.4k|            src_values3 = _mm_maddubs_epi16(src_values3, temp1_8x16b);
 2188|       |
 2189|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2190|  38.4k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2191|  38.4k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2192|       |
 2193|  38.4k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2194|  38.4k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2195|       |
 2196|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2197|  38.4k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 2198|  38.4k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 2199|       |
 2200|  38.4k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 2201|  38.4k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 2202|       |
 2203|       |            /* converting 16 bit to 8 bit */
 2204|  38.4k|            src_values0 = _mm_packus_epi16(src_values0, zero_8x16b);
 2205|  38.4k|            src_values1 = _mm_packus_epi16(src_values1, zero_8x16b);
 2206|       |
 2207|  38.4k|            src_values2 = _mm_packus_epi16(src_values2, zero_8x16b);
 2208|  38.4k|            src_values3 = _mm_packus_epi16(src_values3, zero_8x16b);
 2209|       |
 2210|       |            /* loding 8-bit 8 pixels values */
 2211|  38.4k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_values0);
 2212|  38.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 8), src_values1);
 2213|       |
 2214|  38.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), src_values2);
 2215|  38.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + 8), src_values3);
 2216|       |
 2217|  38.4k|            pu1_dst += 2 * dst_strd;
 2218|  38.4k|        }
 2219|  9.60k|    }
 2220|  3.88k|    else if(nt == 16)
  ------------------
  |  Branch (2220:13): [True: 3.93k, False: 18.4E]
  ------------------
 2221|  3.93k|    {
 2222|  3.93k|        WORD32 temp;
 2223|       |        /* unroll the col loop (inner) */
 2224|  3.93k|        zero_8x16b = _mm_set1_epi16(0);
 2225|       |
 2226|  66.7k|        for(row = 0; row < nt; row += 1)
  ------------------
  |  Branch (2226:22): [True: 62.7k, False: 3.93k]
  ------------------
 2227|  62.7k|        {
 2228|  62.7k|            __m128i  src_values0, src_values1, src_values2, src_values3, temp_8x16b;
 2229|  62.7k|            __m128i  src_values10, src_values11, src_values12, src_values13;
 2230|       |
 2231|  62.7k|            pos = ((row + 1) * intra_pred_ang);
 2232|  62.7k|            idx = pos >> 5;
 2233|  62.7k|            fract = pos & (31);
 2234|  62.7k|            temp = 32 - fract;
 2235|  62.7k|            ref_main_idx = 2 * idx + 2; /* col from 0-31 */
 2236|       |
 2237|  62.7k|            fract_8x16b = _mm_set1_epi8(fract);
 2238|  62.7k|            temp_8x16b  = _mm_set1_epi8(temp);
 2239|       |
 2240|  62.7k|            temp_8x16b = _mm_unpacklo_epi8(temp_8x16b, fract_8x16b);
 2241|       |
 2242|  62.7k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx));     /* col = 0-7   */
 2243|  62.7k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx + 8));   /* col = 8-15  */
 2244|  62.7k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx + 16));  /* col = 16-23 */
 2245|  62.7k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx + 24));  /* col = 24-31 */
 2246|       |
 2247|  62.7k|            src_values10 = _mm_srli_si128(src_values0, 2);
 2248|  62.7k|            src_values11 = _mm_srli_si128(src_values1, 2);
 2249|  62.7k|            src_values12 = _mm_srli_si128(src_values2, 2);
 2250|  62.7k|            src_values13 = _mm_srli_si128(src_values3, 2);
 2251|       |
 2252|  62.7k|            src_values0 = _mm_unpacklo_epi8(src_values0, src_values10);
 2253|  62.7k|            src_values1 = _mm_unpacklo_epi8(src_values1, src_values11);
 2254|  62.7k|            src_values2 = _mm_unpacklo_epi8(src_values2, src_values12);
 2255|  62.7k|            src_values3 = _mm_unpacklo_epi8(src_values3, src_values13);
 2256|       |
 2257|       |            /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2258|  62.7k|            src_values0 = _mm_maddubs_epi16(src_values0, temp_8x16b);
 2259|  62.7k|            src_values1 = _mm_maddubs_epi16(src_values1, temp_8x16b);
 2260|  62.7k|            src_values2 = _mm_maddubs_epi16(src_values2, temp_8x16b);
 2261|  62.7k|            src_values3 = _mm_maddubs_epi16(src_values3, temp_8x16b);
 2262|       |
 2263|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2264|  62.7k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2265|  62.7k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2266|  62.7k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2267|  62.7k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2268|       |
 2269|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2270|  62.7k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 2271|  62.7k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 2272|  62.7k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 2273|  62.7k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 2274|       |
 2275|       |            /* converting 16 bit to 8 bit */
 2276|  62.7k|            src_values0 = _mm_packus_epi16(src_values0, zero_8x16b);
 2277|  62.7k|            src_values1 = _mm_packus_epi16(src_values1, zero_8x16b);
 2278|  62.7k|            src_values2 = _mm_packus_epi16(src_values2, zero_8x16b);
 2279|  62.7k|            src_values3 = _mm_packus_epi16(src_values3, zero_8x16b);
 2280|       |
 2281|       |            /* loding 8-bit 8 pixels values */
 2282|  62.7k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_values0);
 2283|  62.7k|            _mm_storel_epi64((__m128i *)(pu1_dst + 8), src_values1);
 2284|  62.7k|            _mm_storel_epi64((__m128i *)(pu1_dst + 16), src_values2);
 2285|  62.7k|            _mm_storel_epi64((__m128i *)(pu1_dst + 24), src_values3);
 2286|       |
 2287|  62.7k|            pu1_dst += dst_strd;
 2288|       |
 2289|  62.7k|        }
 2290|  3.93k|    }
 2291|  26.3k|}
ihevc_intra_pred_chroma_mode_27_to_33_ssse3:
 2337|  30.1k|{
 2338|  30.1k|    WORD32 row;
 2339|  30.1k|    WORD32 pos, fract;
 2340|  30.1k|    WORD32 intra_pred_ang;
 2341|  30.1k|    WORD32 idx, ref_main_idx;
 2342|       |
 2343|  30.1k|    __m128i zero_8x16b, fract_8x16b, const_temp_8x16b;
 2344|  30.1k|    UNUSED(src_strd);
  ------------------
  |  |   38|  30.1k|#define UNUSED(x) ((void)(x))
  ------------------
 2345|       |
 2346|  30.1k|    intra_pred_ang = gai4_ihevc_ang_table_chroma[mode];
 2347|  30.1k|    const_temp_8x16b = _mm_set1_epi16(16);
 2348|       |
 2349|  30.1k|    if(nt == 4) /* if nt =4*/
  ------------------
  |  Branch (2349:8): [True: 13.9k, False: 16.1k]
  ------------------
 2350|  13.9k|    {
 2351|  13.9k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 2352|  13.9k|        __m128i src_values10, src_values11, zero_8x16b, intra_pred_ang_4x32b;
 2353|  13.9k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 2354|       |
 2355|  13.9k|        const_temp2_4x32b = _mm_set1_epi32(31);
 2356|  13.9k|        const_temp3_4x32b = _mm_set1_epi32(32);
 2357|       |
 2358|  13.9k|        two_nt_4x32b = _mm_set1_epi32((4 * nt) + 2);
 2359|       |
 2360|  13.9k|        zero_8x16b = _mm_set1_epi16(0);
 2361|       |
 2362|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 2363|  13.9k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2364|  13.9k|        row_4x32b = _mm_set_epi16(4, 3, 2, 1, 4, 3, 2, 1);
 2365|       |
 2366|  13.9k|        {
 2367|  13.9k|            WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 2368|  13.9k|            WORD8  ai1_src_temp0_val[16], ai1_src_temp1_val[16];
 2369|       |
 2370|  13.9k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract4_8x16b, res_temp5_4x32b;
 2371|  13.9k|            __m128i src_values0, src_values1, src_values2, src_values3, src_values13;
 2372|  13.9k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2373|  13.9k|            __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2, sign_8x16b;
 2374|       |
 2375|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2376|  13.9k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2377|  13.9k|            sign_8x16b      = _mm_cmpgt_epi16(zero_8x16b, res_temp5_4x32b);
 2378|  13.9k|            res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, sign_8x16b);
 2379|       |
 2380|  13.9k|            src_values12 = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 2381|  13.9k|            src_values12 = _mm_add_epi32(src_values12, _mm_srai_epi32(res_temp5_4x32b,  5));
 2382|       |
 2383|  13.9k|            ref_main_temp0 = _mm_srli_si128(src_values12, 4);  /* next 32 bit values */
 2384|  13.9k|            ref_main_temp1 = _mm_srli_si128(src_values12, 8);  /* next 32 bit values */
 2385|  13.9k|            ref_main_temp2 = _mm_srli_si128(src_values12, 12); /* next 32 bit values */
 2386|  13.9k|            ref_main_idx1  = _mm_cvtsi128_si32(src_values12);    /* row=0*/
 2387|  13.9k|            ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* row=1*/
 2388|  13.9k|            ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* row=2*/
 2389|  13.9k|            ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* row=3*/
 2390|       |
 2391|       |            /* fract = pos & (31); */
 2392|  13.9k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2393|       |
 2394|       |            /*(32 - fract) */
 2395|  13.9k|            src_values10 = _mm_sub_epi32(const_temp3_4x32b, src_values11);
 2396|       |
 2397|  13.9k|            _mm_storeu_si128((__m128i *)(ai1_src_temp1_val), src_values11);
 2398|  13.9k|            _mm_storeu_si128((__m128i *)(ai1_src_temp0_val), src_values10);
 2399|       |
 2400|  13.9k|            fract1_8x16b = _mm_set1_epi8(ai1_src_temp1_val[0]);  /* row=0*/
 2401|  13.9k|            fract2_8x16b = _mm_set1_epi8(ai1_src_temp1_val[4]);  /* row=1*/
 2402|  13.9k|            fract3_8x16b = _mm_set1_epi8(ai1_src_temp1_val[8]);  /* row=2*/
 2403|  13.9k|            fract4_8x16b = _mm_set1_epi8(ai1_src_temp1_val[12]);  /* row=3*/
 2404|       |
 2405|  13.9k|            temp1_8x16b = _mm_set1_epi8(ai1_src_temp0_val[0]);  /* row=0*/
 2406|  13.9k|            temp2_8x16b = _mm_set1_epi8(ai1_src_temp0_val[4]);  /* row=1*/
 2407|  13.9k|            temp3_8x16b = _mm_set1_epi8(ai1_src_temp0_val[8]);  /* row=2*/
 2408|  13.9k|            temp4_8x16b = _mm_set1_epi8(ai1_src_temp0_val[12]);  /* row=3*/
 2409|       |
 2410|  13.9k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 2411|  13.9k|            temp2_8x16b = _mm_unpacklo_epi8(temp2_8x16b, fract2_8x16b);
 2412|  13.9k|            temp3_8x16b = _mm_unpacklo_epi8(temp3_8x16b, fract3_8x16b);
 2413|  13.9k|            temp4_8x16b = _mm_unpacklo_epi8(temp4_8x16b, fract4_8x16b);
 2414|       |
 2415|       |// inner loop starts from here
 2416|  13.9k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1));  /* col = 0-7   */
 2417|  13.9k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx2));  /* col = 8-15  */
 2418|  13.9k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx3));  /* col = 16-23 */
 2419|  13.9k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx4));  /* col = 24-31 */
 2420|       |
 2421|  13.9k|            src_values10 = _mm_srli_si128(src_values0, 2);
 2422|  13.9k|            src_values11 = _mm_srli_si128(src_values1, 2);
 2423|  13.9k|            src_values12 = _mm_srli_si128(src_values2, 2);
 2424|  13.9k|            src_values13 = _mm_srli_si128(src_values3, 2);
 2425|       |
 2426|  13.9k|            src_values0 = _mm_unpacklo_epi8(src_values0, src_values10);
 2427|  13.9k|            src_values1 = _mm_unpacklo_epi8(src_values1, src_values11);
 2428|  13.9k|            src_values2 = _mm_unpacklo_epi8(src_values2, src_values12);
 2429|  13.9k|            src_values3 = _mm_unpacklo_epi8(src_values3, src_values13);
 2430|       |
 2431|  13.9k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1_8x16b);
 2432|  13.9k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2_8x16b);
 2433|  13.9k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3_8x16b);
 2434|  13.9k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4_8x16b);
 2435|       |
 2436|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2437|  13.9k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2438|  13.9k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2439|  13.9k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2440|  13.9k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2441|       |
 2442|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2443|  13.9k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 2444|  13.9k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 2445|  13.9k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 2446|  13.9k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 2447|       |
 2448|       |            /* converting 16 bit to 8 bit */
 2449|  13.9k|            src_values0 = _mm_packus_epi16(src_values0, zero_8x16b);
 2450|  13.9k|            src_values1 = _mm_packus_epi16(src_values1, zero_8x16b);
 2451|  13.9k|            src_values2 = _mm_packus_epi16(src_values2, zero_8x16b);
 2452|  13.9k|            src_values3 = _mm_packus_epi16(src_values3, zero_8x16b);
 2453|       |
 2454|  13.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_values0);       /* row=0*/
 2455|  13.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((1) * dst_strd)), src_values1);   /* row=1*/
 2456|  13.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((2) * dst_strd)), src_values2);   /* row=2*/
 2457|  13.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((3) * dst_strd)), src_values3);   /* row=3*/
 2458|       |
 2459|  13.9k|        }
 2460|  13.9k|    }
 2461|       |
 2462|  16.1k|    else if(nt == 8) /* for nt = 16 case */
  ------------------
  |  Branch (2462:13): [True: 11.8k, False: 4.36k]
  ------------------
 2463|  11.8k|    {
 2464|  11.8k|        WORD32 ref_main_idx1, fract1, temp, temp1;
 2465|  11.8k|        __m128i fract1_8x16b, temp_8x16b, temp1_8x16b;
 2466|       |
 2467|  11.8k|        zero_8x16b = _mm_set1_epi16(0);
 2468|       |
 2469|  59.1k|        for(row = 0; row < nt; row += 2)
  ------------------
  |  Branch (2469:22): [True: 47.2k, False: 11.8k]
  ------------------
 2470|  47.2k|        {
 2471|  47.2k|            __m128i src_values0, src_values1, src_values2, src_values3;
 2472|  47.2k|            __m128i  src_values10, src_values11, src_values12, src_values13;
 2473|       |
 2474|  47.2k|            pos = ((row + 1) * intra_pred_ang);
 2475|  47.2k|            idx = pos >> 5;
 2476|  47.2k|            fract = pos & (31);
 2477|  47.2k|            temp = 32 - fract;
 2478|  47.2k|            ref_main_idx = (4 * nt) + 2 * idx + 2; /* col from 0-15 */
 2479|       |
 2480|  47.2k|            pos = ((row + 2) * intra_pred_ang);
 2481|  47.2k|            idx = pos >> 5;
 2482|  47.2k|            fract1 = pos & (31);
 2483|  47.2k|            temp1 = 32 - fract1;
 2484|  47.2k|            ref_main_idx1 = (4 * nt) + 2 * idx + 2; /* col from 0-15 */
 2485|       |
 2486|  47.2k|            fract_8x16b  = _mm_set1_epi8(fract);
 2487|  47.2k|            fract1_8x16b = _mm_set1_epi8(fract1);
 2488|  47.2k|            temp_8x16b   = _mm_set1_epi8(temp);
 2489|  47.2k|            temp1_8x16b  = _mm_set1_epi8(temp1);
 2490|       |
 2491|  47.2k|            temp_8x16b = _mm_unpacklo_epi8(temp_8x16b, fract_8x16b);
 2492|  47.2k|            temp1_8x16b = _mm_unpacklo_epi8(temp1_8x16b, fract1_8x16b);
 2493|       |
 2494|       |            /* row=0 */
 2495|  47.2k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx));     /* col = 0-7   */
 2496|  47.2k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx + 8));   /* col = 8-15  */
 2497|       |
 2498|       |            /* row=1 */
 2499|  47.2k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1));    /* col = 0-7  */
 2500|  47.2k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1 + 8));  /* col = 8-15 */
 2501|       |
 2502|  47.2k|            src_values10 = _mm_srli_si128(src_values0, 2);
 2503|  47.2k|            src_values11 = _mm_srli_si128(src_values1, 2);
 2504|  47.2k|            src_values12 = _mm_srli_si128(src_values2, 2);
 2505|  47.2k|            src_values13 = _mm_srli_si128(src_values3, 2);
 2506|       |
 2507|  47.2k|            src_values0 = _mm_unpacklo_epi8(src_values0, src_values10);
 2508|  47.2k|            src_values1 = _mm_unpacklo_epi8(src_values1, src_values11);
 2509|  47.2k|            src_values2 = _mm_unpacklo_epi8(src_values2, src_values12);
 2510|  47.2k|            src_values3 = _mm_unpacklo_epi8(src_values3, src_values13);
 2511|       |
 2512|  47.2k|            src_values0 = _mm_maddubs_epi16(src_values0, temp_8x16b);
 2513|  47.2k|            src_values1 = _mm_maddubs_epi16(src_values1, temp_8x16b);
 2514|       |
 2515|  47.2k|            src_values2 = _mm_maddubs_epi16(src_values2, temp1_8x16b);
 2516|  47.2k|            src_values3 = _mm_maddubs_epi16(src_values3, temp1_8x16b);
 2517|       |
 2518|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2519|  47.2k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2520|  47.2k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2521|       |
 2522|  47.2k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2523|  47.2k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2524|       |
 2525|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2526|  47.2k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 2527|  47.2k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 2528|       |
 2529|  47.2k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 2530|  47.2k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 2531|       |
 2532|       |            /* converting 16 bit to 8 bit */
 2533|  47.2k|            src_values0 = _mm_packus_epi16(src_values0, zero_8x16b);
 2534|  47.2k|            src_values1 = _mm_packus_epi16(src_values1, zero_8x16b);
 2535|       |
 2536|  47.2k|            src_values2 = _mm_packus_epi16(src_values2, zero_8x16b);
 2537|  47.2k|            src_values3 = _mm_packus_epi16(src_values3, zero_8x16b);
 2538|       |
 2539|       |            /* loding 8-bit 8 pixels values */
 2540|  47.2k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_values0);
 2541|  47.2k|            _mm_storel_epi64((__m128i *)(pu1_dst + 8), src_values1);
 2542|       |
 2543|  47.2k|            _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), src_values2);
 2544|  47.2k|            _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + 8), src_values3);
 2545|       |
 2546|  47.2k|            pu1_dst += 2 * dst_strd;
 2547|  47.2k|        }
 2548|  11.8k|    }
 2549|  4.36k|    else if(nt == 16)
  ------------------
  |  Branch (2549:13): [True: 4.39k, False: 18.4E]
  ------------------
 2550|  4.39k|    {
 2551|  4.39k|        WORD32 temp;
 2552|       |        /* unroll the col loop (inner) */
 2553|  4.39k|        zero_8x16b = _mm_set1_epi16(0);
 2554|       |
 2555|  74.5k|        for(row = 0; row < nt; row += 1)
  ------------------
  |  Branch (2555:22): [True: 70.1k, False: 4.39k]
  ------------------
 2556|  70.1k|        {
 2557|  70.1k|            __m128i  src_values0, src_values1, src_values2, src_values3, temp_8x16b;
 2558|  70.1k|            __m128i  src_values10, src_values11, src_values12, src_values13;
 2559|       |
 2560|  70.1k|            pos = ((row + 1) * intra_pred_ang);
 2561|  70.1k|            idx = pos >> 5;
 2562|  70.1k|            fract = pos & (31);
 2563|  70.1k|            temp = 32 - fract;
 2564|  70.1k|            ref_main_idx = (4 * nt) + 2 * idx + 2; /* col from 0-31 */
 2565|       |
 2566|  70.1k|            fract_8x16b = _mm_set1_epi8(fract);
 2567|  70.1k|            temp_8x16b  = _mm_set1_epi8(temp);
 2568|       |
 2569|  70.1k|            temp_8x16b = _mm_unpacklo_epi8(temp_8x16b, fract_8x16b);
 2570|       |
 2571|  70.1k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx));     /* col = 0-7   */
 2572|  70.1k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx + 8));   /* col = 8-15  */
 2573|  70.1k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx + 16));  /* col = 16-23 */
 2574|  70.1k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx + 24));  /* col = 24-31 */
 2575|       |
 2576|  70.1k|            src_values10 = _mm_srli_si128(src_values0, 2);
 2577|  70.1k|            src_values11 = _mm_srli_si128(src_values1, 2);
 2578|  70.1k|            src_values12 = _mm_srli_si128(src_values2, 2);
 2579|  70.1k|            src_values13 = _mm_srli_si128(src_values3, 2);
 2580|       |
 2581|  70.1k|            src_values0 = _mm_unpacklo_epi8(src_values0, src_values10);
 2582|  70.1k|            src_values1 = _mm_unpacklo_epi8(src_values1, src_values11);
 2583|  70.1k|            src_values2 = _mm_unpacklo_epi8(src_values2, src_values12);
 2584|  70.1k|            src_values3 = _mm_unpacklo_epi8(src_values3, src_values13);
 2585|       |
 2586|       |            /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2587|  70.1k|            src_values0 = _mm_maddubs_epi16(src_values0, temp_8x16b);
 2588|  70.1k|            src_values1 = _mm_maddubs_epi16(src_values1, temp_8x16b);
 2589|  70.1k|            src_values2 = _mm_maddubs_epi16(src_values2, temp_8x16b);
 2590|  70.1k|            src_values3 = _mm_maddubs_epi16(src_values3, temp_8x16b);
 2591|       |
 2592|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2593|  70.1k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2594|  70.1k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2595|  70.1k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2596|  70.1k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2597|       |
 2598|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2599|  70.1k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 2600|  70.1k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 2601|  70.1k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 2602|  70.1k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 2603|       |
 2604|       |            /* converting 16 bit to 8 bit */
 2605|  70.1k|            src_values0 = _mm_packus_epi16(src_values0, zero_8x16b);
 2606|  70.1k|            src_values1 = _mm_packus_epi16(src_values1, zero_8x16b);
 2607|  70.1k|            src_values2 = _mm_packus_epi16(src_values2, zero_8x16b);
 2608|  70.1k|            src_values3 = _mm_packus_epi16(src_values3, zero_8x16b);
 2609|       |
 2610|       |            /* loding 8-bit 8 pixels values */
 2611|  70.1k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_values0);
 2612|  70.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + 8), src_values1);
 2613|  70.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + 16), src_values2);
 2614|  70.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + 24), src_values3);
 2615|       |
 2616|  70.1k|            pu1_dst += dst_strd;
 2617|       |
 2618|  70.1k|        }
 2619|  4.39k|    }
 2620|  30.1k|}

ihevc_deblk_luma_vert_ssse3:
  109|  4.19M|{
  110|  4.19M|    WORD32 qp_luma, beta_indx, tc_indx;
  111|  4.19M|    WORD32 beta, tc;
  112|  4.19M|    WORD32 d, dp, dq, d_sam0, d_sam3;
  113|       |
  114|  4.19M|    WORD32 d3, d0, de_0, de_1, de_2, de_3;
  115|  4.19M|    WORD32 de, dep, deq;
  116|  4.19M|    __m128i src_row0_8x16b, src_row1_8x16b, src_row2_8x16b, src_row3_8x16b;
  117|       |
  118|       |
  119|  4.19M|    {
  120|  4.19M|        __m128i src_tmp_8x16b, coef_8x16b, mask_d_result_4x32b, mask_de_result_8x16b;
  121|  4.19M|        __m128i mask_16x8b, temp_coef0_8x16b, temp_coef1_8x16b;
  122|       |
  123|       |
  124|       |
  125|  4.19M|        ASSERT((bs > 0) && (bs <= 3));
  ------------------
  |  |   55|  4.19M|#define ASSERT(x) assert((x))
  ------------------
  126|  4.21M|        ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  4.21M|#define ASSERT(x) assert((x))
  ------------------
  127|       |
  128|  4.22M|        qp_luma = (quant_param_p + quant_param_q + 1) >> 1;
  129|  4.22M|        beta_indx = CLIP3(qp_luma + (beta_offset_div2 << 1), 0, 51);
  ------------------
  |  |   40|  4.22M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.07M, False: 3.14M]
  |  |  |  Branch (40:53): [True: 21.8k, False: 3.12M]
  |  |  ------------------
  ------------------
  130|       |
  131|       |        /* BS based on implementation can take value 3 if it is intra/inter egde          */
  132|       |        /* based on BS, tc index is calcuated by adding 2 * ( bs - 1) to QP and tc_offset */
  133|       |        /* for BS = 1 adding factor is (0*2), BS = 2 or 3 adding factor is (1*2)          */
  134|       |        /* the above desired functionallity is achieved by doing (2*(bs>>1))              */
  135|       |
  136|  4.22M|        tc_indx = CLIP3(qp_luma + (2 * (bs >> 1)) + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  4.22M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 4.22M]
  |  |  |  Branch (40:53): [True: 0, False: 4.22M]
  |  |  ------------------
  ------------------
  137|       |
  138|  4.22M|        beta = gai4_ihevc_beta_table[beta_indx];
  139|  4.22M|        tc = gai4_ihevc_tc_table[tc_indx];
  140|  4.22M|        if(0 == tc)
  ------------------
  |  Branch (140:12): [True: 216k, False: 4.00M]
  ------------------
  141|   216k|        {
  142|   216k|            return;
  143|   216k|        }
  144|  4.00M|        src_row0_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src - 4));
  145|  4.00M|        src_row3_8x16b = _mm_loadl_epi64((__m128i *)((pu1_src - 4) + 3 * src_strd));
  146|       |
  147|  4.00M|        coef_8x16b = _mm_load_si128((__m128i *)(coef_d));
  148|  4.00M|        mask_16x8b =  _mm_load_si128((__m128i *)(shuffle_d));
  149|       |
  150|  4.00M|        src_tmp_8x16b = _mm_unpacklo_epi64(src_row0_8x16b, src_row3_8x16b);
  151|  4.00M|        mask_de_result_8x16b = _mm_shuffle_epi8(src_tmp_8x16b, mask_16x8b);
  152|       |
  153|  4.00M|        mask_d_result_4x32b = _mm_maddubs_epi16(src_tmp_8x16b, coef_8x16b);
  154|       |
  155|       |
  156|       |        //to get all 1's of 8 bit in (1)
  157|  4.00M|        temp_coef0_8x16b = _mm_cmpeq_epi16(src_tmp_8x16b, src_tmp_8x16b);
  158|  4.00M|        temp_coef1_8x16b = _mm_srli_epi16(temp_coef0_8x16b, 15);
  159|       |        //accumulating values foe dp3 dq3 , dp0 dq0 values
  160|  4.00M|        mask_d_result_4x32b = _mm_madd_epi16(mask_d_result_4x32b, temp_coef1_8x16b);
  161|       |
  162|  4.00M|        temp_coef1_8x16b = _mm_packus_epi16(temp_coef1_8x16b, temp_coef1_8x16b);
  163|       |        // to get all 1,-1 sets of 16 bits in (0)
  164|  4.00M|        temp_coef0_8x16b = _mm_unpacklo_epi8(temp_coef0_8x16b, temp_coef1_8x16b);
  165|       |        //q33-q30,p33-p30,q03-q00,p03-p00,0,q30-p30,0,q00-p00
  166|  4.00M|        mask_de_result_8x16b = _mm_maddubs_epi16(mask_de_result_8x16b, temp_coef0_8x16b);
  167|       |        //to get 16 bit 1's
  168|  4.00M|        temp_coef0_8x16b = _mm_srli_epi16(temp_coef1_8x16b, 8);
  169|       |
  170|       |
  171|       |        // dq3 dp3 dq0 dp0
  172|  4.00M|        mask_d_result_4x32b = _mm_abs_epi32(mask_d_result_4x32b);
  173|  4.00M|        mask_16x8b = _mm_shuffle_epi32(mask_d_result_4x32b, 0xec);
  174|  4.00M|        mask_d_result_4x32b = _mm_shuffle_epi32(mask_d_result_4x32b, 0x49);
  175|       |        // dq dp d3 d0
  176|  4.00M|        mask_d_result_4x32b = _mm_add_epi32(mask_d_result_4x32b, mask_16x8b);
  177|       |        //|q33-q30|,|p33-p30|,|q03-q00|,|p03-p00|,0,|q30-p30|,0,|q00-p00|
  178|  4.00M|        mask_de_result_8x16b = _mm_abs_epi16(mask_de_result_8x16b);
  179|       |        //|q33-q30|+|p33-p30|,|q03-q00|+|p03-p00|,0+|q30-p30|,0+|q00-p00|
  180|  4.00M|        mask_de_result_8x16b = _mm_madd_epi16(mask_de_result_8x16b, temp_coef0_8x16b);
  181|       |
  182|       |        ///store back in a single variable
  183|  4.00M|        temp_coef0_8x16b = _mm_srli_si128(mask_d_result_4x32b, 4);
  184|  4.00M|        temp_coef1_8x16b = _mm_srli_si128(mask_d_result_4x32b, 8);
  185|  4.00M|        mask_16x8b = _mm_srli_si128(mask_d_result_4x32b, 12);
  186|       |
  187|  4.00M|        d0 = _mm_cvtsi128_si32(mask_d_result_4x32b);
  188|  4.00M|        d3 = _mm_cvtsi128_si32(temp_coef0_8x16b);
  189|  4.00M|        dp = _mm_cvtsi128_si32(temp_coef1_8x16b);
  190|  4.00M|        dq = _mm_cvtsi128_si32(mask_16x8b);
  191|       |        //getting d
  192|  4.00M|        d = d0 + d3;
  193|       |
  194|       |        ///store back in a single variable
  195|  4.00M|        temp_coef0_8x16b = _mm_srli_si128(mask_de_result_8x16b, 4);
  196|  4.00M|        temp_coef1_8x16b = _mm_srli_si128(mask_de_result_8x16b, 8);
  197|  4.00M|        mask_16x8b = _mm_srli_si128(mask_de_result_8x16b, 12);
  198|       |
  199|  4.00M|        de_0 = _mm_cvtsi128_si32(mask_de_result_8x16b);
  200|  4.00M|        de_1 = _mm_cvtsi128_si32(temp_coef0_8x16b);
  201|  4.00M|        de_2 = _mm_cvtsi128_si32(temp_coef1_8x16b);
  202|  4.00M|        de_3 = _mm_cvtsi128_si32(mask_16x8b);
  203|       |
  204|  4.00M|        de = 0;
  205|  4.00M|        dep = 0;
  206|  4.00M|        deq = 0;
  207|  4.00M|        if(d < beta)
  ------------------
  |  Branch (207:12): [True: 3.37M, False: 624k]
  ------------------
  208|  3.37M|        {
  209|  3.37M|            d_sam0 = 0;
  210|  3.37M|            if((2 * d0 < (beta >> 2))
  ------------------
  |  Branch (210:16): [True: 2.92M, False: 455k]
  ------------------
  211|  3.37M|                            && (de_2 < (beta >> 3))
  ------------------
  |  Branch (211:32): [True: 2.17M, False: 748k]
  ------------------
  212|  3.37M|                            && (de_0 < ((5 * tc + 1) >> 1)))
  ------------------
  |  Branch (212:32): [True: 2.14M, False: 26.4k]
  ------------------
  213|  2.14M|            {
  214|  2.14M|                d_sam0 = 1;
  215|  2.14M|            }
  216|       |
  217|  3.37M|            d_sam3 = 0;
  218|  3.37M|            if((2 * d3 < (beta >> 2))
  ------------------
  |  Branch (218:16): [True: 2.96M, False: 419k]
  ------------------
  219|  3.37M|                            && (de_3 < (beta >> 3))
  ------------------
  |  Branch (219:32): [True: 2.19M, False: 768k]
  ------------------
  220|  3.37M|                            && de_1 < ((5 * tc + 1) >> 1))
  ------------------
  |  Branch (220:32): [True: 2.16M, False: 22.7k]
  ------------------
  221|  2.19M|            {
  222|  2.19M|                d_sam3 = 1;
  223|  2.19M|            }
  224|       |
  225|  3.37M|            de = (d_sam0 & d_sam3) + 1;
  226|  3.37M|            dep = (dp < (beta + (beta >> 1)) >> 3) ? 1 : 0;
  ------------------
  |  Branch (226:19): [True: 3.15M, False: 228k]
  ------------------
  227|  3.37M|            deq = (dq < (beta + (beta >> 1)) >> 3) ? 1 : 0;
  ------------------
  |  Branch (227:19): [True: 3.04M, False: 335k]
  ------------------
  228|  3.37M|            if(tc <= 1)
  ------------------
  |  Branch (228:16): [True: 113k, False: 3.26M]
  ------------------
  229|   113k|            {
  230|   113k|                dep = 0;
  231|   113k|                deq = 0;
  232|   113k|            }
  233|  3.37M|        }
  234|       |
  235|  4.00M|    }
  236|       |
  237|  4.00M|    if(de != 0)
  ------------------
  |  Branch (237:8): [True: 3.44M, False: 563k]
  ------------------
  238|  3.44M|    {
  239|       |
  240|       |
  241|  3.44M|        src_row1_8x16b = _mm_loadl_epi64((__m128i *)((pu1_src - 4) + src_strd));
  242|  3.44M|        src_row2_8x16b = _mm_loadl_epi64((__m128i *)((pu1_src - 4) + 2 * src_strd));
  243|       |
  244|  3.44M|        if(de == 2)
  ------------------
  |  Branch (244:12): [True: 1.86M, False: 1.57M]
  ------------------
  245|  1.86M|        {
  246|  1.86M|            __m128i temp_pq_str0_16x8b;
  247|  1.86M|            __m128i temp_pq1_str0_16x8b, temp_pq1_str1_16x8b;
  248|  1.86M|            __m128i temp_pq2_str0_16x8b;
  249|  1.86M|            __m128i temp_pq_str1_16x8b;
  250|  1.86M|            __m128i temp_str0_16x8b, temp_str1_16x8b, temp_str2_16x8b, temp_str3_16x8b;
  251|  1.86M|            __m128i temp_max0_16x8b, temp_max1_16x8b, temp_min0_16x8b, temp_min1_16x8b;
  252|  1.86M|            __m128i const2_8x16b, const2tc_8x16b;
  253|  1.86M|            LWORD64 mask, tc2;
  254|  1.86M|            tc = tc << 1;
  255|  1.86M|            mask = (((LWORD64)filter_flag_q) << 63) | (((LWORD64)filter_flag_p) << 31);
  256|  1.86M|            tc2 = ((LWORD64)tc);
  257|       |
  258|  1.86M|            const2_8x16b = _mm_cmpeq_epi16(src_row0_8x16b, src_row0_8x16b);
  259|       |            //q'0-q'1-2 ,p'0-p'1-2
  260|  1.86M|            src_row0_8x16b = _mm_unpacklo_epi64(src_row0_8x16b, src_row2_8x16b);
  261|  1.86M|            src_row1_8x16b = _mm_unpacklo_epi64(src_row1_8x16b, src_row3_8x16b);
  262|       |
  263|  1.86M|            const2_8x16b = _mm_srli_epi16(const2_8x16b, 15);
  264|  1.86M|            temp_pq_str0_16x8b = _mm_srli_epi64(src_row0_8x16b, 16);
  265|  1.86M|            temp_pq_str1_16x8b = _mm_srli_epi64(src_row1_8x16b, 16);
  266|       |            //arranged x x x x x x x x q31 q30 q1 q10 p30 p31 p10 p11 , x x x x x x x x q21 q20 q01 q00 p20 p21 p00 p01
  267|  1.86M|            temp_str0_16x8b = _mm_unpacklo_epi16(temp_pq_str0_16x8b, temp_pq_str1_16x8b);
  268|  1.86M|            temp_str1_16x8b = _mm_unpackhi_epi16(temp_pq_str0_16x8b, temp_pq_str1_16x8b);
  269|       |
  270|  1.86M|            const2_8x16b = _mm_packus_epi16(const2_8x16b, const2_8x16b);
  271|       |            //arranged q31 q30 q21 q20 q1 q10 q01 q00 p30 p31 p20 p21 p10 p11 p00 p01
  272|  1.86M|            temp_pq_str0_16x8b = _mm_unpacklo_epi32(temp_str0_16x8b, temp_str1_16x8b);
  273|       |
  274|  1.86M|            temp_pq_str0_16x8b = _mm_maddubs_epi16(temp_pq_str0_16x8b, const2_8x16b);
  275|       |
  276|       |            //q'1-2, p'1-2
  277|  1.86M|            temp_pq1_str0_16x8b = _mm_srli_epi64(src_row0_8x16b, 8);
  278|  1.86M|            temp_pq1_str1_16x8b = _mm_srli_epi64(src_row1_8x16b, 8);
  279|       |
  280|  1.86M|            temp_str2_16x8b = _mm_unpacklo_epi16(temp_pq1_str0_16x8b, temp_pq1_str1_16x8b);
  281|  1.86M|            temp_str3_16x8b = _mm_unpackhi_epi16(temp_pq1_str0_16x8b, temp_pq1_str1_16x8b);
  282|       |
  283|  1.86M|            temp_str2_16x8b = _mm_shuffle_epi32(temp_str2_16x8b, 0x58);
  284|  1.86M|            temp_str3_16x8b = _mm_shuffle_epi32(temp_str3_16x8b, 0x58);
  285|       |            // q30 p30 q20 p20 q10 p10 q01 q00 p30 q20 p20 q10 p10 q01 q00 p00
  286|  1.86M|            temp_pq1_str0_16x8b = _mm_unpackhi_epi32(temp_str2_16x8b, temp_str3_16x8b);
  287|       |            // q32 q31 q22 q21 q12 q11 q02 q01 p32 p31 p22 p21 p12 p11 p02 p01
  288|  1.86M|            temp_pq1_str1_16x8b = _mm_unpacklo_epi32(temp_str2_16x8b, temp_str3_16x8b);
  289|       |
  290|  1.86M|            temp_pq1_str0_16x8b = _mm_maddubs_epi16(temp_pq1_str0_16x8b, const2_8x16b);
  291|  1.86M|            temp_pq1_str1_16x8b = _mm_maddubs_epi16(temp_pq1_str1_16x8b, const2_8x16b);
  292|       |
  293|       |            //clipping mask design
  294|  1.86M|            temp_str1_16x8b = _mm_setzero_si128();
  295|  1.86M|            temp_str0_16x8b = _mm_loadl_epi64((__m128i *)(&mask));
  296|  1.86M|            const2tc_8x16b  = _mm_loadl_epi64((__m128i *)(&tc2));
  297|  1.86M|            temp_str0_16x8b = _mm_shuffle_epi32(temp_str0_16x8b, 0x44);
  298|  1.86M|            const2tc_8x16b  = _mm_shuffle_epi8(const2tc_8x16b, temp_str1_16x8b);
  299|       |
  300|       |            //clipping mask design
  301|  1.86M|            temp_str0_16x8b = _mm_srai_epi32(temp_str0_16x8b, 31);
  302|  1.86M|            const2tc_8x16b = _mm_and_si128(const2tc_8x16b, temp_str0_16x8b);
  303|       |            //calculating Clipping MAX for all pixel values.
  304|  1.86M|            temp_max0_16x8b = _mm_adds_epu8(src_row0_8x16b, const2tc_8x16b);
  305|  1.86M|            temp_max1_16x8b = _mm_adds_epu8(src_row1_8x16b, const2tc_8x16b);
  306|       |
  307|       |
  308|       |            //q'2-q'0-2,p'2-p'0-2
  309|  1.86M|            temp_pq2_str0_16x8b = _mm_unpacklo_epi16(src_row0_8x16b, src_row2_8x16b);
  310|  1.86M|            temp_str3_16x8b     = _mm_unpacklo_epi16(src_row1_8x16b, src_row3_8x16b);
  311|       |
  312|  1.86M|            temp_pq2_str0_16x8b = _mm_shuffle_epi32(temp_pq2_str0_16x8b, 0x5c);
  313|  1.86M|            temp_str3_16x8b     = _mm_shuffle_epi32(temp_str3_16x8b, 0x5c);
  314|       |
  315|  1.86M|            const2_8x16b = _mm_slli_epi16(const2_8x16b, 1);
  316|       |            //arranged q33 q32 q23 q22 q13 q12 q03 q02 p33 p32 p23 p22 p13 p12 p03 p02
  317|  1.86M|            temp_str3_16x8b = _mm_unpacklo_epi16(temp_pq2_str0_16x8b, temp_str3_16x8b);
  318|       |
  319|  1.86M|            temp_pq2_str0_16x8b = _mm_maddubs_epi16(temp_str3_16x8b, const2_8x16b);
  320|       |
  321|       |            //calculating Clipping MIN for all pixel values.
  322|  1.86M|            temp_min0_16x8b = _mm_subs_epu8(src_row0_8x16b, const2tc_8x16b);
  323|  1.86M|            temp_min1_16x8b = _mm_subs_epu8(src_row1_8x16b, const2tc_8x16b);
  324|       |            //q'0-q'1-2 ,p'0-p'1-2
  325|  1.86M|            temp_pq_str1_16x8b = _mm_shuffle_epi32(temp_pq_str0_16x8b, 0x4e);
  326|  1.86M|            temp_pq_str0_16x8b = _mm_add_epi16(temp_pq_str0_16x8b, temp_pq_str1_16x8b);
  327|       |            //q'1-2 p'1-2
  328|  1.86M|            temp_pq1_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, temp_pq1_str1_16x8b);
  329|       |            //to get 2 in 16 bit
  330|  1.86M|            const2_8x16b = _mm_srli_epi16(const2_8x16b, 8);
  331|       |            //to get q33 q23 q13 q03, p33 p23 p13 p03
  332|  1.86M|            temp_pq1_str1_16x8b = _mm_slli_epi16(temp_str3_16x8b, 8);
  333|  1.86M|            temp_pq_str1_16x8b = _mm_srli_epi16(temp_str3_16x8b, 8);
  334|  1.86M|            temp_pq1_str1_16x8b = _mm_srli_epi16(temp_pq1_str1_16x8b, 8);
  335|       |
  336|       |            //q'1, p'1 (adding 2)
  337|  1.86M|            temp_pq1_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, const2_8x16b);
  338|       |            //q'0-q'1,p'0-p'1
  339|  1.86M|            temp_pq_str0_16x8b = _mm_add_epi16(temp_pq_str0_16x8b, const2_8x16b);
  340|       |            //q'2-q'1,p'2-p'1
  341|  1.86M|            temp_pq2_str0_16x8b = _mm_add_epi16(temp_pq2_str0_16x8b, const2_8x16b);
  342|       |            //q'0 = (q'0-q'1)+q'1 ,p'0 = (p'0-p'1)+p'1;
  343|  1.86M|            temp_pq_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, temp_pq_str0_16x8b);
  344|       |            //q'2 = (q'2-q'1)+q'1 ,p'2 = (p'2-p'1)+p'1;
  345|  1.86M|            temp_pq2_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, temp_pq2_str0_16x8b);
  346|       |
  347|       |            //normalisation of all modified pixels
  348|  1.86M|            temp_pq_str0_16x8b  = _mm_srai_epi16(temp_pq_str0_16x8b, 3);
  349|  1.86M|            temp_pq1_str0_16x8b = _mm_srai_epi16(temp_pq1_str0_16x8b, 2);
  350|  1.86M|            temp_pq2_str0_16x8b = _mm_srai_epi16(temp_pq2_str0_16x8b, 3);
  351|       |
  352|       |            //getting p0 p1 together and p2 p3 together
  353|  1.86M|            temp_str0_16x8b = _mm_unpacklo_epi16(temp_pq1_str0_16x8b, temp_pq_str0_16x8b);
  354|  1.86M|            temp_str2_16x8b = _mm_unpacklo_epi16(temp_pq1_str1_16x8b, temp_pq2_str0_16x8b);
  355|       |            //getting q1 q0 together and  q3 q2 together
  356|  1.86M|            temp_pq_str0_16x8b = _mm_unpackhi_epi16(temp_pq_str0_16x8b, temp_pq1_str0_16x8b);
  357|  1.86M|            temp_pq2_str0_16x8b = _mm_unpackhi_epi16(temp_pq2_str0_16x8b, temp_pq_str1_16x8b);
  358|       |            //getting p's of row0 row1 together and of row2 row3 together
  359|  1.86M|            temp_pq_str1_16x8b = _mm_unpacklo_epi32(temp_str2_16x8b, temp_str0_16x8b);
  360|  1.86M|            temp_str2_16x8b    = _mm_unpackhi_epi32(temp_str2_16x8b, temp_str0_16x8b);
  361|       |            //getting q's of row0 row1 together and of row2 row3 together
  362|  1.86M|            temp_str0_16x8b    = _mm_unpacklo_epi32(temp_pq_str0_16x8b, temp_pq2_str0_16x8b);
  363|  1.86M|            temp_pq_str0_16x8b = _mm_unpackhi_epi32(temp_pq_str0_16x8b, temp_pq2_str0_16x8b);
  364|       |            //getting values for respective rows in 16 bit
  365|  1.86M|            src_row0_8x16b = _mm_unpacklo_epi64(temp_pq_str1_16x8b, temp_str0_16x8b);
  366|  1.86M|            src_row1_8x16b = _mm_unpackhi_epi64(temp_pq_str1_16x8b, temp_str0_16x8b);
  367|  1.86M|            src_row2_8x16b = _mm_unpacklo_epi64(temp_str2_16x8b, temp_pq_str0_16x8b);
  368|  1.86M|            src_row3_8x16b = _mm_unpackhi_epi64(temp_str2_16x8b, temp_pq_str0_16x8b);
  369|       |            //packing values to 8 bit
  370|  1.86M|            src_row0_8x16b = _mm_packus_epi16(src_row0_8x16b, src_row2_8x16b);
  371|  1.86M|            src_row1_8x16b = _mm_packus_epi16(src_row1_8x16b, src_row3_8x16b);
  372|       |            //Clipping MAX
  373|  1.86M|            src_row0_8x16b = _mm_min_epu8(src_row0_8x16b, temp_max0_16x8b);
  374|  1.86M|            src_row1_8x16b = _mm_min_epu8(src_row1_8x16b, temp_max1_16x8b);
  375|       |            //Clipping MIN
  376|  1.86M|            src_row0_8x16b = _mm_max_epu8(src_row0_8x16b, temp_min0_16x8b);
  377|  1.86M|            src_row1_8x16b = _mm_max_epu8(src_row1_8x16b, temp_min1_16x8b);
  378|       |            //separating row 2 and row 3
  379|  1.86M|            src_row2_8x16b = _mm_srli_si128(src_row0_8x16b, 8);
  380|  1.86M|            src_row3_8x16b = _mm_srli_si128(src_row1_8x16b, 8);
  381|       |
  382|  1.86M|        }
  383|       |
  384|  1.57M|        else
  385|  1.57M|        {
  386|       |
  387|  1.57M|            __m128i tmp_delta0_8x16b, tmp_delta1_8x16b, tmp_delta2_8x16b, tmp_delta3_8x16b;
  388|  1.57M|            __m128i tmp0_const_8x16b, tmp1_const_8x16b, tmp2_const_8x16b, tmp3_const_8x16b;
  389|  1.57M|            __m128i coefdelta_0_8x16b, mask_pq_8x16b;
  390|  1.57M|            __m128i const2_8x16b, consttc_8x16b;
  391|       |
  392|  1.57M|            LWORD64 mask1;
  393|  1.57M|            mask1 = (((LWORD64)(filter_flag_q & deq)) << 63) | (((LWORD64)filter_flag_q) << 47) | (((LWORD64)filter_flag_p) << 31) | (((LWORD64)(filter_flag_p & dep)) << 15);
  394|       |
  395|  1.57M|            consttc_8x16b = _mm_set1_epi32(tc);
  396|       |
  397|       |
  398|  1.57M|            src_row0_8x16b = _mm_unpacklo_epi64(src_row0_8x16b, src_row1_8x16b);
  399|  1.57M|            src_row2_8x16b = _mm_unpacklo_epi64(src_row2_8x16b, src_row3_8x16b);
  400|       |
  401|  1.57M|            tmp_delta2_8x16b = _mm_srli_epi64(src_row0_8x16b, 16);
  402|  1.57M|            tmp_delta3_8x16b = _mm_srli_epi64(src_row2_8x16b, 16);
  403|       |
  404|  1.57M|            tmp_delta2_8x16b = _mm_shuffle_epi32(tmp_delta2_8x16b, 0x08);
  405|  1.57M|            tmp_delta3_8x16b = _mm_shuffle_epi32(tmp_delta3_8x16b, 0x08);
  406|       |            //arranged q31 q30 p30 p31  q21 q20 p20 p21  q1 q10 p10 p11 q01 q00 p00 p01
  407|  1.57M|            tmp_delta2_8x16b = _mm_unpacklo_epi64(tmp_delta2_8x16b, tmp_delta3_8x16b);
  408|       |
  409|  1.57M|            coefdelta_0_8x16b = _mm_load_si128((__m128i *)coef_de1);
  410|       |            // (-3q1+9q0),(-9p0+3p1)
  411|  1.57M|            tmp_delta3_8x16b = _mm_maddubs_epi16(tmp_delta2_8x16b, coefdelta_0_8x16b);
  412|       |            //converting to 16 bit
  413|  1.57M|            consttc_8x16b = _mm_packs_epi32(consttc_8x16b, consttc_8x16b);
  414|       |            //getting -tc store
  415|  1.57M|            tmp1_const_8x16b = _mm_cmpeq_epi32(consttc_8x16b, consttc_8x16b);
  416|       |            //calc 10 *tc = 2*tc +8*tc ; 2*tc
  417|  1.57M|            tmp2_const_8x16b = _mm_slli_epi16(consttc_8x16b, 1);
  418|       |            //calc 10 *tc = 2*tc +8*tc ; 8*tc
  419|  1.57M|            tmp0_const_8x16b = _mm_slli_epi16(consttc_8x16b, 3);
  420|       |            //getting -tc store
  421|  1.57M|            tmp3_const_8x16b = _mm_sign_epi16(consttc_8x16b, tmp1_const_8x16b);
  422|       |            //calc 10 *tc
  423|  1.57M|            tmp2_const_8x16b = _mm_add_epi16(tmp2_const_8x16b, tmp0_const_8x16b);
  424|       |            //const 1
  425|  1.57M|            const2_8x16b = _mm_srli_epi16(tmp1_const_8x16b, 15);
  426|  1.57M|            tmp_delta0_8x16b = _mm_madd_epi16(tmp_delta3_8x16b, const2_8x16b);
  427|  1.57M|            const2_8x16b = _mm_srli_epi32(tmp1_const_8x16b, 31);
  428|       |            //getting the mask values
  429|  1.57M|            mask_pq_8x16b = _mm_loadl_epi64((__m128i *)(&mask1));
  430|       |            //loaded coef for delta1 calculation
  431|  1.57M|            coefdelta_0_8x16b = _mm_load_si128((__m128i *)coef_dep1);
  432|       |            //(-2q1+q0),(p0-2p1)
  433|  1.57M|            tmp_delta3_8x16b = _mm_maddubs_epi16(tmp_delta2_8x16b, coefdelta_0_8x16b);
  434|       |            //const 8
  435|  1.57M|            const2_8x16b = _mm_slli_epi32(const2_8x16b, 3);
  436|       |            //rearranging the mask values
  437|  1.57M|            mask_pq_8x16b = _mm_unpacklo_epi64(mask_pq_8x16b, mask_pq_8x16b);
  438|       |            //normalisation of the filter
  439|  1.57M|            tmp_delta0_8x16b = _mm_add_epi32(tmp_delta0_8x16b, const2_8x16b);
  440|  1.57M|            tmp_delta0_8x16b = _mm_srai_epi32(tmp_delta0_8x16b, 4);
  441|       |
  442|       |            //getting deltaq0
  443|  1.57M|            tmp_delta2_8x16b = _mm_sign_epi32(tmp_delta0_8x16b, tmp1_const_8x16b);
  444|       |            //packing  d3q d2q d1q d0q d3p d2p d1p d0p
  445|  1.57M|            tmp_delta0_8x16b = _mm_packs_epi32(tmp_delta0_8x16b, tmp_delta2_8x16b);
  446|       |            //absolute delta
  447|  1.57M|            tmp_delta2_8x16b = _mm_abs_epi16(tmp_delta0_8x16b);
  448|       |            //Clipping of delta0
  449|  1.57M|            tmp_delta0_8x16b = _mm_min_epi16(tmp_delta0_8x16b, consttc_8x16b);
  450|       |            //mask for |delta| < 10*tc
  451|  1.57M|            tmp0_const_8x16b = _mm_cmpgt_epi16(tmp2_const_8x16b, tmp_delta2_8x16b);
  452|       |            //Clipping of delta0
  453|  1.57M|            tmp_delta0_8x16b = _mm_max_epi16(tmp_delta0_8x16b, tmp3_const_8x16b);
  454|       |
  455|       |
  456|       |            //delta 1 calc starts
  457|       |
  458|       |            //getting q32 q22 q12 q02 p32 p12 p22 p02
  459|  1.57M|            tmp2_const_8x16b = _mm_loadl_epi64((__m128i *)(shuffle0));
  460|  1.57M|            tmp_delta2_8x16b = _mm_shuffle_epi8(src_row0_8x16b, tmp2_const_8x16b);
  461|  1.57M|            tmp_delta1_8x16b =  _mm_shuffle_epi8(src_row2_8x16b, tmp2_const_8x16b);
  462|  1.57M|            tmp_delta1_8x16b = _mm_unpacklo_epi32(tmp_delta2_8x16b, tmp_delta1_8x16b);
  463|       |            //constant 1
  464|  1.57M|            const2_8x16b = _mm_srli_epi16(tmp1_const_8x16b, 15);
  465|       |            //tc>>1 16 bit
  466|  1.57M|            consttc_8x16b = _mm_srai_epi16(consttc_8x16b, 1);
  467|       |
  468|       |            //getting -tc>>1 store  16 bit
  469|  1.57M|            tmp1_const_8x16b = _mm_sign_epi16(consttc_8x16b, tmp1_const_8x16b);
  470|       |            //2*delta0
  471|  1.57M|            tmp2_const_8x16b = _mm_add_epi16(tmp_delta0_8x16b, tmp_delta0_8x16b);
  472|       |
  473|       |            //getting  all respective q's and p's together
  474|  1.57M|            tmp3_const_8x16b = _mm_load_si128((__m128i *)(shuffle1));
  475|  1.57M|            tmp_delta3_8x16b = _mm_shuffle_epi8(tmp_delta3_8x16b, tmp3_const_8x16b);
  476|       |            //final adds for deltap1 and deltaq1
  477|  1.57M|            tmp_delta3_8x16b = _mm_add_epi16(tmp_delta3_8x16b, const2_8x16b);
  478|  1.57M|            tmp_delta1_8x16b = _mm_add_epi16(tmp_delta1_8x16b, tmp2_const_8x16b);
  479|  1.57M|            tmp_delta1_8x16b = _mm_add_epi16(tmp_delta1_8x16b, tmp_delta3_8x16b);
  480|  1.57M|            tmp2_const_8x16b = _mm_setzero_si128();
  481|  1.57M|            tmp_delta1_8x16b = _mm_srai_epi16(tmp_delta1_8x16b, 2);
  482|       |
  483|       |            // clipping delta1
  484|  1.57M|            tmp_delta1_8x16b = _mm_min_epi16(tmp_delta1_8x16b, consttc_8x16b);
  485|       |            // clipping delta1
  486|  1.57M|            tmp_delta1_8x16b = _mm_max_epi16(tmp_delta1_8x16b, tmp1_const_8x16b);
  487|       |
  488|       |            //getting the mask ready
  489|  1.57M|            mask_pq_8x16b = _mm_srai_epi16(mask_pq_8x16b, 15);
  490|       |            //masking of the delta values |delta|<10*tc
  491|  1.57M|            tmp_delta1_8x16b = _mm_and_si128(tmp_delta1_8x16b, tmp0_const_8x16b);
  492|  1.57M|            tmp_delta0_8x16b = _mm_and_si128(tmp_delta0_8x16b, tmp0_const_8x16b);
  493|       |            //packing dq1 dq0 dp0 dp1
  494|  1.57M|            tmp1_const_8x16b = _mm_unpacklo_epi16(tmp_delta1_8x16b, tmp_delta0_8x16b);
  495|  1.57M|            tmp_delta0_8x16b = _mm_unpackhi_epi16(tmp_delta0_8x16b, tmp_delta1_8x16b);
  496|  1.57M|            tmp_delta1_8x16b = _mm_unpackhi_epi32(tmp1_const_8x16b, tmp_delta0_8x16b);
  497|  1.57M|            tmp_delta0_8x16b = _mm_unpacklo_epi32(tmp1_const_8x16b, tmp_delta0_8x16b);
  498|       |
  499|       |            //masking of the delta values dep, deq , filter_p ,filter_q
  500|  1.57M|            tmp_delta0_8x16b = _mm_and_si128(tmp_delta0_8x16b, mask_pq_8x16b);
  501|  1.57M|            tmp_delta1_8x16b = _mm_and_si128(tmp_delta1_8x16b, mask_pq_8x16b);
  502|       |            //converting 8bit to 16 bit
  503|  1.57M|            src_row0_8x16b = _mm_unpacklo_epi8(src_row0_8x16b, tmp2_const_8x16b);
  504|  1.57M|            src_row1_8x16b = _mm_unpacklo_epi8(src_row1_8x16b, tmp2_const_8x16b);
  505|  1.57M|            src_row2_8x16b = _mm_unpacklo_epi8(src_row2_8x16b, tmp2_const_8x16b);
  506|  1.57M|            src_row3_8x16b = _mm_unpacklo_epi8(src_row3_8x16b, tmp2_const_8x16b);
  507|       |            //shuffle values loaded
  508|  1.57M|            tmp0_const_8x16b = _mm_load_si128((__m128i *)shuffle2);
  509|  1.57M|            tmp1_const_8x16b = _mm_load_si128((__m128i *)shuffle3);
  510|       |            //arranging each row delta in different registers
  511|  1.57M|            tmp_delta3_8x16b = _mm_shuffle_epi8(tmp_delta1_8x16b, tmp1_const_8x16b);
  512|  1.57M|            tmp_delta2_8x16b = _mm_shuffle_epi8(tmp_delta1_8x16b, tmp0_const_8x16b);
  513|  1.57M|            tmp_delta1_8x16b = _mm_shuffle_epi8(tmp_delta0_8x16b, tmp1_const_8x16b);
  514|  1.57M|            tmp_delta0_8x16b = _mm_shuffle_epi8(tmp_delta0_8x16b, tmp0_const_8x16b);
  515|       |
  516|       |            //adding the respective delta
  517|  1.57M|            src_row3_8x16b = _mm_add_epi16(tmp_delta3_8x16b, src_row3_8x16b);
  518|  1.57M|            src_row2_8x16b = _mm_add_epi16(tmp_delta2_8x16b, src_row2_8x16b);
  519|  1.57M|            src_row1_8x16b = _mm_add_epi16(tmp_delta1_8x16b, src_row1_8x16b);
  520|  1.57M|            src_row0_8x16b = _mm_add_epi16(tmp_delta0_8x16b, src_row0_8x16b);
  521|       |            //saturating to 8 bit
  522|  1.57M|            src_row2_8x16b = _mm_packus_epi16(src_row2_8x16b, src_row3_8x16b);
  523|  1.57M|            src_row0_8x16b = _mm_packus_epi16(src_row0_8x16b, src_row1_8x16b);
  524|       |            //separating different rows
  525|  1.57M|            src_row1_8x16b = _mm_srli_si128(src_row0_8x16b, 8);
  526|  1.57M|            src_row3_8x16b = _mm_srli_si128(src_row2_8x16b, 8);
  527|  1.57M|        }
  528|       |
  529|  3.44M|        _mm_storel_epi64((__m128i *)(pu1_src - 4), src_row0_8x16b);
  530|  3.44M|        _mm_storel_epi64((__m128i *)((pu1_src - 4) + src_strd), src_row1_8x16b);
  531|  3.44M|        _mm_storel_epi64((__m128i *)((pu1_src - 4) + 2 * src_strd), src_row2_8x16b);
  532|  3.44M|        _mm_storel_epi64((__m128i *)((pu1_src - 4) + 3 * src_strd), src_row3_8x16b);
  533|  3.44M|    }
  534|  4.00M|}
ihevc_deblk_luma_horz_ssse3:
  545|  4.09M|{
  546|  4.09M|    WORD32 qp_luma, beta_indx, tc_indx;
  547|  4.09M|    WORD32 beta, tc;
  548|       |
  549|  4.09M|    WORD32 d0, d3, dp, dq, d;
  550|  4.09M|    WORD32 de_0, de_1, de_2, de_3;
  551|  4.09M|    WORD32 d_sam0, d_sam3;
  552|  4.09M|    WORD32 de, dep, deq;
  553|       |
  554|  4.09M|    __m128i src_q0_8x16b, src_q1_8x16b, src_p0_8x16b, src_p1_8x16b, src_q2_8x16b;
  555|  4.09M|    __m128i tmp_pq_str1_8x16b, src_p2_8x16b, tmp_pq_str0_8x16b;
  556|       |
  557|       |
  558|       |
  559|       |
  560|  4.09M|    {
  561|  4.09M|        __m128i src_tmp_p_0_8x16b, src_tmp_p_1_8x16b, src_tmp_q_0_8x16b, src_tmp_q_1_8x16b;
  562|  4.09M|        __m128i coef_8x16b, mask_d_result_4x32b, mask_de_result_8x16b;
  563|  4.09M|        __m128i mask_16x8b, temp_coef0_8x16b, temp_coef1_8x16b;
  564|       |
  565|  4.09M|        ASSERT((bs > 0));
  ------------------
  |  |   55|  4.09M|#define ASSERT(x) assert((x))
  ------------------
  566|  4.10M|        ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  4.10M|#define ASSERT(x) assert((x))
  ------------------
  567|       |
  568|  4.10M|        qp_luma = (quant_param_p + quant_param_q + 1) >> 1;
  569|  4.10M|        beta_indx = CLIP3(qp_luma + (beta_offset_div2 << 1), 0, 51);
  ------------------
  |  |   40|  4.10M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 1.03M, False: 3.06M]
  |  |  |  Branch (40:53): [True: 23.4k, False: 3.04M]
  |  |  ------------------
  ------------------
  570|       |
  571|       |        /* BS based on implementation can take value 3 if it is intra/inter egde          */
  572|       |        /* based on BS, tc index is calcuated by adding 2 * ( bs - 1) to QP and tc_offset */
  573|       |        /* for BS = 1 adding factor is (0*2), BS = 2 or 3 adding factor is (1*2)          */
  574|       |        /* the above desired functionallity is achieved by doing (2*(bs>>1))              */
  575|       |
  576|  4.10M|        tc_indx = CLIP3(qp_luma + 2 * (bs >> 1) + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  4.10M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 4.10M]
  |  |  |  Branch (40:53): [True: 0, False: 4.10M]
  |  |  ------------------
  ------------------
  577|       |
  578|  4.10M|        beta = gai4_ihevc_beta_table[beta_indx];
  579|  4.10M|        tc = gai4_ihevc_tc_table[tc_indx];
  580|  4.10M|        if(0 == tc)
  ------------------
  |  Branch (580:12): [True: 227k, False: 3.87M]
  ------------------
  581|   227k|        {
  582|   227k|            return;
  583|   227k|        }
  584|  3.87M|        src_q0_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src));
  585|  3.87M|        src_q1_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd));
  586|  3.87M|        src_p0_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src - src_strd));
  587|  3.87M|        src_p1_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src - 2 * src_strd));
  588|  3.87M|        src_q2_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd));
  589|  3.87M|        tmp_pq_str1_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd));
  590|  3.87M|        src_p2_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src - 3 * src_strd));
  591|  3.87M|        tmp_pq_str0_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src - 4 * src_strd));
  592|       |
  593|       |
  594|  3.87M|        src_tmp_p_0_8x16b = _mm_unpacklo_epi8(src_p1_8x16b, src_p0_8x16b);
  595|  3.87M|        src_tmp_p_1_8x16b = _mm_unpacklo_epi8(tmp_pq_str0_8x16b, src_p2_8x16b);
  596|       |
  597|  3.87M|        src_tmp_q_0_8x16b = _mm_unpacklo_epi8(src_q0_8x16b, src_q1_8x16b);
  598|  3.87M|        src_tmp_q_1_8x16b = _mm_unpacklo_epi8(src_q2_8x16b, tmp_pq_str1_8x16b);
  599|       |
  600|  3.87M|        src_tmp_p_0_8x16b = _mm_unpacklo_epi16(src_tmp_p_1_8x16b, src_tmp_p_0_8x16b);
  601|  3.87M|        src_tmp_q_0_8x16b = _mm_unpacklo_epi16(src_tmp_q_0_8x16b, src_tmp_q_1_8x16b);
  602|       |
  603|  3.87M|        src_tmp_p_0_8x16b = _mm_shuffle_epi32(src_tmp_p_0_8x16b, 0x6c);
  604|  3.87M|        src_tmp_q_0_8x16b = _mm_shuffle_epi32(src_tmp_q_0_8x16b, 0x6c);
  605|       |
  606|  3.87M|        coef_8x16b = _mm_load_si128((__m128i *)(coef_d));
  607|  3.87M|        mask_16x8b =  _mm_load_si128((__m128i *)(shuffle_d));
  608|       |
  609|  3.87M|        src_tmp_p_0_8x16b = _mm_unpacklo_epi32(src_tmp_p_0_8x16b, src_tmp_q_0_8x16b);
  610|       |        //WORD32 shuffle_d[4]={0x80800403,0x80800c0b,0x03000704,0x0b080f0c};
  611|  3.87M|        mask_de_result_8x16b = _mm_shuffle_epi8(src_tmp_p_0_8x16b, mask_16x8b);
  612|       |
  613|  3.87M|        mask_d_result_4x32b = _mm_maddubs_epi16(src_tmp_p_0_8x16b, coef_8x16b);
  614|       |
  615|       |
  616|       |        //to get all 1's of 8 bit in (1)
  617|  3.87M|        temp_coef0_8x16b = _mm_cmpeq_epi16(src_tmp_p_0_8x16b, src_tmp_p_0_8x16b);
  618|  3.87M|        temp_coef1_8x16b = _mm_srli_epi16(temp_coef0_8x16b, 15);
  619|       |        //accumulating values foe dp3 dq3 , dp0 dq0 values
  620|  3.87M|        mask_d_result_4x32b = _mm_madd_epi16(mask_d_result_4x32b, temp_coef1_8x16b);
  621|       |
  622|  3.87M|        temp_coef1_8x16b = _mm_packus_epi16(temp_coef1_8x16b, temp_coef1_8x16b);
  623|       |        // to get all 1,-1 sets of 16 bits in (0)
  624|  3.87M|        temp_coef0_8x16b = _mm_unpacklo_epi8(temp_coef0_8x16b, temp_coef1_8x16b);
  625|       |        //q33-q30,p33-p30,q03-q00,p03-p00,0,q30-p30,0,q00-p00
  626|  3.87M|        mask_de_result_8x16b = _mm_maddubs_epi16(mask_de_result_8x16b, temp_coef0_8x16b);
  627|       |        //to get 16 bit 1's
  628|  3.87M|        temp_coef0_8x16b = _mm_srli_epi16(temp_coef1_8x16b, 8);
  629|       |
  630|       |
  631|       |        // dq3 dp3 dq0 dp0
  632|  3.87M|        mask_d_result_4x32b = _mm_abs_epi32(mask_d_result_4x32b);
  633|  3.87M|        mask_16x8b = _mm_shuffle_epi32(mask_d_result_4x32b, 0xec);
  634|  3.87M|        mask_d_result_4x32b = _mm_shuffle_epi32(mask_d_result_4x32b, 0x49);
  635|       |        // dq dp d3 d0
  636|  3.87M|        mask_d_result_4x32b = _mm_add_epi32(mask_d_result_4x32b, mask_16x8b);
  637|       |        //|q33-q30|,|p33-p30|,|q03-q00|,|p03-p00|,0,|q30-p30|,0,|q00-p00|
  638|  3.87M|        mask_de_result_8x16b = _mm_abs_epi16(mask_de_result_8x16b);
  639|       |        //|q33-q30|+|p33-p30|,|q03-q00|+|p03-p00|,0+|q30-p30|,0+|q00-p00|
  640|  3.87M|        mask_de_result_8x16b = _mm_madd_epi16(mask_de_result_8x16b, temp_coef0_8x16b);
  641|       |
  642|       |        ///store back in a single variable
  643|  3.87M|        temp_coef0_8x16b = _mm_srli_si128(mask_d_result_4x32b, 4);
  644|  3.87M|        temp_coef1_8x16b = _mm_srli_si128(mask_d_result_4x32b, 8);
  645|  3.87M|        mask_16x8b = _mm_srli_si128(mask_d_result_4x32b, 12);
  646|       |
  647|  3.87M|        d0 = _mm_cvtsi128_si32(mask_d_result_4x32b);
  648|  3.87M|        d3 = _mm_cvtsi128_si32(temp_coef0_8x16b);
  649|  3.87M|        dp = _mm_cvtsi128_si32(temp_coef1_8x16b);
  650|  3.87M|        dq = _mm_cvtsi128_si32(mask_16x8b);
  651|       |        //getting d
  652|  3.87M|        d = d0 + d3;
  653|       |
  654|       |        ///store back in a single variable
  655|  3.87M|        temp_coef0_8x16b = _mm_srli_si128(mask_de_result_8x16b, 4);
  656|  3.87M|        temp_coef1_8x16b = _mm_srli_si128(mask_de_result_8x16b, 8);
  657|  3.87M|        mask_16x8b = _mm_srli_si128(mask_de_result_8x16b, 12);
  658|       |
  659|  3.87M|        de_0 = _mm_cvtsi128_si32(mask_de_result_8x16b);
  660|  3.87M|        de_1 = _mm_cvtsi128_si32(temp_coef0_8x16b);
  661|  3.87M|        de_2 = _mm_cvtsi128_si32(temp_coef1_8x16b);
  662|  3.87M|        de_3 = _mm_cvtsi128_si32(mask_16x8b);
  663|       |
  664|  3.87M|        de = 0;
  665|  3.87M|        dep = 0;
  666|  3.87M|        deq = 0;
  667|  3.87M|        if(d < beta)
  ------------------
  |  Branch (667:12): [True: 3.62M, False: 248k]
  ------------------
  668|  3.62M|        {
  669|  3.62M|            d_sam0 = 0;
  670|  3.62M|            if((2 * d0 < (beta >> 2))
  ------------------
  |  Branch (670:16): [True: 3.24M, False: 385k]
  ------------------
  671|  3.62M|                            && (de_2 < (beta >> 3))
  ------------------
  |  Branch (671:32): [True: 2.39M, False: 845k]
  ------------------
  672|  3.62M|                            && (de_0 < ((5 * tc + 1) >> 1)))
  ------------------
  |  Branch (672:32): [True: 2.34M, False: 42.5k]
  ------------------
  673|  2.34M|            {
  674|  2.34M|                d_sam0 = 1;
  675|  2.34M|            }
  676|       |
  677|  3.62M|            d_sam3 = 0;
  678|  3.62M|            if((2 * d3 < (beta >> 2))
  ------------------
  |  Branch (678:16): [True: 3.23M, False: 395k]
  ------------------
  679|  3.62M|                            && (de_3 < (beta >> 3))
  ------------------
  |  Branch (679:32): [True: 2.37M, False: 858k]
  ------------------
  680|  3.62M|                            && de_1 < ((5 * tc + 1) >> 1))
  ------------------
  |  Branch (680:32): [True: 2.33M, False: 42.4k]
  ------------------
  681|  2.33M|            {
  682|  2.33M|                d_sam3 = 1;
  683|  2.33M|            }
  684|       |
  685|  3.62M|            de = (d_sam0 & d_sam3) + 1;
  686|  3.62M|            dep = (dp < (beta + (beta >> 1)) >> 3) ? 1 : 0;
  ------------------
  |  Branch (686:19): [True: 3.38M, False: 244k]
  ------------------
  687|  3.62M|            deq = (dq < (beta + (beta >> 1)) >> 3) ? 1 : 0;
  ------------------
  |  Branch (687:19): [True: 3.29M, False: 334k]
  ------------------
  688|  3.62M|            if(tc <= 1)
  ------------------
  |  Branch (688:16): [True: 109k, False: 3.51M]
  ------------------
  689|   109k|            {
  690|   109k|                dep = 0;
  691|   109k|                deq = 0;
  692|   109k|            }
  693|  3.62M|        }
  694|       |
  695|  3.87M|    }
  696|       |
  697|  3.87M|    if(de != 0)
  ------------------
  |  Branch (697:8): [True: 3.60M, False: 271k]
  ------------------
  698|  3.60M|    {
  699|       |
  700|  3.60M|        if(2 == de)
  ------------------
  |  Branch (700:12): [True: 2.16M, False: 1.44M]
  ------------------
  701|  2.16M|        {
  702|       |
  703|  2.16M|            __m128i temp_pq0_str0_16x8b;
  704|  2.16M|            __m128i temp_pq1_str0_16x8b, temp_pq1_str1_16x8b;
  705|  2.16M|            __m128i temp_pq2_str0_16x8b;
  706|  2.16M|            __m128i temp_str0_16x8b, temp_str1_16x8b;
  707|  2.16M|            __m128i const2_8x16b, const2tc_8x16b;
  708|       |
  709|  2.16M|            LWORD64 mask, tc2;
  710|  2.16M|            tc = tc << 1;
  711|  2.16M|            mask = (((LWORD64)filter_flag_q) << 63) | (((LWORD64)filter_flag_p) << 31);
  712|  2.16M|            tc2 = ((LWORD64)tc);
  713|       |
  714|  2.16M|            const2_8x16b = _mm_cmpeq_epi16(src_p1_8x16b, src_p1_8x16b);
  715|       |            //q'0-q'1-2 ,p'0-p'1-2
  716|  2.16M|            temp_pq0_str0_16x8b = _mm_unpacklo_epi8(src_p1_8x16b, src_p0_8x16b);
  717|  2.16M|            temp_str0_16x8b   = _mm_unpacklo_epi8(src_q0_8x16b, src_q1_8x16b);
  718|  2.16M|            const2_8x16b = _mm_srli_epi16(const2_8x16b, 15);
  719|       |            //arranged q31 q30 q21 q20 q1 q10 q01 q00 p30 p31 p20 p21 p10 p11 p00 p01
  720|  2.16M|            temp_pq0_str0_16x8b = _mm_unpacklo_epi64(temp_pq0_str0_16x8b, temp_str0_16x8b);
  721|       |
  722|  2.16M|            const2_8x16b = _mm_packus_epi16(const2_8x16b, const2_8x16b);
  723|  2.16M|            temp_pq0_str0_16x8b = _mm_maddubs_epi16(temp_pq0_str0_16x8b, const2_8x16b);
  724|       |
  725|       |            //q'1-2, p'1-2
  726|  2.16M|            temp_pq1_str0_16x8b = _mm_unpacklo_epi8(src_p0_8x16b, src_q0_8x16b);
  727|  2.16M|            temp_pq1_str1_16x8b = _mm_unpacklo_epi8(src_q1_8x16b, src_q2_8x16b);
  728|  2.16M|            temp_str1_16x8b = _mm_unpacklo_epi8(src_p1_8x16b, src_p2_8x16b);
  729|       |            // q30 p30 q20 p20 q10 p10 q01 q00 p30 q20 p20 q10 p10 q01 q00 p00
  730|  2.16M|            temp_pq1_str0_16x8b = _mm_unpacklo_epi64(temp_pq1_str0_16x8b, temp_pq1_str0_16x8b);
  731|       |            // q32 q31 q22 q21 q12 q11 q02 q01 p32 p31 p22 p21 p12 p11 p02 p01
  732|  2.16M|            temp_pq1_str1_16x8b = _mm_unpacklo_epi64(temp_str1_16x8b, temp_pq1_str1_16x8b);
  733|       |
  734|  2.16M|            temp_pq1_str0_16x8b = _mm_maddubs_epi16(temp_pq1_str0_16x8b, const2_8x16b);
  735|  2.16M|            temp_pq1_str1_16x8b = _mm_maddubs_epi16(temp_pq1_str1_16x8b, const2_8x16b);
  736|       |
  737|       |            //clipping mask design
  738|  2.16M|            temp_str1_16x8b = _mm_setzero_si128();
  739|  2.16M|            temp_str0_16x8b = _mm_loadl_epi64((__m128i *)(&mask));
  740|  2.16M|            const2tc_8x16b  = _mm_loadl_epi64((__m128i *)(&tc2));
  741|  2.16M|            temp_str0_16x8b = _mm_shuffle_epi32(temp_str0_16x8b, 0x44);
  742|  2.16M|            const2tc_8x16b  = _mm_shuffle_epi8(const2tc_8x16b, temp_str1_16x8b);
  743|       |
  744|       |            //clipping mask design
  745|  2.16M|            temp_str0_16x8b = _mm_srai_epi32(temp_str0_16x8b, 31);
  746|  2.16M|            const2tc_8x16b = _mm_and_si128(const2tc_8x16b, temp_str0_16x8b);
  747|       |            //calculating Clipping MAX for all pixel values.
  748|  2.16M|            src_p0_8x16b = _mm_unpacklo_epi32(src_p0_8x16b, src_q0_8x16b);
  749|  2.16M|            src_q0_8x16b = _mm_unpacklo_epi32(src_p1_8x16b, src_q1_8x16b);
  750|       |            //for clipping calc
  751|  2.16M|            src_p1_8x16b = _mm_unpacklo_epi64(src_p0_8x16b, src_q0_8x16b);
  752|       |            //saving the unmodified data of q1 p1 q0 p0
  753|  2.16M|            src_q1_8x16b = _mm_unpackhi_epi64(src_p0_8x16b, src_q0_8x16b);
  754|       |            //CLIpping MAX and MIN for q1 p1 q0 p0
  755|  2.16M|            src_p0_8x16b = _mm_adds_epu8(src_p1_8x16b, const2tc_8x16b);
  756|  2.16M|            src_p1_8x16b = _mm_subs_epu8(src_p1_8x16b, const2tc_8x16b);
  757|       |
  758|       |
  759|       |            //q'2-q'0-2,p'2-p'0-2
  760|  2.16M|            tmp_pq_str0_8x16b = _mm_unpacklo_epi8(src_p2_8x16b, tmp_pq_str0_8x16b);
  761|  2.16M|            temp_pq2_str0_16x8b = _mm_unpacklo_epi8(src_q2_8x16b, tmp_pq_str1_8x16b);
  762|  2.16M|            const2_8x16b = _mm_slli_epi16(const2_8x16b, 1);
  763|       |            //arranged q33 q32 q23 q22 q13 q12 q03 q02 p32 p33 p22 p23 p12 p13 p02 p03
  764|  2.16M|            temp_pq2_str0_16x8b = _mm_unpacklo_epi64(tmp_pq_str0_8x16b, temp_pq2_str0_16x8b);
  765|  2.16M|            src_p2_8x16b = _mm_unpacklo_epi32(src_p2_8x16b, src_q2_8x16b);
  766|  2.16M|            temp_pq2_str0_16x8b = _mm_maddubs_epi16(temp_pq2_str0_16x8b, const2_8x16b);
  767|       |
  768|       |            //calculating Clipping MAX and MIN for p2 and q2 .
  769|  2.16M|            tmp_pq_str0_8x16b = _mm_adds_epu8(src_p2_8x16b, const2tc_8x16b);
  770|  2.16M|            tmp_pq_str1_8x16b = _mm_subs_epu8(src_p2_8x16b, const2tc_8x16b);
  771|       |            //q'0-q'1-2 ,p'0-p'1-2
  772|  2.16M|            temp_str0_16x8b = _mm_shuffle_epi32(temp_pq0_str0_16x8b, 0x4e);
  773|  2.16M|            temp_pq0_str0_16x8b = _mm_add_epi16(temp_pq0_str0_16x8b, temp_str0_16x8b);
  774|       |            //q'1-2 p'1-2
  775|  2.16M|            temp_pq1_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, temp_pq1_str1_16x8b);
  776|       |            //to get 2 in 16 bit
  777|  2.16M|            const2_8x16b = _mm_srli_epi16(const2_8x16b, 8);
  778|       |
  779|       |
  780|       |            //q'1, p'1 (adding 2)
  781|  2.16M|            temp_pq1_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, const2_8x16b);
  782|       |            //q'0-q'1,p'0-p'1
  783|  2.16M|            temp_pq0_str0_16x8b = _mm_add_epi16(temp_pq0_str0_16x8b, const2_8x16b);
  784|       |            //q'2-q'1,p'2-p'1
  785|  2.16M|            temp_pq2_str0_16x8b = _mm_add_epi16(temp_pq2_str0_16x8b, const2_8x16b);
  786|       |            //q'0 = (q'0-q'1)+q'1 ,p'0 = (p'0-p'1)+p'1;
  787|  2.16M|            temp_pq0_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, temp_pq0_str0_16x8b);
  788|       |            //q'2 = (q'2-q'1)+q'1 ,p'2 = (p'2-p'1)+p'1;
  789|  2.16M|            temp_pq2_str0_16x8b = _mm_add_epi16(temp_pq1_str0_16x8b, temp_pq2_str0_16x8b);
  790|       |
  791|       |            //normalisation of all modified pixels
  792|  2.16M|            temp_pq0_str0_16x8b = _mm_srai_epi16(temp_pq0_str0_16x8b, 3);
  793|  2.16M|            temp_pq1_str0_16x8b = _mm_srai_epi16(temp_pq1_str0_16x8b, 2);
  794|  2.16M|            temp_pq2_str0_16x8b = _mm_srai_epi16(temp_pq2_str0_16x8b, 3);
  795|       |            //q'1 p'1 q'0 p'0
  796|  2.16M|            temp_pq0_str0_16x8b = _mm_packus_epi16(temp_pq0_str0_16x8b, temp_pq1_str0_16x8b);
  797|  2.16M|            temp_pq2_str0_16x8b = _mm_packus_epi16(temp_pq2_str0_16x8b, temp_pq2_str0_16x8b);
  798|       |            //pack with the unmodified data of q2 and p2
  799|  2.16M|            src_p2_8x16b = _mm_unpackhi_epi64(temp_pq2_str0_16x8b, src_p2_8x16b);
  800|       |            //Clipping MAX and MIN for q'1 p'1 q'0 p'0 and q'2  p'2
  801|  2.16M|            temp_pq0_str0_16x8b = _mm_min_epu8(temp_pq0_str0_16x8b, src_p0_8x16b);
  802|  2.16M|            src_p2_8x16b = _mm_min_epu8(src_p2_8x16b, tmp_pq_str0_8x16b);
  803|  2.16M|            temp_pq0_str0_16x8b = _mm_max_epu8(temp_pq0_str0_16x8b, src_p1_8x16b);
  804|  2.16M|            src_p2_8x16b = _mm_max_epu8(src_p2_8x16b, tmp_pq_str1_8x16b);
  805|       |            //Reshuffling q'1 p'1 q'0 p'0 along with unmodified data
  806|  2.16M|            src_p0_8x16b = _mm_unpacklo_epi32(temp_pq0_str0_16x8b, src_q1_8x16b);
  807|  2.16M|            src_p1_8x16b = _mm_unpackhi_epi32(temp_pq0_str0_16x8b, src_q1_8x16b);
  808|  2.16M|            src_p2_8x16b = _mm_shuffle_epi32(src_p2_8x16b, 0xd8);
  809|  2.16M|            src_q0_8x16b = _mm_srli_si128(src_p0_8x16b, 8);
  810|  2.16M|            src_q1_8x16b = _mm_srli_si128(src_p1_8x16b, 8);
  811|  2.16M|            src_q2_8x16b = _mm_srli_si128(src_p2_8x16b, 8);
  812|       |
  813|  2.16M|            _mm_storel_epi64((__m128i *)(pu1_src - 3 * src_strd), src_p2_8x16b);
  814|  2.16M|            _mm_storel_epi64((__m128i *)(pu1_src - 2 * src_strd), src_p1_8x16b);
  815|  2.16M|            _mm_storel_epi64((__m128i *)(pu1_src - src_strd), src_p0_8x16b);
  816|  2.16M|            _mm_storel_epi64((__m128i *)(pu1_src), src_q0_8x16b);
  817|  2.16M|            _mm_storel_epi64((__m128i *)(pu1_src + src_strd), src_q1_8x16b);
  818|  2.16M|            _mm_storel_epi64((__m128i *)(pu1_src + 2 * src_strd), src_q2_8x16b);
  819|       |
  820|       |
  821|  2.16M|        }
  822|       |
  823|  1.44M|        else
  824|  1.44M|        {
  825|       |
  826|  1.44M|            __m128i tmp_delta0_8x16b, tmp_delta1_8x16b;
  827|  1.44M|            __m128i tmp0_const_8x16b, tmp1_const_8x16b, tmp2_const_8x16b;
  828|  1.44M|            __m128i coefdelta_0_8x16b;
  829|  1.44M|            __m128i const2_8x16b, consttc_8x16b;
  830|       |
  831|  1.44M|            LWORD64 maskp0, maskp1, maskq0, maskq1;
  832|  1.44M|            maskp0 = (LWORD64)filter_flag_p;
  833|  1.44M|            maskq0 = (LWORD64)filter_flag_q;
  834|  1.44M|            maskp1 = (LWORD64)dep;
  835|  1.44M|            maskq1 = (LWORD64)deq;
  836|  1.44M|            consttc_8x16b = _mm_set1_epi32(tc);
  837|       |
  838|  1.44M|            tmp_delta0_8x16b = _mm_unpacklo_epi8(src_p1_8x16b, src_p0_8x16b);
  839|  1.44M|            tmp_delta1_8x16b = _mm_unpacklo_epi8(src_q0_8x16b, src_q1_8x16b);
  840|       |            //arranged q31 q30 p30 p31  q21 q20 p20 p21  q1 q10 p10 p11 q01 q00 p00 p01
  841|  1.44M|            tmp_delta1_8x16b = _mm_unpacklo_epi16(tmp_delta0_8x16b, tmp_delta1_8x16b);
  842|       |
  843|  1.44M|            coefdelta_0_8x16b = _mm_load_si128((__m128i *)coef_de1);
  844|       |            // (-3q1+9q0),(-9p0+3p1)
  845|  1.44M|            tmp_delta0_8x16b = _mm_maddubs_epi16(tmp_delta1_8x16b, coefdelta_0_8x16b);
  846|       |
  847|       |            //getting -tc store
  848|  1.44M|            tmp2_const_8x16b = _mm_cmpeq_epi32(consttc_8x16b, consttc_8x16b);
  849|       |
  850|       |            //getting tc in 16 bit
  851|  1.44M|            consttc_8x16b = _mm_packs_epi32(consttc_8x16b, consttc_8x16b);
  852|       |            //calc 10 *tc = 2*tc +8*tc ; 2*tc
  853|  1.44M|            tmp_pq_str0_8x16b = _mm_slli_epi16(consttc_8x16b, 1);
  854|       |            //calc 10 *tc = 2*tc +8*tc ; 8*tc
  855|  1.44M|            tmp_pq_str1_8x16b = _mm_slli_epi16(consttc_8x16b, 3);
  856|       |
  857|       |            //const 1
  858|  1.44M|            const2_8x16b = _mm_srli_epi16(tmp2_const_8x16b, 15);
  859|       |            //calc 10 *tc
  860|  1.44M|            tmp_pq_str0_8x16b = _mm_add_epi16(tmp_pq_str0_8x16b, tmp_pq_str1_8x16b);
  861|       |            //delta0 without normalisation and clipping
  862|  1.44M|            tmp_delta0_8x16b = _mm_madd_epi16(tmp_delta0_8x16b, const2_8x16b);
  863|       |
  864|  1.44M|            const2_8x16b = _mm_srli_epi32(tmp2_const_8x16b, 31);
  865|       |
  866|       |            //loaded coef for delta1 calculation
  867|  1.44M|            coefdelta_0_8x16b = _mm_load_si128((__m128i *)coef_dep1);
  868|       |            //(-2q1+q0),(p0-2p1)
  869|  1.44M|            tmp_delta1_8x16b = _mm_maddubs_epi16(tmp_delta1_8x16b, coefdelta_0_8x16b);
  870|       |            //const 8
  871|  1.44M|            const2_8x16b = _mm_slli_epi32(const2_8x16b, 3);
  872|       |
  873|       |            //normalisation of the filter
  874|  1.44M|            tmp_delta0_8x16b = _mm_add_epi32(tmp_delta0_8x16b, const2_8x16b);
  875|  1.44M|            tmp_delta0_8x16b = _mm_srai_epi32(tmp_delta0_8x16b, 4);
  876|       |
  877|       |            //getting deltaq0
  878|  1.44M|            tmp_pq_str1_8x16b = _mm_sign_epi32(tmp_delta0_8x16b, tmp2_const_8x16b);
  879|       |            //getting -tc
  880|  1.44M|            tmp1_const_8x16b = _mm_sign_epi16(consttc_8x16b, tmp2_const_8x16b);
  881|       |            //packing  d03q d02q d01q d0q d03p d02p d01p d00p
  882|  1.44M|            tmp_delta0_8x16b = _mm_packs_epi32(tmp_delta0_8x16b, tmp_pq_str1_8x16b);
  883|       |            //absolute delta
  884|  1.44M|            tmp_pq_str1_8x16b = _mm_abs_epi16(tmp_delta0_8x16b);
  885|       |
  886|       |            //Clipping of delta0
  887|  1.44M|            tmp_delta0_8x16b = _mm_min_epi16(tmp_delta0_8x16b, consttc_8x16b);
  888|       |            //tc>>1 16 bit
  889|  1.44M|            consttc_8x16b = _mm_srai_epi16(consttc_8x16b, 1);
  890|       |            //Clipping of delta0
  891|  1.44M|            tmp_delta0_8x16b = _mm_max_epi16(tmp_delta0_8x16b, tmp1_const_8x16b);
  892|       |
  893|       |            //(-tc)>>1 16 bit
  894|  1.44M|            tmp1_const_8x16b = _mm_sign_epi16(consttc_8x16b, tmp2_const_8x16b);
  895|       |            //mask for |delta| < 10*tc
  896|  1.44M|            tmp_pq_str0_8x16b = _mm_cmpgt_epi16(tmp_pq_str0_8x16b, tmp_pq_str1_8x16b);
  897|       |            //delta 1 calc starts
  898|       |
  899|       |            //getting q32 q22 q12 q02 p32 p12 p22 p02
  900|  1.44M|            tmp0_const_8x16b = _mm_setzero_si128();
  901|  1.44M|            src_q2_8x16b = _mm_unpacklo_epi8(src_q2_8x16b, tmp0_const_8x16b);
  902|  1.44M|            src_p2_8x16b = _mm_unpacklo_epi8(src_p2_8x16b, tmp0_const_8x16b);
  903|  1.44M|            src_p2_8x16b = _mm_unpacklo_epi64(src_p2_8x16b, src_q2_8x16b);
  904|       |            //constant 1
  905|  1.44M|            const2_8x16b = _mm_srli_epi16(tmp2_const_8x16b, 15);
  906|       |            //2*delta0
  907|  1.44M|            tmp2_const_8x16b = _mm_add_epi16(tmp_delta0_8x16b, tmp_delta0_8x16b);
  908|       |            //getting  all respective q's and p's together
  909|  1.44M|            coefdelta_0_8x16b = _mm_load_si128((__m128i *)(shuffle1));
  910|  1.44M|            tmp_delta1_8x16b = _mm_shuffle_epi8(tmp_delta1_8x16b, coefdelta_0_8x16b);
  911|       |            //final adds for deltap1 and deltaq1
  912|  1.44M|            tmp_delta1_8x16b = _mm_add_epi16(tmp_delta1_8x16b, const2_8x16b);
  913|  1.44M|            src_p2_8x16b = _mm_add_epi16(src_p2_8x16b, tmp2_const_8x16b);
  914|  1.44M|            tmp_delta1_8x16b = _mm_add_epi16(tmp_delta1_8x16b, src_p2_8x16b);
  915|  1.44M|            tmp_delta1_8x16b = _mm_srai_epi16(tmp_delta1_8x16b, 2);
  916|       |
  917|       |            //mask0= (((LWORD64)filter_flag_q)<<63)| (((LWORD64)filter_flag_p)<<31);
  918|  1.44M|            tmp_pq_str1_8x16b = _mm_loadl_epi64((__m128i *)(&(maskq0)));
  919|  1.44M|            src_p2_8x16b = _mm_loadl_epi64((__m128i *)(&(maskp0)));
  920|       |
  921|       |            //   src_p2_8x16b = _mm_set_epi32(filter_flag_q,filter_flag_p,filter_flag_q,filter_flag_p);
  922|       |            //mask1= (((LWORD64)(filter_flag_q&deq))<<63)|(((LWORD64)(filter_flag_p & dep))<<31);
  923|  1.44M|            src_q2_8x16b = _mm_loadl_epi64((__m128i *)(&(maskq1)));
  924|  1.44M|            coefdelta_0_8x16b = _mm_loadl_epi64((__m128i *)(&(maskp1)));
  925|       |
  926|  1.44M|            src_p2_8x16b = _mm_unpacklo_epi32(src_p2_8x16b, tmp_pq_str1_8x16b);
  927|  1.44M|            src_q2_8x16b = _mm_unpacklo_epi32(coefdelta_0_8x16b, src_q2_8x16b);
  928|       |            //src_q2_8x16b = _mm_set_epi32(deq,dep,deq,dep);
  929|  1.44M|            src_q2_8x16b = _mm_and_si128(src_q2_8x16b, src_p2_8x16b);
  930|       |
  931|       |            //rearranging the mask values
  932|  1.44M|            src_q2_8x16b = _mm_shuffle_epi32(src_q2_8x16b, 0x50);
  933|  1.44M|            src_p2_8x16b = _mm_shuffle_epi32(src_p2_8x16b, 0x50);
  934|       |
  935|  1.44M|            src_q2_8x16b = _mm_slli_epi32(src_q2_8x16b, 31);
  936|  1.44M|            src_p2_8x16b = _mm_slli_epi32(src_p2_8x16b, 31);
  937|  1.44M|            src_q2_8x16b = _mm_srai_epi32(src_q2_8x16b, 31);
  938|  1.44M|            src_p2_8x16b = _mm_srai_epi32(src_p2_8x16b, 31);
  939|       |
  940|       |            //combining mask delta1
  941|  1.44M|            tmp_pq_str1_8x16b = _mm_and_si128(tmp_pq_str0_8x16b, src_q2_8x16b);
  942|       |            // clipping delta1
  943|  1.44M|            tmp_delta1_8x16b = _mm_min_epi16(tmp_delta1_8x16b, consttc_8x16b);
  944|       |            //combining mask delat0
  945|  1.44M|            tmp_pq_str0_8x16b = _mm_and_si128(tmp_pq_str0_8x16b, src_p2_8x16b);
  946|       |            // clipping delta1
  947|  1.44M|            tmp_delta1_8x16b = _mm_max_epi16(tmp_delta1_8x16b, tmp1_const_8x16b);
  948|       |
  949|       |
  950|       |            //masking of the delta values |delta|<10*tc
  951|  1.44M|            tmp_delta1_8x16b = _mm_and_si128(tmp_delta1_8x16b, tmp_pq_str1_8x16b);
  952|  1.44M|            tmp_delta0_8x16b = _mm_and_si128(tmp_delta0_8x16b, tmp_pq_str0_8x16b);
  953|       |            //separating p and q delta 0 and addinq p0 and q0
  954|  1.44M|            tmp_pq_str0_8x16b = _mm_unpacklo_epi64(tmp_delta0_8x16b, tmp0_const_8x16b);
  955|  1.44M|            tmp_pq_str1_8x16b = _mm_unpackhi_epi64(tmp_delta0_8x16b, tmp0_const_8x16b);
  956|  1.44M|            src_p0_8x16b = _mm_unpacklo_epi8(src_p0_8x16b, tmp0_const_8x16b);
  957|  1.44M|            src_q0_8x16b = _mm_unpacklo_epi8(src_q0_8x16b, tmp0_const_8x16b);
  958|  1.44M|            src_p0_8x16b = _mm_add_epi16(src_p0_8x16b, tmp_pq_str0_8x16b);
  959|  1.44M|            src_q0_8x16b = _mm_add_epi16(src_q0_8x16b, tmp_pq_str1_8x16b);
  960|       |            //separating p and q delta 0 and addinq p0 and q0
  961|  1.44M|            tmp_pq_str0_8x16b = _mm_unpacklo_epi64(tmp_delta1_8x16b, tmp0_const_8x16b);
  962|  1.44M|            tmp_pq_str1_8x16b = _mm_unpackhi_epi64(tmp_delta1_8x16b, tmp0_const_8x16b);
  963|  1.44M|            src_p1_8x16b = _mm_unpacklo_epi8(src_p1_8x16b, tmp0_const_8x16b);
  964|  1.44M|            src_q1_8x16b = _mm_unpacklo_epi8(src_q1_8x16b, tmp0_const_8x16b);
  965|  1.44M|            src_p1_8x16b = _mm_add_epi16(src_p1_8x16b, tmp_pq_str0_8x16b);
  966|  1.44M|            src_q1_8x16b = _mm_add_epi16(src_q1_8x16b, tmp_pq_str1_8x16b);
  967|       |            //packing p1 q1 and p0 q0 to 8 bit
  968|  1.44M|            src_p1_8x16b = _mm_packus_epi16(src_p1_8x16b, src_q1_8x16b);
  969|  1.44M|            src_p0_8x16b = _mm_packus_epi16(src_p0_8x16b, src_q0_8x16b);
  970|       |
  971|  1.44M|            src_q1_8x16b = _mm_srli_si128(src_p1_8x16b, 8);
  972|  1.44M|            src_q0_8x16b = _mm_srli_si128(src_p0_8x16b, 8);
  973|       |
  974|  1.44M|            _mm_storel_epi64((__m128i *)(pu1_src - 2 * src_strd), src_p1_8x16b);
  975|  1.44M|            _mm_storel_epi64((__m128i *)(pu1_src - src_strd), src_p0_8x16b);
  976|  1.44M|            _mm_storel_epi64((__m128i *)(pu1_src), src_q0_8x16b);
  977|  1.44M|            _mm_storel_epi64((__m128i *)(pu1_src + src_strd), src_q1_8x16b);
  978|       |
  979|       |
  980|  1.44M|        }
  981|       |
  982|       |
  983|       |
  984|  3.60M|    }
  985|       |
  986|  3.87M|}
ihevc_deblk_chroma_vert_ssse3:
  997|  1.63M|{
  998|  1.63M|    WORD32 qp_indx_u, qp_chroma_u;
  999|  1.63M|    WORD32 qp_indx_v, qp_chroma_v;
 1000|  1.63M|    WORD32 tc_indx_u, tc_u;
 1001|  1.63M|    WORD32 tc_indx_v, tc_v;
 1002|       |
 1003|  1.63M|    __m128i src_row_0_16x8b, tmp_pxl_0_16x8b, src_row_2_16x8b, tmp_pxl_1_16x8b;
 1004|  1.63M|    ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  1.63M|#define ASSERT(x) assert((x))
  ------------------
 1005|       |
 1006|       |    /* chroma processing is done only if BS is 2             */
 1007|       |    /* this function is assumed to be called only if BS is 2 */
 1008|  1.63M|    qp_indx_u = qp_offset_u + ((quant_param_p + quant_param_q + 1) >> 1);
 1009|  1.63M|    qp_chroma_u = qp_indx_u < 0 ? qp_indx_u : (qp_indx_u > 57 ? qp_indx_u - 6 : gai4_ihevc_qp_table[qp_indx_u]);
  ------------------
  |  Branch (1009:19): [True: 449, False: 1.63M]
  |  Branch (1009:48): [True: 0, False: 1.63M]
  ------------------
 1010|       |
 1011|  1.63M|    qp_indx_v = qp_offset_v + ((quant_param_p + quant_param_q + 1) >> 1);
 1012|  1.63M|    qp_chroma_v = qp_indx_v < 0 ? qp_indx_v : (qp_indx_v > 57 ? qp_indx_v - 6 : gai4_ihevc_qp_table[qp_indx_v]);
  ------------------
  |  Branch (1012:19): [True: 5.51k, False: 1.63M]
  |  Branch (1012:48): [True: 0, False: 1.63M]
  ------------------
 1013|       |
 1014|  1.63M|    tc_indx_u = CLIP3(qp_chroma_u + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  1.63M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.63M]
  |  |  |  Branch (40:53): [True: 136, False: 1.63M]
  |  |  ------------------
  ------------------
 1015|  1.63M|    tc_u = gai4_ihevc_tc_table[tc_indx_u];
 1016|       |
 1017|  1.63M|    tc_indx_v = CLIP3(qp_chroma_v + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  1.63M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.63M]
  |  |  |  Branch (40:53): [True: 4.95k, False: 1.63M]
  |  |  ------------------
  ------------------
 1018|  1.63M|    tc_v = gai4_ihevc_tc_table[tc_indx_v];
 1019|       |
 1020|  1.63M|    if(0 == tc_u && 0 == tc_v)
  ------------------
  |  Branch (1020:8): [True: 50.0k, False: 1.58M]
  |  Branch (1020:21): [True: 49.1k, False: 929]
  ------------------
 1021|  49.1k|    {
 1022|  49.1k|        return;
 1023|  49.1k|    }
 1024|  1.58M|    src_row_0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src - 4));
 1025|  1.58M|    tmp_pxl_0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd - 4));
 1026|  1.58M|    src_row_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd - 4));
 1027|  1.58M|    tmp_pxl_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd - 4));
 1028|       |
 1029|  1.58M|    {
 1030|  1.58M|        LWORD64 mask_tc, mask_flag, mask;
 1031|  1.58M|        __m128i delta_vu0_16x8b, delta_vu1_16x8b;
 1032|  1.58M|        __m128i mask_tc_16x8, mask_16x8b, mask_flag_p_16x8b, mask_flag_q_16x8b;
 1033|  1.58M|        __m128i min_0_16x8b;
 1034|  1.58M|        __m128i const_16x8b;
 1035|  1.58M|        mask_flag = (((LWORD64)filter_flag_p) << 31) | (((LWORD64)filter_flag_q) << 63);
 1036|  1.58M|        mask_tc = (((LWORD64)tc_v) << 16) | ((LWORD64)tc_u);
 1037|  1.58M|        mask = 0xffff00000000ffffLL;
 1038|       |
 1039|  1.58M|        src_row_0_16x8b = _mm_unpacklo_epi64(src_row_0_16x8b, tmp_pxl_0_16x8b);
 1040|  1.58M|        src_row_2_16x8b = _mm_unpacklo_epi64(src_row_2_16x8b, tmp_pxl_1_16x8b);
 1041|       |
 1042|  1.58M|        mask_16x8b = _mm_load_si128((__m128i *)(shuffle_uv));
 1043|       |        // qv11 qu11 qv10 qu10 qv01 qu01 qv00 qu00 pv10 pu10 pv11 pu11 pv00 pu00 pv01 pu01
 1044|       |        // qv31 qu31 qv30 qu30 qv21 qu21 qv20 qu20 pv30 pu30 pv31 pu31 pv20 pu20 pv21 pu21
 1045|  1.58M|        delta_vu0_16x8b = _mm_shuffle_epi8(src_row_0_16x8b, mask_16x8b);
 1046|  1.58M|        delta_vu1_16x8b = _mm_shuffle_epi8(src_row_2_16x8b, mask_16x8b);
 1047|       |
 1048|  1.58M|        tmp_pxl_0_16x8b = _mm_unpacklo_epi64(delta_vu0_16x8b, delta_vu1_16x8b);
 1049|  1.58M|        tmp_pxl_1_16x8b = _mm_unpackhi_epi64(delta_vu0_16x8b, delta_vu1_16x8b);
 1050|       |        // pv30 pv31 pu30 pu31 pv20 pv21 pu20 pu21 pv10 pv11 pu10 pu11 pv00 pv01 pu00 pu01
 1051|       |        // qv31 qv30 qu31 qu30 qv21 qv20 qu21 qu20 qv11 qv10 qu11 qu10 qv01 qv00 qu01 qu00
 1052|  1.58M|        delta_vu0_16x8b = _mm_load_si128((__m128i *)delta0);
 1053|  1.58M|        delta_vu1_16x8b = _mm_load_si128((__m128i *)delta1);
 1054|       |
 1055|  1.58M|        delta_vu0_16x8b = _mm_maddubs_epi16(tmp_pxl_0_16x8b, delta_vu0_16x8b);
 1056|  1.58M|        delta_vu1_16x8b = _mm_maddubs_epi16(tmp_pxl_1_16x8b, delta_vu1_16x8b);
 1057|       |
 1058|       |        //generating offset 4
 1059|  1.58M|        const_16x8b = _mm_cmpeq_epi16(tmp_pxl_0_16x8b, tmp_pxl_0_16x8b);
 1060|       |        // filter flag mask and tc mask
 1061|  1.58M|        mask_tc_16x8 = _mm_loadl_epi64((__m128i *)(&mask_tc));
 1062|  1.58M|        mask_flag_q_16x8b = _mm_loadl_epi64((__m128i *)(&mask_flag));
 1063|       |
 1064|  1.58M|        mask_tc_16x8 = _mm_shuffle_epi32(mask_tc_16x8, 0x00);
 1065|  1.58M|        mask_flag_q_16x8b = _mm_srai_epi32(mask_flag_q_16x8b, 31);
 1066|       |        //-tc
 1067|  1.58M|        min_0_16x8b = _mm_sign_epi16(mask_tc_16x8, const_16x8b);
 1068|       |        //converting const 1
 1069|  1.58M|        const_16x8b = _mm_srli_epi16(const_16x8b, 15);
 1070|       |
 1071|       |        //filterp and filterq flag
 1072|  1.58M|        mask_flag_p_16x8b = _mm_shuffle_epi32(mask_flag_q_16x8b, 0x00);
 1073|  1.58M|        mask_flag_q_16x8b = _mm_shuffle_epi32(mask_flag_q_16x8b, 0x55);
 1074|       |
 1075|       |        //modified delta with a filter (1 -4 4 -1) available in 16 bit
 1076|  1.58M|        delta_vu0_16x8b = _mm_add_epi16(delta_vu0_16x8b, delta_vu1_16x8b);
 1077|       |        //converting const 4
 1078|  1.58M|        const_16x8b = _mm_slli_epi16(const_16x8b, 2);
 1079|       |
 1080|  1.58M|        mask_16x8b = _mm_loadl_epi64((__m128i *)(&mask));
 1081|       |        //offset addition
 1082|  1.58M|        delta_vu0_16x8b = _mm_add_epi16(delta_vu0_16x8b, const_16x8b);
 1083|       |        //eliminating q1
 1084|  1.58M|        tmp_pxl_1_16x8b = _mm_slli_epi16(tmp_pxl_1_16x8b, 8);
 1085|       |
 1086|  1.58M|        const_16x8b = _mm_setzero_si128();
 1087|       |        //filter after normalisation
 1088|  1.58M|        delta_vu0_16x8b = _mm_srai_epi16(delta_vu0_16x8b, 3);
 1089|  1.58M|        mask_16x8b = _mm_shuffle_epi32(mask_16x8b, 0x44);
 1090|       |
 1091|       |        //clipping MAX
 1092|  1.58M|        delta_vu0_16x8b = _mm_min_epi16(delta_vu0_16x8b, mask_tc_16x8);
 1093|       |        //getting p0 and eliminating p1
 1094|  1.58M|        tmp_pxl_0_16x8b = _mm_srli_epi16(tmp_pxl_0_16x8b, 8);
 1095|       |        //clipping MIN
 1096|  1.58M|        delta_vu0_16x8b = _mm_max_epi16(delta_vu0_16x8b, min_0_16x8b);
 1097|       |        //getting q0
 1098|  1.58M|        tmp_pxl_1_16x8b = _mm_srli_epi16(tmp_pxl_1_16x8b, 8);
 1099|       |        //masking filter flag
 1100|  1.58M|        delta_vu1_16x8b = _mm_and_si128(delta_vu0_16x8b, mask_flag_q_16x8b);
 1101|  1.58M|        delta_vu0_16x8b = _mm_and_si128(delta_vu0_16x8b, mask_flag_p_16x8b);
 1102|       |
 1103|       |        // q-delta ,p+delta
 1104|  1.58M|        tmp_pxl_1_16x8b = _mm_sub_epi16(tmp_pxl_1_16x8b, delta_vu1_16x8b);
 1105|  1.58M|        tmp_pxl_0_16x8b = _mm_add_epi16(tmp_pxl_0_16x8b, delta_vu0_16x8b);
 1106|       |        //merging q0 and p0 of respective rows
 1107|  1.58M|        delta_vu1_16x8b = _mm_unpackhi_epi32(tmp_pxl_0_16x8b, tmp_pxl_1_16x8b);
 1108|  1.58M|        delta_vu0_16x8b = _mm_unpacklo_epi32(tmp_pxl_0_16x8b, tmp_pxl_1_16x8b);
 1109|       |        // row 0 and row 1 packed , row2 and row3 packed
 1110|  1.58M|        delta_vu0_16x8b = _mm_packus_epi16(delta_vu0_16x8b, const_16x8b);
 1111|  1.58M|        delta_vu1_16x8b = _mm_packus_epi16(delta_vu1_16x8b, const_16x8b);
 1112|       |        //removing older pixel values
 1113|  1.58M|        src_row_0_16x8b = _mm_and_si128(src_row_0_16x8b, mask_16x8b);
 1114|  1.58M|        src_row_2_16x8b = _mm_and_si128(src_row_2_16x8b, mask_16x8b);
 1115|       |        //arranging modified pixels
 1116|  1.58M|        delta_vu0_16x8b = _mm_shuffle_epi32(delta_vu0_16x8b, 0xd8);
 1117|  1.58M|        delta_vu1_16x8b = _mm_shuffle_epi32(delta_vu1_16x8b, 0xd8);
 1118|  1.58M|        delta_vu0_16x8b = _mm_slli_epi64(delta_vu0_16x8b, 16);
 1119|  1.58M|        delta_vu1_16x8b = _mm_slli_epi64(delta_vu1_16x8b, 16);
 1120|       |        //plugging the modified values
 1121|  1.58M|        src_row_0_16x8b = _mm_or_si128(src_row_0_16x8b, delta_vu0_16x8b);
 1122|  1.58M|        src_row_2_16x8b = _mm_or_si128(src_row_2_16x8b, delta_vu1_16x8b);
 1123|       |
 1124|       |
 1125|       |        //geting values for row1 and row 3
 1126|  1.58M|        tmp_pxl_0_16x8b = _mm_srli_si128(src_row_0_16x8b, 8);
 1127|  1.58M|        tmp_pxl_1_16x8b = _mm_srli_si128(src_row_2_16x8b, 8);
 1128|       |
 1129|  1.58M|        _mm_storel_epi64((__m128i *)(pu1_src - 4), src_row_0_16x8b);
 1130|  1.58M|        _mm_storel_epi64((__m128i *)((pu1_src - 4) + src_strd), tmp_pxl_0_16x8b);
 1131|  1.58M|        _mm_storel_epi64((__m128i *)((pu1_src - 4) + 2 * src_strd), src_row_2_16x8b);
 1132|  1.58M|        _mm_storel_epi64((__m128i *)((pu1_src - 4) + 3 * src_strd), tmp_pxl_1_16x8b);
 1133|  1.58M|    }
 1134|       |
 1135|       |
 1136|       |
 1137|  1.58M|}
ihevc_deblk_chroma_horz_ssse3:
 1148|  1.59M|{
 1149|  1.59M|    WORD32 qp_indx_u, qp_chroma_u;
 1150|  1.59M|    WORD32 qp_indx_v, qp_chroma_v;
 1151|  1.59M|    WORD32 tc_indx_u, tc_u;
 1152|  1.59M|    WORD32 tc_indx_v, tc_v;
 1153|       |
 1154|       |
 1155|  1.59M|    __m128i tmp_p0_16x8b, src_p0_16x8b, src_q0_16x8b, tmp_q0_16x8b;
 1156|       |
 1157|  1.59M|    ASSERT(filter_flag_p || filter_flag_q);
  ------------------
  |  |   55|  1.59M|#define ASSERT(x) assert((x))
  ------------------
 1158|       |
 1159|       |    /* chroma processing is done only if BS is 2             */
 1160|       |    /* this function is assumed to be called only if BS is 2 */
 1161|  1.59M|    qp_indx_u = qp_offset_u + ((quant_param_p + quant_param_q + 1) >> 1);
 1162|  1.59M|    qp_chroma_u = qp_indx_u < 0 ? qp_indx_u : (qp_indx_u > 57 ? qp_indx_u - 6 : gai4_ihevc_qp_table[qp_indx_u]);
  ------------------
  |  Branch (1162:19): [True: 257, False: 1.59M]
  |  Branch (1162:48): [True: 0, False: 1.59M]
  ------------------
 1163|       |
 1164|  1.59M|    qp_indx_v = qp_offset_v + ((quant_param_p + quant_param_q + 1) >> 1);
 1165|  1.59M|    qp_chroma_v = qp_indx_v < 0 ? qp_indx_v : (qp_indx_v > 57 ? qp_indx_v - 6 : gai4_ihevc_qp_table[qp_indx_v]);
  ------------------
  |  Branch (1165:19): [True: 6.32k, False: 1.59M]
  |  Branch (1165:48): [True: 0, False: 1.59M]
  ------------------
 1166|       |
 1167|  1.59M|    tc_indx_u = CLIP3(qp_chroma_u + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  1.59M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.59M]
  |  |  |  Branch (40:53): [True: 8, False: 1.59M]
  |  |  ------------------
  ------------------
 1168|  1.59M|    tc_u = gai4_ihevc_tc_table[tc_indx_u];
 1169|       |
 1170|  1.59M|    tc_indx_v = CLIP3(qp_chroma_v + 2 + (tc_offset_div2 << 1), 0, 53);
  ------------------
  |  |   40|  1.59M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 1.59M]
  |  |  |  Branch (40:53): [True: 5.74k, False: 1.59M]
  |  |  ------------------
  ------------------
 1171|  1.59M|    tc_v = gai4_ihevc_tc_table[tc_indx_v];
 1172|       |
 1173|  1.59M|    if(0 == tc_u && 0 == tc_v)
  ------------------
  |  Branch (1173:8): [True: 51.3k, False: 1.54M]
  |  Branch (1173:21): [True: 50.7k, False: 507]
  ------------------
 1174|  50.7k|    {
 1175|  50.7k|        return;
 1176|  50.7k|    }
 1177|  1.54M|    tmp_p0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src - 2 * src_strd));
 1178|  1.54M|    src_p0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src - src_strd));
 1179|  1.54M|    src_q0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));
 1180|  1.54M|    tmp_q0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd));
 1181|       |
 1182|  1.54M|    {
 1183|  1.54M|        LWORD64 mask_tc, mask_flag;
 1184|  1.54M|        __m128i delta_vu0_16x8b, delta_vu1_16x8b;
 1185|  1.54M|        __m128i mask_tc_16x8, mask_16x8b, mask_flag_p_16x8b, mask_flag_q_16x8b;
 1186|  1.54M|        __m128i min_0_16x8b;
 1187|  1.54M|        __m128i const_16x8b;
 1188|  1.54M|        mask_flag = (((LWORD64)filter_flag_p) << 31) | (((LWORD64)filter_flag_q) << 63);
 1189|  1.54M|        mask_tc = (((LWORD64)tc_v) << 16) | ((LWORD64)tc_u);
 1190|       |
 1191|  1.54M|        tmp_p0_16x8b = _mm_unpacklo_epi8(tmp_p0_16x8b, src_p0_16x8b);
 1192|  1.54M|        tmp_q0_16x8b = _mm_unpacklo_epi8(src_q0_16x8b, tmp_q0_16x8b);
 1193|       |
 1194|       |        // pv30 pv31 pu30 pu31 pv20 pv21 pu20 pu21 pv10 pv11 pu10 pu11 pv00 pv01 pu00 pu01
 1195|       |        // qv31 qv30 qu31 qu30 qv21 qv20 qu21 qu20 qv11 qv10 qu11 qu10 qv01 qv00 qu01 qu00
 1196|  1.54M|        delta_vu0_16x8b = _mm_load_si128((__m128i *)delta0);
 1197|  1.54M|        delta_vu1_16x8b = _mm_load_si128((__m128i *)delta1);
 1198|       |
 1199|  1.54M|        delta_vu0_16x8b = _mm_maddubs_epi16(tmp_p0_16x8b, delta_vu0_16x8b);
 1200|  1.54M|        delta_vu1_16x8b = _mm_maddubs_epi16(tmp_q0_16x8b, delta_vu1_16x8b);
 1201|       |
 1202|       |
 1203|       |        // filter flag mask and tc mask
 1204|  1.54M|        mask_tc_16x8 = _mm_loadl_epi64((__m128i *)(&mask_tc));
 1205|  1.54M|        mask_flag_q_16x8b = _mm_loadl_epi64((__m128i *)(&mask_flag));
 1206|       |
 1207|       |        //generating offset 4
 1208|  1.54M|        const_16x8b = _mm_cmpeq_epi16(tmp_p0_16x8b, tmp_p0_16x8b);
 1209|       |        // filter flag mask and tc mask
 1210|  1.54M|        mask_tc_16x8 = _mm_shuffle_epi32(mask_tc_16x8, 0x00);
 1211|  1.54M|        mask_flag_q_16x8b = _mm_srai_epi32(mask_flag_q_16x8b, 31);
 1212|       |        //-tc
 1213|  1.54M|        min_0_16x8b = _mm_sign_epi16(mask_tc_16x8, const_16x8b);
 1214|       |        //converting const 1
 1215|  1.54M|        const_16x8b = _mm_srli_epi16(const_16x8b, 15);
 1216|       |
 1217|       |        //filterp
 1218|  1.54M|        mask_flag_p_16x8b = _mm_shuffle_epi32(mask_flag_q_16x8b, 0x00);
 1219|       |
 1220|       |
 1221|       |        //converting const 4
 1222|  1.54M|        const_16x8b = _mm_slli_epi16(const_16x8b, 2);
 1223|       |        //modified delta with a filter (1 -4 4 -1) available in 16 bit
 1224|  1.54M|        delta_vu0_16x8b = _mm_add_epi16(delta_vu0_16x8b, delta_vu1_16x8b);
 1225|       |
 1226|       |        //filterq flag
 1227|  1.54M|        mask_flag_q_16x8b = _mm_shuffle_epi32(mask_flag_q_16x8b, 0x55);
 1228|       |        //offset addition
 1229|  1.54M|        delta_vu0_16x8b = _mm_add_epi16(delta_vu0_16x8b, const_16x8b);
 1230|  1.54M|        mask_16x8b = _mm_setzero_si128();
 1231|       |        //filter after normalisation
 1232|  1.54M|        delta_vu0_16x8b = _mm_srai_epi16(delta_vu0_16x8b, 3);
 1233|       |
 1234|       |        //converting p0 to 16bit
 1235|  1.54M|        src_p0_16x8b = _mm_unpacklo_epi8(src_p0_16x8b, mask_16x8b);
 1236|       |        //clipping MAX
 1237|  1.54M|        delta_vu0_16x8b = _mm_min_epi16(delta_vu0_16x8b, mask_tc_16x8);
 1238|       |        //converting q0 to 16bit
 1239|  1.54M|        src_q0_16x8b = _mm_unpacklo_epi8(src_q0_16x8b, mask_16x8b);
 1240|       |        //clipping MIN
 1241|  1.54M|        delta_vu0_16x8b = _mm_max_epi16(delta_vu0_16x8b, min_0_16x8b);
 1242|       |
 1243|       |        //masking filter flag
 1244|  1.54M|        delta_vu1_16x8b = _mm_and_si128(delta_vu0_16x8b, mask_flag_q_16x8b);
 1245|  1.54M|        delta_vu0_16x8b = _mm_and_si128(delta_vu0_16x8b, mask_flag_p_16x8b);
 1246|       |
 1247|       |        // q-delta ,p+delta
 1248|  1.54M|        src_q0_16x8b = _mm_sub_epi16(src_q0_16x8b, delta_vu1_16x8b);
 1249|  1.54M|        src_p0_16x8b = _mm_add_epi16(src_p0_16x8b, delta_vu0_16x8b);
 1250|       |
 1251|       |        // p0 and q0 packed
 1252|  1.54M|        src_q0_16x8b = _mm_packus_epi16(src_q0_16x8b, mask_16x8b);
 1253|  1.54M|        src_p0_16x8b = _mm_packus_epi16(src_p0_16x8b, mask_16x8b);
 1254|       |
 1255|       |
 1256|       |
 1257|  1.54M|        _mm_storel_epi64((__m128i *)(pu1_src - src_strd), src_p0_16x8b);
 1258|  1.54M|        _mm_storel_epi64((__m128i *)(pu1_src), src_q0_16x8b);
 1259|       |
 1260|  1.54M|    }
 1261|       |
 1262|       |
 1263|  1.54M|}

ihevc_inter_pred_luma_copy_w16out_sse42:
  116|   460k|{
  117|   460k|    WORD32 row, col;
  118|   460k|    __m128i  src0_16x8b, src1_16x8b, src2_16x8b, src3_16x8b;
  119|   460k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|   460k|#define UNUSED(x) ((void)(x))
  ------------------
  120|   460k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|   460k|#define ASSERT(x) assert((x))
  ------------------
  121|   460k|    ASSERT(ht % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|   460k|#define ASSERT(x) assert((x))
  ------------------
  122|       |
  123|   460k|    if(0 == (wd & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (123:8): [True: 460k, False: 245]
  ------------------
  124|   460k|    {
  125|  1.41M|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (125:22): [True: 950k, False: 460k]
  ------------------
  126|   950k|        {
  127|  2.01M|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (127:26): [True: 1.06M, False: 950k]
  ------------------
  128|  1.06M|            {
  129|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  130|  1.06M|                src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  131|  1.06M|                src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  132|  1.06M|                src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  133|  1.06M|                src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  134|       |
  135|  1.06M|                src0_16x8b = _mm_cvtepu8_epi16(src0_16x8b);
  136|  1.06M|                src1_16x8b = _mm_cvtepu8_epi16(src1_16x8b);
  137|  1.06M|                src2_16x8b = _mm_cvtepu8_epi16(src2_16x8b);
  138|  1.06M|                src3_16x8b = _mm_cvtepu8_epi16(src3_16x8b);
  139|       |
  140|  1.06M|                src0_16x8b = _mm_slli_epi16(src0_16x8b,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|  1.06M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.06M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  141|  1.06M|                src1_16x8b = _mm_slli_epi16(src1_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  1.06M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.06M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  142|  1.06M|                src2_16x8b = _mm_slli_epi16(src2_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  1.06M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.06M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  143|  1.06M|                src3_16x8b = _mm_slli_epi16(src3_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  1.06M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.06M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  144|       |
  145|       |                /* storing 16 8-bit output values */
  146|  1.06M|                _mm_storeu_si128((__m128i *)(pi2_dst), src0_16x8b);                 /* row =0 */
  147|  1.06M|                _mm_storeu_si128((__m128i *)(pi2_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  148|  1.06M|                _mm_storeu_si128((__m128i *)(pi2_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  149|  1.06M|                _mm_storeu_si128((__m128i *)(pi2_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  150|       |
  151|  1.06M|                pu1_src += 8; /* pointer update */
  152|  1.06M|                pi2_dst += 8; /* pointer update */
  153|  1.06M|            } /* inner for loop ends here(8-output values in single iteration) */
  154|       |
  155|   950k|            pu1_src += 4 * src_strd - wd; /* pointer update */
  156|   950k|            pi2_dst += 4 * dst_strd - wd; /* pointer update */
  157|   950k|        }
  158|   460k|    }
  159|    245|    else /* wd = multiple of 4 case */
  160|    245|    {
  161|    825|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (161:22): [True: 580, False: 245]
  ------------------
  162|    580|        {
  163|  1.36k|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (163:26): [True: 780, False: 580]
  ------------------
  164|    780|            {
  165|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  166|    780|                src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  167|    780|                src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  168|    780|                src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  169|    780|                src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  170|       |
  171|    780|                src0_16x8b = _mm_cvtepu8_epi16(src0_16x8b);
  172|    780|                src1_16x8b = _mm_cvtepu8_epi16(src1_16x8b);
  173|    780|                src2_16x8b = _mm_cvtepu8_epi16(src2_16x8b);
  174|    780|                src3_16x8b = _mm_cvtepu8_epi16(src3_16x8b);
  175|       |
  176|    780|                src0_16x8b = _mm_slli_epi16(src0_16x8b,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|    780|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    780|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  177|    780|                src1_16x8b = _mm_slli_epi16(src1_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    780|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    780|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  178|    780|                src2_16x8b = _mm_slli_epi16(src2_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    780|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    780|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  179|    780|                src3_16x8b = _mm_slli_epi16(src3_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    780|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    780|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  180|       |
  181|       |                /* storing 16 8-bit output values */
  182|    780|                _mm_storel_epi64((__m128i *)(pi2_dst), src0_16x8b);                 /* row =0 */
  183|    780|                _mm_storel_epi64((__m128i *)(pi2_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  184|    780|                _mm_storel_epi64((__m128i *)(pi2_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  185|    780|                _mm_storel_epi64((__m128i *)(pi2_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  186|       |
  187|    780|                pu1_src += 4; /* pointer update */
  188|    780|                pi2_dst += 4; /* pointer update */
  189|    780|            } /* inner for loop ends here(4-output values in single iteration) */
  190|       |
  191|    580|            pu1_src += 4 * src_strd - wd; /* pointer update */
  192|    580|            pi2_dst += 4 * dst_strd - wd; /* pointer update */
  193|    580|        }
  194|    245|    }
  195|   460k|}
ihevc_inter_pred_chroma_copy_sse42:
  243|  13.6k|{
  244|  13.6k|    WORD32 row, col, wdx2;
  245|  13.6k|    __m128i  src0_16x8b, src1_16x8b, src2_16x8b, src3_16x8b;
  246|       |
  247|  13.6k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  13.6k|#define ASSERT(x) assert((x))
  ------------------
  248|  13.6k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  13.6k|#define ASSERT(x) assert((x))
  ------------------
  249|  13.6k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  13.6k|#define UNUSED(x) ((void)(x))
  ------------------
  250|  13.6k|    wdx2 = wd * 2;
  251|       |
  252|  13.6k|    if(0 == (ht & 3)) /* ht multiple of 4 */
  ------------------
  |  Branch (252:8): [True: 8.79k, False: 4.84k]
  ------------------
  253|  8.79k|    {
  254|  8.79k|        if(0 == (wdx2 & 15)) /* wdx2 multiple of 16 case */
  ------------------
  |  Branch (254:12): [True: 881, False: 7.91k]
  ------------------
  255|    881|        {
  256|  3.65k|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (256:26): [True: 2.77k, False: 881]
  ------------------
  257|  2.77k|            {
  258|  7.77k|                for(col = 0; col < wdx2; col += 16)
  ------------------
  |  Branch (258:30): [True: 5.00k, False: 2.77k]
  ------------------
  259|  5.00k|                {
  260|       |                    /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  261|  5.00k|                    src0_16x8b = _mm_loadu_si128((__m128i *)(pu1_src));                /* row =0 */
  262|  5.00k|                    src1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  263|  5.00k|                    src2_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  264|  5.00k|                    src3_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  265|       |
  266|       |                    /* storing 16 8-bit output values */
  267|  5.00k|                    _mm_storeu_si128((__m128i *)(pu1_dst), src0_16x8b);                 /* row =0 */
  268|  5.00k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  269|  5.00k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  270|  5.00k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  271|       |
  272|  5.00k|                    pu1_src += 16; /* pointer update */
  273|  5.00k|                    pu1_dst += 16; /* pointer update */
  274|  5.00k|                } /* inner for loop ends here(16-output values in single iteration) */
  275|       |
  276|  2.77k|                pu1_src += 4 * src_strd - wdx2; /* pointer update */
  277|  2.77k|                pu1_dst += 4 * dst_strd - wdx2; /* pointer update */
  278|  2.77k|            }
  279|       |
  280|    881|        }
  281|  7.91k|        else if(0 == (wdx2 & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (281:17): [True: 5.96k, False: 1.94k]
  ------------------
  282|  5.96k|        {
  283|  11.9k|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (283:26): [True: 6.01k, False: 5.96k]
  ------------------
  284|  6.01k|            {
  285|  12.0k|                for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (285:30): [True: 6.02k, False: 6.01k]
  ------------------
  286|  6.02k|                {
  287|       |                    /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  288|  6.02k|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  289|  6.02k|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  290|  6.02k|                    src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  291|  6.02k|                    src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  292|       |
  293|       |                    /* storing 16 8-bit output values */
  294|  6.02k|                    _mm_storel_epi64((__m128i *)(pu1_dst), src0_16x8b);                 /* row =0 */
  295|  6.02k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  296|  6.02k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  297|  6.02k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  298|       |
  299|  6.02k|                    pu1_src += 8; /* pointer update */
  300|  6.02k|                    pu1_dst += 8; /* pointer update */
  301|  6.02k|                } /*  inner for loop ends here(8-output values in single iteration) */
  302|       |
  303|  6.01k|                pu1_src += 4 * src_strd - wdx2; /* pointer update */
  304|  6.01k|                pu1_dst += 4 * dst_strd - wdx2; /* pointer update */
  305|  6.01k|            }
  306|  5.96k|        }
  307|  1.94k|        else /* wdx2 = multiple of 4 case */
  308|  1.94k|        {
  309|  1.94k|            WORD32 dst0, dst1, dst2, dst3;
  310|  3.90k|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (310:26): [True: 1.95k, False: 1.94k]
  ------------------
  311|  1.95k|            {
  312|  3.94k|                for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (312:30): [True: 1.98k, False: 1.95k]
  ------------------
  313|  1.98k|                {
  314|       |                    /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  315|  1.98k|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  316|  1.98k|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  317|  1.98k|                    src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  318|  1.98k|                    src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  319|       |
  320|  1.98k|                    dst0 = _mm_cvtsi128_si32(src0_16x8b);
  321|  1.98k|                    dst1 = _mm_cvtsi128_si32(src1_16x8b);
  322|  1.98k|                    dst2 = _mm_cvtsi128_si32(src2_16x8b);
  323|  1.98k|                    dst3 = _mm_cvtsi128_si32(src3_16x8b);
  324|       |
  325|       |                    /* storing 4 8-bit output values */
  326|  1.98k|                    *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0; /* row =0 */
  327|  1.98k|                    *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1; /* row =1 */
  328|  1.98k|                    *(WORD32 *)(&pu1_dst[2 * dst_strd]) = dst2; /* row =2 */
  329|  1.98k|                    *(WORD32 *)(&pu1_dst[3 * dst_strd]) = dst3; /* row =3 */
  330|       |
  331|  1.98k|                    pu1_src += 4; /* pointer update */
  332|  1.98k|                    pu1_dst += 4; /* pointer update */
  333|  1.98k|                } /*  inner for loop ends here(4- output values in single iteration) */
  334|       |
  335|  1.95k|                pu1_src += 4 * src_strd - wdx2; /* pointer update */
  336|  1.95k|                pu1_dst += 4 * dst_strd - wdx2; /* pointer update */
  337|  1.95k|            }
  338|  1.94k|        }
  339|  8.79k|    }
  340|  4.84k|    else /* ht multiple of 2 */
  341|  4.84k|    {
  342|  4.84k|        if(0 == (wdx2 & 15)) /* wdx2 multiple of 16 case */
  ------------------
  |  Branch (342:12): [True: 23, False: 4.82k]
  ------------------
  343|     23|        {
  344|     80|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (344:26): [True: 57, False: 23]
  ------------------
  345|     57|            {
  346|    114|                for(col = 0; col < wdx2; col += 16)
  ------------------
  |  Branch (346:30): [True: 57, False: 57]
  ------------------
  347|     57|                {
  348|       |                    /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  349|     57|                    src0_16x8b = _mm_loadu_si128((__m128i *)(pu1_src));                /* row =0 */
  350|     57|                    src1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  351|       |
  352|       |                    /* storing 16 8-bit output values */
  353|     57|                    _mm_storeu_si128((__m128i *)(pu1_dst), src0_16x8b);                 /* row =0 */
  354|     57|                    _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  355|       |
  356|     57|                    pu1_src += 16; /* pointer update */
  357|     57|                    pu1_dst += 16; /* pointer update */
  358|     57|                } /* inner for loop ends here(16-output values in single iteration) */
  359|       |
  360|     57|                pu1_src += 2 * src_strd - wdx2; /* pointer update */
  361|     57|                pu1_dst += 2 * dst_strd - wdx2; /* pointer update */
  362|     57|            }
  363|       |
  364|     23|        }
  365|  4.82k|        else if(0 == (wdx2 & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (365:17): [True: 4.82k, False: 0]
  ------------------
  366|  4.82k|        {
  367|  9.65k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (367:26): [True: 4.82k, False: 4.82k]
  ------------------
  368|  4.82k|            {
  369|  9.65k|                for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (369:30): [True: 4.82k, False: 4.82k]
  ------------------
  370|  4.82k|                {
  371|       |                    /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  372|  4.82k|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  373|  4.82k|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  374|       |
  375|       |                    /* storing 16 8-bit output values */
  376|  4.82k|                    _mm_storel_epi64((__m128i *)(pu1_dst), src0_16x8b);                 /* row =0 */
  377|  4.82k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  378|       |
  379|  4.82k|                    pu1_src += 8; /* pointer update */
  380|  4.82k|                    pu1_dst += 8; /* pointer update */
  381|  4.82k|                } /*  inner for loop ends here(8-output values in single iteration) */
  382|       |
  383|  4.82k|                pu1_src += 2 * src_strd - wdx2; /* pointer update */
  384|  4.82k|                pu1_dst += 2 * dst_strd - wdx2; /* pointer update */
  385|  4.82k|            }
  386|  4.82k|        }
  387|      0|        else /* wdx2 = multiple of 4 case */
  388|      0|        {
  389|      0|            WORD32 dst0, dst1;
  390|      0|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (390:26): [True: 0, False: 0]
  ------------------
  391|      0|            {
  392|      0|                for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (392:30): [True: 0, False: 0]
  ------------------
  393|      0|                {
  394|       |                    /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  395|      0|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  396|      0|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  397|       |
  398|      0|                    dst0 = _mm_cvtsi128_si32(src0_16x8b);
  399|      0|                    dst1 = _mm_cvtsi128_si32(src1_16x8b);
  400|       |
  401|       |
  402|       |                    /* storing 4 8-bit output values */
  403|      0|                    *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0; /* row =0 */
  404|      0|                    *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1; /* row =1 */
  405|       |
  406|      0|                    pu1_src += 4; /* pointer update */
  407|      0|                    pu1_dst += 4; /* pointer update */
  408|      0|                } /*  inner for loop ends here(4- output values in single iteration) */
  409|       |
  410|      0|                pu1_src += 2 * src_strd - wdx2; /* pointer update */
  411|      0|                pu1_dst += 2 * dst_strd - wdx2; /* pointer update */
  412|      0|            }
  413|      0|        }
  414|  4.84k|    }
  415|  13.6k|}
ihevc_inter_pred_chroma_copy_w16out_sse42:
  464|   454k|{
  465|   454k|    WORD32 row, col, wdx2;
  466|   454k|    __m128i  src0_16x8b, src1_16x8b, src2_16x8b, src3_16x8b;
  467|       |
  468|   454k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   454k|#define ASSERT(x) assert((x))
  ------------------
  469|   454k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   454k|#define ASSERT(x) assert((x))
  ------------------
  470|   454k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|   454k|#define UNUSED(x) ((void)(x))
  ------------------
  471|   454k|    wdx2 = wd * 2;
  472|       |
  473|   454k|    if(0 == (ht & 3)) /* multiple of 4 case */
  ------------------
  |  Branch (473:8): [True: 454k, False: 525]
  ------------------
  474|   454k|    {
  475|   454k|        if(0 == (wdx2 & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (475:12): [True: 454k, False: 219]
  ------------------
  476|   454k|        {
  477|   926k|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (477:26): [True: 472k, False: 454k]
  ------------------
  478|   472k|            {
  479|  1.00M|                for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (479:30): [True: 530k, False: 472k]
  ------------------
  480|   530k|                {
  481|       |                    /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  482|   530k|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  483|   530k|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  484|   530k|                    src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  485|   530k|                    src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  486|       |
  487|   530k|                    src0_16x8b = _mm_cvtepu8_epi16(src0_16x8b);
  488|   530k|                    src1_16x8b = _mm_cvtepu8_epi16(src1_16x8b);
  489|   530k|                    src2_16x8b = _mm_cvtepu8_epi16(src2_16x8b);
  490|   530k|                    src3_16x8b = _mm_cvtepu8_epi16(src3_16x8b);
  491|       |
  492|   530k|                    src0_16x8b = _mm_slli_epi16(src0_16x8b,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|   530k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   530k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  493|   530k|                    src1_16x8b = _mm_slli_epi16(src1_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   530k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   530k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  494|   530k|                    src2_16x8b = _mm_slli_epi16(src2_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   530k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   530k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  495|   530k|                    src3_16x8b = _mm_slli_epi16(src3_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   530k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   530k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  496|       |
  497|       |                    /* storing 16 8-bit output values */
  498|   530k|                    _mm_storeu_si128((__m128i *)(pi2_dst), src0_16x8b);                 /* row =0 */
  499|   530k|                    _mm_storeu_si128((__m128i *)(pi2_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  500|   530k|                    _mm_storeu_si128((__m128i *)(pi2_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  501|   530k|                    _mm_storeu_si128((__m128i *)(pi2_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  502|       |
  503|   530k|                    pu1_src += 8; /* pointer update */
  504|   530k|                    pi2_dst += 8; /* pointer update */
  505|   530k|                } /* inner for loop ends here(8-output values in single iteration) */
  506|       |
  507|   472k|                pu1_src += 4 * src_strd - wdx2; /* pointer update */
  508|   472k|                pi2_dst += 4 * dst_strd - wdx2; /* pointer update */
  509|   472k|            }
  510|   454k|        }
  511|    219|        else /* wdx2 = multiple of 4 case */
  512|    219|        {
  513|    495|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (513:26): [True: 276, False: 219]
  ------------------
  514|    276|            {
  515|    644|                for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (515:30): [True: 368, False: 276]
  ------------------
  516|    368|                {
  517|       |                    /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  518|    368|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  519|    368|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  520|    368|                    src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  521|    368|                    src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  522|       |
  523|    368|                    src0_16x8b = _mm_cvtepu8_epi16(src0_16x8b);
  524|    368|                    src1_16x8b = _mm_cvtepu8_epi16(src1_16x8b);
  525|    368|                    src2_16x8b = _mm_cvtepu8_epi16(src2_16x8b);
  526|    368|                    src3_16x8b = _mm_cvtepu8_epi16(src3_16x8b);
  527|       |
  528|    368|                    src0_16x8b = _mm_slli_epi16(src0_16x8b,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|    368|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    368|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  529|    368|                    src1_16x8b = _mm_slli_epi16(src1_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    368|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    368|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  530|    368|                    src2_16x8b = _mm_slli_epi16(src2_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    368|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    368|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  531|    368|                    src3_16x8b = _mm_slli_epi16(src3_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    368|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    368|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  532|       |
  533|       |                    /* storing 16 8-bit output values */
  534|    368|                    _mm_storel_epi64((__m128i *)(pi2_dst), src0_16x8b);                 /* row =0 */
  535|    368|                    _mm_storel_epi64((__m128i *)(pi2_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  536|    368|                    _mm_storel_epi64((__m128i *)(pi2_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  537|    368|                    _mm_storel_epi64((__m128i *)(pi2_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  538|       |
  539|    368|                    pu1_src += 4; /* pointer update */
  540|    368|                    pi2_dst += 4; /* pointer update */
  541|    368|                } /* inner for loop ends here(4-output values in single iteration) */
  542|       |
  543|    276|                pu1_src += 4 * src_strd - wdx2; /* pointer update */
  544|    276|                pi2_dst += 4 * dst_strd - wdx2; /* pointer update */
  545|    276|            }
  546|    219|        }
  547|   454k|    }
  548|    525|    else  /* ht multiple of 2 case */
  549|    525|    {
  550|    525|        if(0 == (wdx2 & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (550:12): [True: 300, False: 225]
  ------------------
  551|    300|        {
  552|    646|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (552:26): [True: 346, False: 300]
  ------------------
  553|    346|            {
  554|    804|                for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (554:30): [True: 458, False: 346]
  ------------------
  555|    458|                {
  556|       |                    /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  557|    458|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  558|    458|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  559|       |
  560|    458|                    src0_16x8b = _mm_cvtepu8_epi16(src0_16x8b);
  561|    458|                    src1_16x8b = _mm_cvtepu8_epi16(src1_16x8b);
  562|       |
  563|    458|                    src0_16x8b = _mm_slli_epi16(src0_16x8b,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|    458|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    458|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  564|    458|                    src1_16x8b = _mm_slli_epi16(src1_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|    458|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|    458|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  565|       |
  566|       |                    /* storing 16 8-bit output values */
  567|    458|                    _mm_storeu_si128((__m128i *)(pi2_dst), src0_16x8b);                 /* row =0 */
  568|    458|                    _mm_storeu_si128((__m128i *)(pi2_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  569|       |
  570|    458|                    pu1_src += 8; /* pointer update */
  571|    458|                    pi2_dst += 8; /* pointer update */
  572|    458|                } /* inner for loop ends here(8-output values in single iteration) */
  573|       |
  574|    346|                pu1_src += 2 * src_strd - wdx2; /* pointer update */
  575|    346|                pi2_dst += 2 * dst_strd - wdx2; /* pointer update */
  576|    346|            }
  577|    300|        }
  578|    225|        else /* wdx2 = multiple of 4 case */
  579|    225|        {
  580|    225|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (580:26): [True: 0, False: 225]
  ------------------
  581|      0|            {
  582|      0|                for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (582:30): [True: 0, False: 0]
  ------------------
  583|      0|                {
  584|       |                    /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  585|      0|                    src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  586|      0|                    src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  587|       |
  588|      0|                    src0_16x8b = _mm_cvtepu8_epi16(src0_16x8b);
  589|      0|                    src1_16x8b = _mm_cvtepu8_epi16(src1_16x8b);
  590|       |
  591|      0|                    src0_16x8b = _mm_slli_epi16(src0_16x8b,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|      0|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|      0|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  592|      0|                    src1_16x8b = _mm_slli_epi16(src1_16x8b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|      0|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|      0|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  593|       |
  594|       |                    /* storing 16 8-bit output values */
  595|      0|                    _mm_storel_epi64((__m128i *)(pi2_dst), src0_16x8b);                 /* row =0 */
  596|      0|                    _mm_storel_epi64((__m128i *)(pi2_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  597|       |
  598|      0|                    pu1_src += 4; /* pointer update */
  599|      0|                    pi2_dst += 4; /* pointer update */
  600|      0|                } /* inner for loop ends here(4-output values in single iteration) */
  601|       |
  602|      0|                pu1_src += 2 * src_strd - wdx2; /* pointer update */
  603|      0|                pi2_dst += 2 * dst_strd - wdx2; /* pointer update */
  604|      0|            }
  605|    225|        }
  606|    525|    }
  607|   454k|}

ihevc_inter_pred_luma_copy_ssse3:
  125|  45.6k|{
  126|       |
  127|  45.6k|    WORD32 row, col;
  128|  45.6k|    __m128i  src0_16x8b, src1_16x8b, src2_16x8b, src3_16x8b;
  129|  45.6k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  45.6k|#define UNUSED(x) ((void)(x))
  ------------------
  130|  45.6k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  45.6k|#define ASSERT(x) assert((x))
  ------------------
  131|  45.6k|    ASSERT(ht % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  45.6k|#define ASSERT(x) assert((x))
  ------------------
  132|       |
  133|       |/*  outer for loop starts from here */
  134|  45.6k|    if(0 == (wd & 15)) /* wd multiple of 16 case */
  ------------------
  |  Branch (134:8): [True: 5.45k, False: 40.1k]
  ------------------
  135|  5.45k|    {
  136|  39.0k|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (136:22): [True: 33.6k, False: 5.45k]
  ------------------
  137|  33.6k|        {
  138|   104k|            for(col = 0; col < wd; col += 16)
  ------------------
  |  Branch (138:26): [True: 70.8k, False: 33.6k]
  ------------------
  139|  70.8k|            {
  140|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  141|  70.8k|                src0_16x8b = _mm_loadu_si128((__m128i *)(pu1_src));                /* row =0 */
  142|  70.8k|                src1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  143|  70.8k|                src2_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  144|  70.8k|                src3_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  145|       |
  146|       |                /* storing 16 8-bit output values */
  147|  70.8k|                _mm_storeu_si128((__m128i *)(pu1_dst), src0_16x8b);                 /* row =0 */
  148|  70.8k|                _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  149|  70.8k|                _mm_storeu_si128((__m128i *)(pu1_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  150|  70.8k|                _mm_storeu_si128((__m128i *)(pu1_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  151|       |
  152|  70.8k|                pu1_src += 16; /* pointer update */
  153|  70.8k|                pu1_dst += 16; /* pointer update */
  154|  70.8k|            } /* inner for loop ends here(16-output values in single iteration) */
  155|       |
  156|  33.6k|            pu1_src += 4 * src_strd - wd; /* pointer update */
  157|  33.6k|            pu1_dst += 4 * dst_strd - wd; /* pointer update */
  158|  33.6k|        }
  159|       |
  160|  5.45k|    }
  161|  40.1k|    else if(0 == (wd & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (161:13): [True: 33.3k, False: 6.78k]
  ------------------
  162|  33.3k|    {
  163|  90.4k|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (163:22): [True: 57.1k, False: 33.3k]
  ------------------
  164|  57.1k|        {
  165|   114k|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (165:26): [True: 57.4k, False: 57.1k]
  ------------------
  166|  57.4k|            {
  167|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  168|  57.4k|                src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  169|  57.4k|                src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  170|  57.4k|                src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  171|  57.4k|                src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  172|       |
  173|       |                /* storing 16 8-bit output values */
  174|  57.4k|                _mm_storel_epi64((__m128i *)(pu1_dst), src0_16x8b);                 /* row =0 */
  175|  57.4k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src1_16x8b);  /* row =1 */
  176|  57.4k|                _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src2_16x8b);  /* row =2 */
  177|  57.4k|                _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src3_16x8b);  /* row =3 */
  178|       |
  179|  57.4k|                pu1_src += 8; /* pointer update */
  180|  57.4k|                pu1_dst += 8; /* pointer update */
  181|  57.4k|            } /*  inner for loop ends here(8-output values in single iteration) */
  182|       |
  183|  57.1k|            pu1_src += 4 * src_strd - wd; /* pointer update */
  184|  57.1k|            pu1_dst += 4 * dst_strd - wd; /* pointer update */
  185|  57.1k|        }
  186|  33.3k|    }
  187|  6.78k|    else /* wd = multiple of 4 case */
  188|  6.78k|    {
  189|  6.78k|        WORD32 dst0, dst1, dst2, dst3;
  190|  21.0k|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (190:22): [True: 14.2k, False: 6.78k]
  ------------------
  191|  14.2k|        {
  192|  29.0k|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (192:26): [True: 14.8k, False: 14.2k]
  ------------------
  193|  14.8k|            {
  194|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
  195|  14.8k|                src0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));                /* row =0 */
  196|  14.8k|                src1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 1 * src_strd)); /* row =1 */
  197|  14.8k|                src2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 2 * src_strd)); /* row =2 */
  198|  14.8k|                src3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + 3 * src_strd)); /* row =3 */
  199|       |
  200|  14.8k|                dst0 = _mm_cvtsi128_si32(src0_16x8b);
  201|  14.8k|                dst1 = _mm_cvtsi128_si32(src1_16x8b);
  202|  14.8k|                dst2 = _mm_cvtsi128_si32(src2_16x8b);
  203|  14.8k|                dst3 = _mm_cvtsi128_si32(src3_16x8b);
  204|       |
  205|       |                /* storing 4 8-bit output values */
  206|  14.8k|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0; /* row =0 */
  207|  14.8k|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1; /* row =1 */
  208|  14.8k|                *(WORD32 *)(&pu1_dst[2 * dst_strd]) = dst2; /* row =2 */
  209|  14.8k|                *(WORD32 *)(&pu1_dst[3 * dst_strd]) = dst3; /* row =3 */
  210|       |
  211|  14.8k|                pu1_src += 4; /* pointer update */
  212|  14.8k|                pu1_dst += 4; /* pointer update */
  213|  14.8k|            } /*  inner for loop ends here(4- output values in single iteration) */
  214|       |
  215|  14.2k|            pu1_src += 4 * src_strd - wd; /* pointer update */
  216|  14.2k|            pu1_dst += 4 * dst_strd - wd; /* pointer update */
  217|  14.2k|        }
  218|  6.78k|    }
  219|  45.6k|}
ihevc_inter_pred_luma_horz_ssse3:
  269|  20.7k|{
  270|  20.7k|    WORD32 row, col;
  271|       |
  272|       |    /* all 128 bit registers are named with a suffix mxnb, where m is the */
  273|       |    /* number of n bits packed in the register                            */
  274|  20.7k|    __m128i zero_8x16b, offset_8x16b, mask_low_32b, mask_high_96b;
  275|  20.7k|    __m128i src_temp1_16x8b, src_temp2_16x8b, src_temp3_16x8b, src_temp4_16x8b, src_temp5_16x8b, src_temp6_16x8b;
  276|  20.7k|    __m128i src_temp11_16x8b, src_temp12_16x8b, src_temp13_16x8b, src_temp14_16x8b, src_temp15_16x8b, src_temp16_16x8b;
  277|  20.7k|    __m128i res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b, res_temp4_8x16b, res_temp5_8x16b, res_temp6_8x16b, res_temp7_8x16b, res_temp8_8x16b;
  278|  20.7k|    __m128i res_temp11_8x16b, res_temp12_8x16b, res_temp13_8x16b, res_temp14_8x16b, res_temp15_8x16b, res_temp16_8x16b, res_temp17_8x16b, res_temp18_8x16b;
  279|  20.7k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, coeff4_5_8x16b, coeff6_7_8x16b;
  280|  20.7k|    __m128i control_mask_1_8x16b, control_mask_2_8x16b, control_mask_3_8x16b, control_mask_4_8x16b;
  281|       |
  282|  20.7k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  20.7k|#define ASSERT(x) assert((x))
  ------------------
  283|       |
  284|  20.7k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  20.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  285|  20.7k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  20.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  286|  20.7k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  20.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  287|  20.7k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  20.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  288|  20.7k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  20.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  289|  20.7k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  20.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  290|       |
  291|       |    /* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
  292|  20.7k|    src_temp1_16x8b = _mm_loadl_epi64((__m128i *)pi1_coeff);
  293|  20.7k|    zero_8x16b = _mm_set1_epi32(0);
  294|  20.7k|    offset_8x16b = _mm_set1_epi16(OFFSET_14_MINUS_BIT_DEPTH); /* for offset addition */
  ------------------
  |  |   42|  20.7k|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  20.7k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  20.7k|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|       |
  296|  20.7k|    mask_low_32b = _mm_cmpeq_epi16(zero_8x16b, zero_8x16b);
  297|  20.7k|    mask_high_96b = _mm_srli_si128(mask_low_32b, 12);
  298|  20.7k|    mask_low_32b = _mm_slli_si128(mask_low_32b, 4);
  299|       |
  300|  20.7k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
  301|  20.7k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
  302|  20.7k|    control_mask_3_8x16b = _mm_set1_epi32(0x05040504); /* Control Mask register */
  303|  20.7k|    control_mask_4_8x16b = _mm_set1_epi32(0x07060706); /* Control Mask register */
  304|       |
  305|  20.7k|    coeff0_1_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_1_8x16b);  /* pi1_coeff[4] */
  306|  20.7k|    coeff2_3_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_2_8x16b);  /* pi1_coeff[4] */
  307|       |
  308|  20.7k|    coeff4_5_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_3_8x16b);  /* pi1_coeff[4] */
  309|  20.7k|    coeff6_7_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_4_8x16b);  /* pi1_coeff[4] */
  310|       |
  311|  20.7k|    if(0 == (ht & 1)) /* ht multiple of 2 case */
  ------------------
  |  Branch (311:8): [True: 20.7k, False: 50]
  ------------------
  312|  20.7k|    {
  313|       |
  314|  20.7k|        if(0 == (wd & 7)) /* wd = multiple of 8 case */
  ------------------
  |  Branch (314:12): [True: 17.8k, False: 2.88k]
  ------------------
  315|  17.8k|        {
  316|  95.2k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (316:26): [True: 77.4k, False: 17.8k]
  ------------------
  317|  77.4k|            {
  318|       |
  319|  77.4k|                int offset = 0;
  320|       |
  321|  77.4k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  77.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  322|  77.4k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  77.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  323|       |
  324|       |
  325|   215k|                for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (325:30): [True: 138k, False: 77.4k]
  ------------------
  326|   138k|                {
  327|       |                    /*load 16 pixel values from row 0*/
  328|   138k|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));         /* row = 0 */
  329|       |
  330|       |                    /*load 16 pixel values from row 1*/
  331|   138k|                    src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + src_strd - 3 + offset)); /* row = 1 */
  332|       |
  333|   138k|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
  334|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
  335|   138k|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  336|   138k|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
  337|       |                                                                                           /* row = 0 */
  338|   138k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  339|   138k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  340|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  341|   138k|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  342|   138k|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
  343|       |
  344|   138k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  345|   138k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  346|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  347|   138k|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  348|   138k|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
  349|       |
  350|   138k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  351|   138k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  352|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  353|   138k|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  354|   138k|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
  355|       |
  356|   138k|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  357|   138k|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
  358|   138k|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
  359|       |
  360|   138k|                    res_temp6_8x16b = _mm_adds_epi16(res_temp5_8x16b, offset_8x16b);             /* row = 0 */
  361|   138k|                    res_temp6_8x16b = _mm_srai_epi16(res_temp6_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|   138k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   138k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  362|   138k|                    res_temp5_8x16b = _mm_packus_epi16(res_temp6_8x16b, res_temp6_8x16b);        /* row = 0 */
  363|       |
  364|   138k|                    _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp5_8x16b);
  365|       |
  366|   138k|                    src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 1);                   /* row =1 */
  367|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/                 /* row =1 */
  368|   138k|                    src_temp13_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  369|   138k|                    res_temp11_8x16b = _mm_maddubs_epi16(src_temp13_16x8b, coeff0_1_8x16b);   /* row = 1 */
  370|       |                                                                                              /* row = 1 */
  371|   138k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  372|   138k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  373|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row =1 */
  374|   138k|                    src_temp14_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  375|   138k|                    res_temp12_8x16b = _mm_maddubs_epi16(src_temp14_16x8b, coeff2_3_8x16b);   /* row = 1 */
  376|       |
  377|   138k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  378|   138k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  379|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row =1 */
  380|   138k|                    src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  381|   138k|                    res_temp13_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff4_5_8x16b);   /* row = 1 */
  382|       |
  383|   138k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  384|   138k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  385|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row =1 */
  386|   138k|                    src_temp16_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  387|   138k|                    res_temp14_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff6_7_8x16b);   /* row = 1 */
  388|       |
  389|   138k|                    res_temp15_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
  390|   138k|                    res_temp16_8x16b = _mm_add_epi16(res_temp13_8x16b, res_temp14_8x16b);
  391|   138k|                    res_temp15_8x16b = _mm_add_epi16(res_temp15_8x16b, res_temp16_8x16b);
  392|       |
  393|   138k|                    res_temp16_8x16b = _mm_adds_epi16(res_temp15_8x16b, offset_8x16b);             /* row = 1 */
  394|   138k|                    res_temp16_8x16b = _mm_srai_epi16(res_temp16_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 1 */
  ------------------
  |  |   41|   138k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   138k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  395|   138k|                    res_temp15_8x16b = _mm_packus_epi16(res_temp16_8x16b, res_temp16_8x16b);       /* row = 1 */
  396|       |
  397|       |                    /* to store the 1st 4 pixels res. */
  398|   138k|                    _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + offset), res_temp15_8x16b);
  399|       |
  400|   138k|                    offset += 8; /* To pointer updates*/
  401|   138k|                }
  402|  77.4k|                pu1_src += 2 * src_strd;  /* pointer updates*/
  403|  77.4k|                pu1_dst += 2 * dst_strd;  /* pointer updates*/
  404|  77.4k|            }
  405|  17.8k|        }
  406|  2.88k|        else /* wd = multiple of 4 case */
  407|  2.88k|        {
  408|  14.9k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (408:26): [True: 12.1k, False: 2.88k]
  ------------------
  409|  12.1k|            {
  410|  12.1k|                int offset = 0;
  411|       |
  412|  12.1k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  12.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  413|  12.1k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  12.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  414|       |
  415|       |
  416|  25.2k|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (416:30): [True: 13.1k, False: 12.1k]
  ------------------
  417|  13.1k|                {
  418|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
  419|  13.1k|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));             /* row = 0 */
  420|  13.1k|                    src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + src_strd - 3 + offset)); /* row = 1 */
  421|       |
  422|  13.1k|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
  423|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
  424|  13.1k|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  425|  13.1k|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
  426|       |                                                                                           /* row = 0 */
  427|  13.1k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  428|  13.1k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  429|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  430|  13.1k|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  431|  13.1k|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
  432|       |
  433|  13.1k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  434|  13.1k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  435|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  436|  13.1k|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  437|  13.1k|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
  438|       |
  439|  13.1k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  440|  13.1k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  441|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  442|  13.1k|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  443|  13.1k|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
  444|       |
  445|  13.1k|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  446|  13.1k|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
  447|  13.1k|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
  448|       |
  449|  13.1k|                    res_temp6_8x16b = _mm_adds_epi16(res_temp5_8x16b, offset_8x16b);             /* row = 0 */
  450|  13.1k|                    res_temp6_8x16b = _mm_srai_epi16(res_temp6_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|  13.1k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  13.1k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  451|  13.1k|                    res_temp5_8x16b = _mm_packus_epi16(res_temp6_8x16b, res_temp6_8x16b);        /* row = 0 */
  452|       |
  453|  13.1k|                    res_temp7_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + offset));
  454|  13.1k|                    res_temp8_8x16b =  _mm_and_si128(res_temp7_8x16b, mask_low_32b);
  455|  13.1k|                    res_temp7_8x16b =  _mm_and_si128(res_temp5_8x16b, mask_high_96b);
  456|  13.1k|                    res_temp5_8x16b = _mm_or_si128(res_temp7_8x16b, res_temp8_8x16b);
  457|       |
  458|  13.1k|                    _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp5_8x16b);
  459|       |
  460|  13.1k|                    src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 1);                   /* row = 1 */
  461|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/                 /* row = 1 */
  462|  13.1k|                    src_temp13_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  463|  13.1k|                    res_temp11_8x16b = _mm_maddubs_epi16(src_temp13_16x8b, coeff0_1_8x16b);   /* row = 1 */
  464|       |                                                                                              /* row = 1 */
  465|  13.1k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  466|  13.1k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  467|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
  468|  13.1k|                    src_temp14_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  469|  13.1k|                    res_temp12_8x16b = _mm_maddubs_epi16(src_temp14_16x8b, coeff2_3_8x16b);   /* row = 1 */
  470|       |
  471|  13.1k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  472|  13.1k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  473|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
  474|  13.1k|                    src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  475|  13.1k|                    res_temp13_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff4_5_8x16b);   /* row = 1 */
  476|       |
  477|  13.1k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  478|  13.1k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  479|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
  480|  13.1k|                    src_temp16_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  481|  13.1k|                    res_temp14_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff6_7_8x16b);   /* row = 1 */
  482|       |
  483|  13.1k|                    res_temp15_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
  484|  13.1k|                    res_temp16_8x16b = _mm_add_epi16(res_temp13_8x16b, res_temp14_8x16b);
  485|  13.1k|                    res_temp15_8x16b = _mm_add_epi16(res_temp15_8x16b, res_temp16_8x16b);
  486|       |
  487|  13.1k|                    res_temp16_8x16b = _mm_adds_epi16(res_temp15_8x16b, offset_8x16b);             /* row = 1 */
  488|  13.1k|                    res_temp16_8x16b = _mm_srai_epi16(res_temp16_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 1 */
  ------------------
  |  |   41|  13.1k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  13.1k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  489|  13.1k|                    res_temp15_8x16b = _mm_packus_epi16(res_temp16_8x16b, res_temp16_8x16b);       /* row = 1 */
  490|       |
  491|  13.1k|                    res_temp17_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd + offset));
  492|  13.1k|                    res_temp18_8x16b =  _mm_and_si128(res_temp17_8x16b, mask_low_32b);
  493|  13.1k|                    res_temp17_8x16b =  _mm_and_si128(res_temp15_8x16b, mask_high_96b);
  494|  13.1k|                    res_temp15_8x16b = _mm_or_si128(res_temp17_8x16b, res_temp18_8x16b);
  495|       |
  496|       |                    /* to store the 1st 4 pixels res. */
  497|  13.1k|                    _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + offset), res_temp15_8x16b);
  498|       |
  499|  13.1k|                    offset += 4; /* To pointer updates*/
  500|  13.1k|                }
  501|  12.1k|                pu1_src += 2 * src_strd;  /* Pointer update */
  502|  12.1k|                pu1_dst += 2 * dst_strd;  /* Pointer update */
  503|  12.1k|            }
  504|  2.88k|        }
  505|  20.7k|    }
  506|     50|    else /* odd ht */
  507|     50|    {
  508|     50|        if(0 == (wd & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (508:12): [True: 0, False: 50]
  ------------------
  509|      0|        {
  510|      0|            for(row = 0; row < ht; row++)
  ------------------
  |  Branch (510:26): [True: 0, False: 0]
  ------------------
  511|      0|            {
  512|      0|                int offset = 0;
  513|       |
  514|       |
  515|      0|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|      0|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  516|      0|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|      0|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  517|       |
  518|       |
  519|      0|                for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (519:30): [True: 0, False: 0]
  ------------------
  520|      0|                {
  521|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
  522|      0|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));  /* row = 0 */
  523|       |
  524|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
  525|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
  526|      0|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  527|      0|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
  528|       |                                                                                           /* row = 0 */
  529|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  530|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  531|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  532|      0|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  533|      0|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
  534|       |
  535|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  536|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  537|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  538|      0|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  539|      0|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
  540|       |
  541|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  542|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  543|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  544|      0|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  545|      0|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
  546|       |
  547|      0|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  548|      0|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
  549|      0|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
  550|       |
  551|      0|                    res_temp6_8x16b = _mm_adds_epi16(res_temp5_8x16b, offset_8x16b);             /* row = 0 */
  552|      0|                    res_temp6_8x16b = _mm_srai_epi16(res_temp6_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|      0|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|      0|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  553|      0|                    res_temp5_8x16b = _mm_packus_epi16(res_temp6_8x16b, res_temp6_8x16b);        /* row = 0 */
  554|       |
  555|       |                    /* to store the 1st 4 pixels res. */
  556|      0|                    _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp5_8x16b);
  557|       |
  558|      0|                    offset += 8; /* To pointer updates*/
  559|      0|                }
  560|      0|                pu1_src += src_strd;    /* pointer updates*/
  561|      0|                pu1_dst += dst_strd;    /* pointer updates*/
  562|      0|            }
  563|      0|        }
  564|     50|        else  /* wd = multiple of 4 case */
  565|     50|        {
  566|     50|            for(row = 0; row < (ht - 1); row += 2)
  ------------------
  |  Branch (566:26): [True: 0, False: 50]
  ------------------
  567|      0|            {
  568|      0|                int offset = 0;
  569|       |
  570|      0|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|      0|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  571|      0|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|      0|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  572|       |
  573|       |
  574|      0|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (574:30): [True: 0, False: 0]
  ------------------
  575|      0|                {
  576|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
  577|      0|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));             /* row = 0 */
  578|      0|                    src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + src_strd - 3 + offset)); /* row = 1 */
  579|       |
  580|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
  581|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
  582|      0|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  583|      0|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
  584|       |                                                                                           /* row = 0 */
  585|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  586|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  587|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  588|      0|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  589|      0|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
  590|       |
  591|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  592|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  593|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  594|      0|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  595|      0|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
  596|       |
  597|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  598|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  599|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  600|      0|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  601|      0|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
  602|       |
  603|      0|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  604|      0|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
  605|      0|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
  606|       |
  607|      0|                    res_temp6_8x16b = _mm_adds_epi16(res_temp5_8x16b, offset_8x16b);             /* row = 0 */
  608|      0|                    res_temp6_8x16b = _mm_srai_epi16(res_temp6_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|      0|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|      0|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  609|      0|                    res_temp5_8x16b = _mm_packus_epi16(res_temp6_8x16b, res_temp6_8x16b);        /* row = 0 */
  610|       |
  611|      0|                    res_temp7_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + offset));
  612|      0|                    res_temp8_8x16b =  _mm_and_si128(res_temp7_8x16b, mask_low_32b);
  613|      0|                    res_temp7_8x16b =  _mm_and_si128(res_temp5_8x16b, mask_high_96b);
  614|      0|                    res_temp5_8x16b = _mm_or_si128(res_temp7_8x16b, res_temp8_8x16b);
  615|       |
  616|      0|                    _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp5_8x16b);
  617|       |
  618|      0|                    src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 1);                   /* row = 1 */
  619|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/                 /* row = 1 */
  620|      0|                    src_temp13_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  621|      0|                    res_temp11_8x16b = _mm_maddubs_epi16(src_temp13_16x8b, coeff0_1_8x16b);   /* row = 1 */
  622|       |                                                                                              /* row = 1 */
  623|      0|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  624|      0|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  625|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
  626|      0|                    src_temp14_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  627|      0|                    res_temp12_8x16b = _mm_maddubs_epi16(src_temp14_16x8b, coeff2_3_8x16b);   /* row = 1 */
  628|       |
  629|      0|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  630|      0|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  631|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
  632|      0|                    src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  633|      0|                    res_temp13_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff4_5_8x16b);   /* row = 1 */
  634|       |
  635|      0|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
  636|      0|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
  637|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
  638|      0|                    src_temp16_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
  639|      0|                    res_temp14_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff6_7_8x16b);   /* row = 1 */
  640|       |
  641|      0|                    res_temp15_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
  642|      0|                    res_temp16_8x16b = _mm_add_epi16(res_temp13_8x16b, res_temp14_8x16b);
  643|      0|                    res_temp15_8x16b = _mm_add_epi16(res_temp15_8x16b, res_temp16_8x16b);
  644|       |
  645|      0|                    res_temp16_8x16b = _mm_adds_epi16(res_temp15_8x16b, offset_8x16b);             /* row = 1 */
  646|      0|                    res_temp16_8x16b = _mm_srai_epi16(res_temp16_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 1 */
  ------------------
  |  |   41|      0|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|      0|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  647|      0|                    res_temp15_8x16b = _mm_packus_epi16(res_temp16_8x16b, res_temp16_8x16b);       /* row = 1 */
  648|       |
  649|      0|                    res_temp17_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd + offset));
  650|      0|                    res_temp18_8x16b =  _mm_and_si128(res_temp17_8x16b, mask_low_32b);
  651|      0|                    res_temp17_8x16b =  _mm_and_si128(res_temp15_8x16b, mask_high_96b);
  652|      0|                    res_temp15_8x16b = _mm_or_si128(res_temp17_8x16b, res_temp18_8x16b);
  653|       |
  654|       |                    /* to store the 1st 4 pixels res. */
  655|      0|                    _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + offset), res_temp15_8x16b);
  656|       |
  657|      0|                    offset += 4; /* To pointer updates*/
  658|      0|                }
  659|      0|                pu1_src += 2 * src_strd;  /* Pointer update */
  660|      0|                pu1_dst += 2 * dst_strd;  /* Pointer update */
  661|      0|            }
  662|     50|            { /* last repeat at outside the loop */
  663|     50|                int offset = 0;
  664|     50|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (664:30): [True: 0, False: 50]
  ------------------
  665|      0|                {
  666|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
  667|      0|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));  /* row = 0 */
  668|       |
  669|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
  670|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
  671|      0|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  672|      0|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
  673|       |                                                                                           /* row = 0 */
  674|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  675|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  676|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  677|      0|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  678|      0|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
  679|       |
  680|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  681|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  682|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  683|      0|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  684|      0|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
  685|       |
  686|      0|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
  687|      0|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
  688|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
  689|      0|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
  690|      0|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
  691|       |
  692|      0|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  693|      0|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
  694|      0|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
  695|       |
  696|      0|                    res_temp6_8x16b = _mm_adds_epi16(res_temp5_8x16b, offset_8x16b);             /* row = 0 */
  697|      0|                    res_temp6_8x16b = _mm_srai_epi16(res_temp6_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|      0|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|      0|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  698|      0|                    res_temp5_8x16b = _mm_packus_epi16(res_temp6_8x16b, res_temp6_8x16b);        /* row = 0 */
  699|       |
  700|      0|                    res_temp7_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + offset));
  701|      0|                    res_temp8_8x16b =  _mm_and_si128(res_temp7_8x16b, mask_low_32b);
  702|      0|                    res_temp7_8x16b =  _mm_and_si128(res_temp5_8x16b, mask_high_96b);
  703|      0|                    res_temp5_8x16b = _mm_or_si128(res_temp7_8x16b, res_temp8_8x16b);
  704|       |
  705|       |                    /* to store the 1st 4 pixels res. */
  706|      0|                    _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp5_8x16b);
  707|       |
  708|      0|                    offset += 4; /* To pointer updates*/
  709|      0|                }
  710|     50|            }
  711|     50|        }
  712|     50|    }
  713|  20.7k|}
ihevc_inter_pred_luma_vert_ssse3:
  762|  11.9k|{
  763|  11.9k|    WORD32 row, col;
  764|  11.9k|    UWORD8 *pu1_src_copy;
  765|  11.9k|    UWORD8 *pu1_dst_copy;
  766|  11.9k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, coeff4_5_8x16b, coeff6_7_8x16b;
  767|  11.9k|    __m128i s0_8x16b, s1_8x16b, s2_8x16b, s3_8x16b, s4_8x16b, s5_8x16b, s6_8x16b, s7_8x16b, s8_8x16b, s9_8x16b;
  768|  11.9k|    __m128i s2_0_16x8b, s2_1_16x8b, s2_2_16x8b, s2_3_16x8b, s2_4_16x8b, s2_5_16x8b, s2_6_16x8b, s2_7_16x8b, s2_8_16x8b, s2_9_16x8b, s2_10_16x8b;
  769|  11.9k|    __m128i s3_0_16x8b, s3_1_16x8b, s3_2_16x8b, s3_3_16x8b, s3_4_16x8b;
  770|  11.9k|    __m128i s4_0_16x8b, s4_1_16x8b, s4_2_16x8b, s4_3_16x8b, s4_4_16x8b;
  771|  11.9k|    __m128i s10_8x16b, s11_8x16b, s12_8x16b, s13_8x16b, s14_8x16b, s15_8x16b, s16_8x16b, s17_8x16b, s18_8x16b, s19_8x16b;
  772|  11.9k|    __m128i s20_8x16b, s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b, s26_8x16b, s27_8x16b, s28_8x16b, s29_8x16b;
  773|  11.9k|    __m128i s30_8x16b, s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b, s36_8x16b, s37_8x16b, s38_8x16b, s39_8x16b;
  774|       |
  775|  11.9k|    __m128i zero_8x16b, offset_8x16b, mask_low_32b, mask_high_96b;
  776|  11.9k|    __m128i control_mask_1_8x16b, control_mask_2_8x16b, control_mask_3_8x16b, control_mask_4_8x16b;
  777|       |
  778|  11.9k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  779|  11.9k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  780|  11.9k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  781|  11.9k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  782|  11.9k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  783|  11.9k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  784|  11.9k|    PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  785|  11.9k|    PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  786|       |
  787|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
  788|  11.9k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
  789|       |
  790|  11.9k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
  791|  11.9k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
  792|  11.9k|    control_mask_3_8x16b = _mm_set1_epi32(0x05040504); /* Control Mask register */
  793|  11.9k|    control_mask_4_8x16b = _mm_set1_epi32(0x07060706); /* Control Mask register */
  794|       |
  795|  11.9k|    coeff0_1_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_1_8x16b);  /* pi1_coeff[4] */
  796|  11.9k|    coeff2_3_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_2_8x16b);  /* pi1_coeff[4] */
  797|       |
  798|  11.9k|    coeff4_5_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_3_8x16b);  /* pi1_coeff[4] */
  799|  11.9k|    coeff6_7_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_4_8x16b);  /* pi1_coeff[4] */
  800|       |
  801|       |/*  seting  values in register */
  802|  11.9k|    zero_8x16b = _mm_setzero_si128(); /* for saturated clipping */
  803|  11.9k|    offset_8x16b = _mm_set1_epi16(OFFSET_14_MINUS_BIT_DEPTH); /* for offset addition */
  ------------------
  |  |   42|  11.9k|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  11.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  11.9k|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  804|  11.9k|    mask_low_32b = _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000);
  805|  11.9k|    mask_high_96b = _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF);
  806|       |
  807|       |/*  outer for loop starts from here */
  808|  11.9k|    if(wd % 8 == 0)
  ------------------
  |  Branch (808:8): [True: 9.25k, False: 2.71k]
  ------------------
  809|  9.25k|    { /* wd = multiple of 8 case */
  810|       |
  811|  9.25k|        pu1_src_copy = pu1_src;
  812|  9.25k|        pu1_dst_copy = pu1_dst;
  813|       |
  814|  21.3k|        for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (814:22): [True: 12.0k, False: 9.25k]
  ------------------
  815|  12.0k|        {
  816|       |
  817|  12.0k|            pu1_src = pu1_src_copy + col;
  818|  12.0k|            pu1_dst = pu1_dst_copy + col;
  819|       |
  820|  12.0k|            PREFETCH((char const *)(pu1_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  12.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  821|  12.0k|            PREFETCH((char const *)(pu1_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  12.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  822|  12.0k|            PREFETCH((char const *)(pu1_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  12.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  823|  12.0k|            PREFETCH((char const *)(pu1_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  12.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  824|       |
  825|       |            /*load 8 pixel values.*/
  826|  12.0k|            s2_0_16x8b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-3 * src_strd)));
  827|       |
  828|       |            /*load 8 pixel values*/
  829|  12.0k|            s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-2 * src_strd)));
  830|       |
  831|  12.0k|            s3_0_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
  832|       |
  833|  12.0k|            s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
  834|       |
  835|       |            /*load 8 pixel values*/
  836|  12.0k|            s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
  837|       |
  838|       |            /*load 8 pixel values*/
  839|  12.0k|            s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
  840|       |
  841|  12.0k|            s3_1_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
  842|       |
  843|  12.0k|            s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
  844|       |
  845|       |            /*load 8 pixel values*/
  846|  12.0k|            s2_4_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
  847|       |
  848|       |            /*load 8 pixel values*/
  849|  12.0k|            s2_5_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
  850|       |
  851|  12.0k|            s3_2_16x8b = _mm_unpacklo_epi8(s2_4_16x8b, s2_5_16x8b);
  852|       |
  853|  12.0k|            s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
  854|       |
  855|       |            /*load 8 pixel values*/
  856|  12.0k|            s2_6_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
  857|       |
  858|       |            /*load 8 pixel values*/
  859|  12.0k|            s2_7_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (4 * src_strd)));
  860|       |
  861|  12.0k|            s3_3_16x8b = _mm_unpacklo_epi8(s2_6_16x8b, s2_7_16x8b);
  862|       |
  863|  12.0k|            s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
  864|       |
  865|  12.0k|            s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
  866|  12.0k|            s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
  867|  12.0k|            s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
  868|       |
  869|  12.0k|            s7_8x16b = _mm_add_epi16(s6_8x16b, offset_8x16b);
  870|       |
  871|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
  872|  12.0k|            s8_8x16b = _mm_srai_epi16(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  12.0k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  12.0k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  873|       |
  874|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
  875|  12.0k|            s9_8x16b = _mm_packus_epi16(s8_8x16b, zero_8x16b);
  876|       |
  877|       |            /* store 8 8-bit output values  */
  878|       |            /* Store the output pixels of row 0*/
  879|  12.0k|            _mm_storel_epi64((__m128i *)(pu1_dst), s9_8x16b);
  880|       |
  881|       |            /* ROW 2*/
  882|  12.0k|            s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
  883|  12.0k|            s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
  884|  12.0k|            s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
  885|       |
  886|       |            /*load 8 pixel values*/
  887|  12.0k|            s2_8_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (5 * src_strd)));
  888|       |
  889|       |            /*load 8 pixel values*/
  890|  12.0k|            s2_9_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (6 * src_strd)));
  891|       |
  892|  12.0k|            s3_4_16x8b = _mm_unpacklo_epi8(s2_8_16x8b, s2_9_16x8b);
  893|       |
  894|  12.0k|            s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
  895|       |
  896|  12.0k|            s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
  897|  12.0k|            s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
  898|  12.0k|            s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
  899|       |
  900|  12.0k|            s27_8x16b = _mm_add_epi16(s26_8x16b, offset_8x16b);
  901|       |
  902|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
  903|  12.0k|            s28_8x16b = _mm_srai_epi16(s27_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  12.0k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  12.0k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  904|       |
  905|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
  906|  12.0k|            s29_8x16b = _mm_packus_epi16(s28_8x16b, zero_8x16b);
  907|       |
  908|       |            /* store 8 8-bit output values  */
  909|       |            /* Store the output pixels of row 2*/
  910|  12.0k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), s29_8x16b);
  911|       |
  912|       |
  913|       |            /*ROW 1*/
  914|  12.0k|            s4_0_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
  915|       |
  916|  12.0k|            s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
  917|       |
  918|  12.0k|            s4_1_16x8b = _mm_unpacklo_epi8(s2_3_16x8b, s2_4_16x8b);
  919|       |
  920|  12.0k|            s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
  921|       |
  922|  12.0k|            s4_2_16x8b = _mm_unpacklo_epi8(s2_5_16x8b, s2_6_16x8b);
  923|       |
  924|  12.0k|            s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
  925|       |
  926|  12.0k|            s4_3_16x8b = _mm_unpacklo_epi8(s2_7_16x8b, s2_8_16x8b);
  927|       |
  928|  12.0k|            s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
  929|       |
  930|  12.0k|            s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
  931|  12.0k|            s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
  932|  12.0k|            s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
  933|       |
  934|  12.0k|            s17_8x16b = _mm_add_epi16(s16_8x16b, offset_8x16b);
  935|       |
  936|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
  937|  12.0k|            s18_8x16b = _mm_srai_epi16(s17_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  12.0k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  12.0k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  938|       |
  939|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
  940|  12.0k|            s19_8x16b = _mm_packus_epi16(s18_8x16b, zero_8x16b);
  941|       |
  942|       |            /* store 8 8-bit output values  */
  943|       |            /* Store the output pixels of row 1*/
  944|  12.0k|            _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd)), s19_8x16b);
  945|       |
  946|       |
  947|       |            /* ROW 3*/
  948|  12.0k|            s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
  949|  12.0k|            s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
  950|  12.0k|            s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
  951|       |
  952|       |            /*load 8 pixel values*/
  953|  12.0k|            s2_10_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (7 * src_strd)));
  954|       |
  955|  12.0k|            s4_4_16x8b = _mm_unpacklo_epi8(s2_9_16x8b, s2_10_16x8b);
  956|       |
  957|  12.0k|            s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
  958|       |
  959|  12.0k|            s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
  960|  12.0k|            s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
  961|  12.0k|            s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
  962|       |
  963|  12.0k|            s37_8x16b = _mm_add_epi16(s36_8x16b, offset_8x16b);
  964|       |
  965|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
  966|  12.0k|            s38_8x16b = _mm_srai_epi16(s37_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  12.0k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  12.0k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  967|       |
  968|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
  969|  12.0k|            s39_8x16b = _mm_packus_epi16(s38_8x16b, zero_8x16b);
  970|       |
  971|       |            /* store 8 8-bit output values  */
  972|       |            /* Store the output pixels of row 2*/
  973|  12.0k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), s39_8x16b);
  974|       |
  975|  12.0k|            pu1_src += (8 * src_strd);
  976|  12.0k|            pu1_dst += (4 * dst_strd);
  977|       |
  978|  46.0k|            for(row = 4; row < ht; row += 4)
  ------------------
  |  Branch (978:26): [True: 33.9k, False: 12.0k]
  ------------------
  979|  33.9k|            {
  980|  33.9k|                PREFETCH((char const *)(pu1_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  981|  33.9k|                PREFETCH((char const *)(pu1_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  982|  33.9k|                PREFETCH((char const *)(pu1_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  983|  33.9k|                PREFETCH((char const *)(pu1_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  984|       |
  985|       |
  986|  33.9k|                s3_0_16x8b = s3_2_16x8b;
  987|  33.9k|                s3_1_16x8b = s3_3_16x8b;
  988|  33.9k|                s3_2_16x8b = s3_4_16x8b;
  989|       |
  990|  33.9k|                s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
  991|  33.9k|                s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
  992|  33.9k|                s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
  993|       |
  994|       |                /*load 8 pixel values from (cur_row + 4)th row*/
  995|  33.9k|                s2_0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));
  996|       |
  997|  33.9k|                s3_3_16x8b = _mm_unpacklo_epi8(s2_10_16x8b, s2_0_16x8b);
  998|  33.9k|                s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
  999|       |
 1000|  33.9k|                s4_0_16x8b = s4_2_16x8b;
 1001|  33.9k|                s4_1_16x8b = s4_3_16x8b;
 1002|  33.9k|                s4_2_16x8b = s4_4_16x8b;
 1003|       |
 1004|  33.9k|                s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 1005|  33.9k|                s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 1006|  33.9k|                s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 1007|       |
 1008|  33.9k|                s7_8x16b = _mm_add_epi16(s6_8x16b, offset_8x16b);
 1009|       |
 1010|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1011|  33.9k|                s8_8x16b = _mm_srai_epi16(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  33.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  33.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1012|       |
 1013|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1014|  33.9k|                s9_8x16b = _mm_packus_epi16(s8_8x16b, zero_8x16b);
 1015|       |
 1016|       |                /* store 8 8-bit output values  */
 1017|       |                /* Store the output pixels of row 4*/
 1018|  33.9k|                _mm_storel_epi64((__m128i *)(pu1_dst), s9_8x16b);
 1019|       |
 1020|       |                /* row + 2*/
 1021|  33.9k|                s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 1022|  33.9k|                s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 1023|  33.9k|                s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 1024|       |
 1025|       |                /*load 8 pixel values from (cur_row + 5)th row*/
 1026|  33.9k|                s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd));
 1027|       |
 1028|       |                /*load 8 pixel values from (cur_row + 6)th row*/
 1029|  33.9k|                s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 1030|       |
 1031|       |                /*unpacking (cur_row + 5)th row and (cur_row + 6)th row*/
 1032|  33.9k|                s3_4_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 1033|       |
 1034|  33.9k|                s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 1035|       |
 1036|  33.9k|                s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 1037|  33.9k|                s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 1038|  33.9k|                s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 1039|       |
 1040|  33.9k|                s27_8x16b = _mm_add_epi16(s26_8x16b, offset_8x16b);
 1041|       |
 1042|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1043|  33.9k|                s28_8x16b = _mm_srai_epi16(s27_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  33.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  33.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1044|       |
 1045|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1046|  33.9k|                s29_8x16b = _mm_packus_epi16(s28_8x16b, zero_8x16b);
 1047|       |
 1048|       |                /* store 8 8-bit output values  */
 1049|       |                /* Store the output pixels of (cur_row+2)*/
 1050|  33.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), s29_8x16b);
 1051|       |
 1052|       |
 1053|       |                /*row + 1*/
 1054|  33.9k|                s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 1055|  33.9k|                s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 1056|  33.9k|                s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 1057|       |
 1058|       |                /*unpacking (cur_row + 4)th row and (cur_row + 5)th row*/
 1059|  33.9k|                s4_3_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 1060|  33.9k|                s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 1061|       |
 1062|  33.9k|                s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 1063|  33.9k|                s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 1064|  33.9k|                s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 1065|       |
 1066|  33.9k|                s17_8x16b = _mm_add_epi16(s16_8x16b, offset_8x16b);
 1067|       |
 1068|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1069|  33.9k|                s18_8x16b = _mm_srai_epi16(s17_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  33.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  33.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1070|       |
 1071|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1072|  33.9k|                s19_8x16b = _mm_packus_epi16(s18_8x16b, zero_8x16b);
 1073|       |
 1074|       |                /* store 8 8-bit output values  */
 1075|       |                /* Store the output pixels of (cur_row + 1)*/
 1076|  33.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s19_8x16b);
 1077|       |
 1078|       |
 1079|       |                /* row + 3*/
 1080|  33.9k|                s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 1081|  33.9k|                s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 1082|  33.9k|                s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 1083|       |
 1084|       |                /*load 8 pixel values from (cur_row + 7)th row*/
 1085|  33.9k|                s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 1086|       |
 1087|       |                /*unpacking (cur_row + 6)th row and (cur_row + 7)th row*/
 1088|  33.9k|                s4_4_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 1089|       |
 1090|  33.9k|                s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 1091|       |
 1092|  33.9k|                s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 1093|  33.9k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 1094|  33.9k|                s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 1095|       |
 1096|  33.9k|                s37_8x16b = _mm_add_epi16(s36_8x16b, offset_8x16b);
 1097|       |
 1098|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1099|  33.9k|                s38_8x16b = _mm_srai_epi16(s37_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  33.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  33.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1100|       |
 1101|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1102|  33.9k|                s39_8x16b = _mm_packus_epi16(s38_8x16b, zero_8x16b);
 1103|       |
 1104|       |                /* store 8 8-bit output values  */
 1105|       |                /* Store the output pixels of (cur_row+3)*/
 1106|  33.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), s39_8x16b);
 1107|       |
 1108|  33.9k|                s2_10_16x8b = s2_3_16x8b;
 1109|       |
 1110|  33.9k|                pu1_src += 4 * src_strd; /* pointer update */
 1111|  33.9k|                pu1_dst += 4 * dst_strd; /* pointer update */
 1112|  33.9k|            }
 1113|  12.0k|        }
 1114|  9.25k|    }
 1115|  2.71k|    else /* wd = multiple of 8 case */
 1116|  2.71k|    {
 1117|       |
 1118|  2.71k|        pu1_src_copy = pu1_src;
 1119|  2.71k|        pu1_dst_copy = pu1_dst;
 1120|       |
 1121|  5.53k|        for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1121:22): [True: 2.81k, False: 2.71k]
  ------------------
 1122|  2.81k|        {
 1123|       |
 1124|  2.81k|            pu1_src = pu1_src_copy + col;
 1125|  2.81k|            pu1_dst = pu1_dst_copy + col;
 1126|       |
 1127|  2.81k|            PREFETCH((char const *)(pu1_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  2.81k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1128|  2.81k|            PREFETCH((char const *)(pu1_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  2.81k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1129|  2.81k|            PREFETCH((char const *)(pu1_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  2.81k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1130|  2.81k|            PREFETCH((char const *)(pu1_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  2.81k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1131|       |
 1132|       |
 1133|       |            /*load 8 pixel values */
 1134|  2.81k|            s2_0_16x8b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-3 * src_strd)));
 1135|       |
 1136|       |            /*load 8 pixel values */
 1137|  2.81k|            s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-2 * src_strd)));
 1138|       |
 1139|  2.81k|            s3_0_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 1140|       |
 1141|  2.81k|            s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
 1142|       |
 1143|       |            /*load 8 pixel values */
 1144|  2.81k|            s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 1145|       |
 1146|       |            /*load 8 pixel values */
 1147|  2.81k|            s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 1148|       |
 1149|  2.81k|            s3_1_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 1150|       |
 1151|  2.81k|            s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
 1152|       |
 1153|       |            /*load 8 pixel values */
 1154|  2.81k|            s2_4_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 1155|       |
 1156|       |            /*load 8 pixel values */
 1157|  2.81k|            s2_5_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 1158|       |
 1159|  2.81k|            s3_2_16x8b = _mm_unpacklo_epi8(s2_4_16x8b, s2_5_16x8b);
 1160|       |
 1161|  2.81k|            s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
 1162|       |
 1163|       |            /*load 8 pixel values */
 1164|  2.81k|            s2_6_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 1165|       |
 1166|       |            /*load 8 pixel values */
 1167|  2.81k|            s2_7_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (4 * src_strd)));
 1168|       |
 1169|  2.81k|            s3_3_16x8b = _mm_unpacklo_epi8(s2_6_16x8b, s2_7_16x8b);
 1170|       |
 1171|  2.81k|            s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
 1172|       |
 1173|  2.81k|            s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 1174|  2.81k|            s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 1175|  2.81k|            s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 1176|       |
 1177|  2.81k|            s7_8x16b = _mm_add_epi16(s6_8x16b, offset_8x16b);
 1178|       |
 1179|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1180|  2.81k|            s8_8x16b = _mm_srai_epi16(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  2.81k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  2.81k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1181|       |
 1182|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 1183|  2.81k|            s9_8x16b = _mm_packus_epi16(s8_8x16b, zero_8x16b);
 1184|  2.81k|            s5_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst));
 1185|  2.81k|            s6_8x16b =  _mm_and_si128(s5_8x16b, mask_low_32b);
 1186|  2.81k|            s7_8x16b =  _mm_and_si128(s9_8x16b, mask_high_96b);
 1187|  2.81k|            s8_8x16b = _mm_or_si128(s6_8x16b, s7_8x16b);
 1188|       |            /* store 8 8-bit output values  */
 1189|       |            /* Store the output pixels of row 0*/
 1190|  2.81k|            _mm_storel_epi64((__m128i *)(pu1_dst), s8_8x16b);
 1191|       |
 1192|       |            /* ROW 2*/
 1193|  2.81k|            s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 1194|  2.81k|            s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 1195|  2.81k|            s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 1196|       |
 1197|       |            /*load 8 pixel values */
 1198|  2.81k|            s2_8_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (5 * src_strd)));
 1199|       |
 1200|       |            /*load 8 pixel values */
 1201|  2.81k|            s2_9_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (6 * src_strd)));
 1202|       |
 1203|  2.81k|            s3_4_16x8b = _mm_unpacklo_epi8(s2_8_16x8b, s2_9_16x8b);
 1204|       |
 1205|  2.81k|            s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 1206|       |
 1207|  2.81k|            s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 1208|  2.81k|            s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 1209|  2.81k|            s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 1210|       |
 1211|  2.81k|            s27_8x16b = _mm_add_epi16(s26_8x16b, offset_8x16b);
 1212|       |
 1213|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1214|  2.81k|            s28_8x16b = _mm_srai_epi16(s27_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  2.81k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  2.81k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1215|       |
 1216|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 1217|  2.81k|            s29_8x16b = _mm_packus_epi16(s28_8x16b, zero_8x16b);
 1218|  2.81k|            s25_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (2 * dst_strd)));
 1219|  2.81k|            s26_8x16b =  _mm_and_si128(s25_8x16b, mask_low_32b);
 1220|  2.81k|            s27_8x16b =  _mm_and_si128(s29_8x16b, mask_high_96b);
 1221|  2.81k|            s28_8x16b = _mm_or_si128(s26_8x16b, s27_8x16b);
 1222|       |            /* store 8 8-bit output values  */
 1223|       |            /* Store the output pixels of row 2*/
 1224|  2.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), s28_8x16b);
 1225|       |
 1226|       |
 1227|       |            /*ROW 1*/
 1228|  2.81k|            s4_0_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 1229|       |
 1230|  2.81k|            s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 1231|       |
 1232|  2.81k|            s4_1_16x8b = _mm_unpacklo_epi8(s2_3_16x8b, s2_4_16x8b);
 1233|       |
 1234|  2.81k|            s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 1235|       |
 1236|  2.81k|            s4_2_16x8b = _mm_unpacklo_epi8(s2_5_16x8b, s2_6_16x8b);
 1237|       |
 1238|  2.81k|            s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 1239|       |
 1240|  2.81k|            s4_3_16x8b = _mm_unpacklo_epi8(s2_7_16x8b, s2_8_16x8b);
 1241|       |
 1242|  2.81k|            s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 1243|       |
 1244|  2.81k|            s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 1245|  2.81k|            s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 1246|  2.81k|            s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 1247|       |
 1248|  2.81k|            s17_8x16b = _mm_add_epi16(s16_8x16b, offset_8x16b);
 1249|       |
 1250|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1251|  2.81k|            s18_8x16b = _mm_srai_epi16(s17_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  2.81k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  2.81k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1252|       |
 1253|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 1254|  2.81k|            s19_8x16b = _mm_packus_epi16(s18_8x16b, zero_8x16b);
 1255|  2.81k|            s15_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
 1256|  2.81k|            s16_8x16b =  _mm_and_si128(s15_8x16b, mask_low_32b);
 1257|  2.81k|            s17_8x16b =  _mm_and_si128(s19_8x16b, mask_high_96b);
 1258|  2.81k|            s18_8x16b = _mm_or_si128(s16_8x16b, s17_8x16b);
 1259|       |            /* store 8 8-bit output values  */
 1260|       |            /* Store the output pixels of row 1*/
 1261|  2.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd)), s18_8x16b);
 1262|       |
 1263|       |
 1264|       |            /* ROW 3*/
 1265|  2.81k|            s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 1266|  2.81k|            s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 1267|  2.81k|            s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 1268|       |
 1269|       |            /*load 8 pixel values */
 1270|  2.81k|            s2_10_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (7 * src_strd)));
 1271|       |
 1272|  2.81k|            s4_4_16x8b = _mm_unpacklo_epi8(s2_9_16x8b, s2_10_16x8b);
 1273|       |
 1274|  2.81k|            s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 1275|       |
 1276|  2.81k|            s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 1277|  2.81k|            s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 1278|  2.81k|            s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 1279|       |
 1280|  2.81k|            s37_8x16b = _mm_add_epi16(s36_8x16b, offset_8x16b);
 1281|       |
 1282|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1283|  2.81k|            s38_8x16b = _mm_srai_epi16(s37_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  2.81k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  2.81k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1284|       |
 1285|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 1286|  2.81k|            s39_8x16b = _mm_packus_epi16(s38_8x16b, zero_8x16b);
 1287|       |
 1288|  2.81k|            s35_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (3 * dst_strd)));
 1289|  2.81k|            s36_8x16b =  _mm_and_si128(s35_8x16b, mask_low_32b);
 1290|  2.81k|            s37_8x16b =  _mm_and_si128(s39_8x16b, mask_high_96b);
 1291|  2.81k|            s38_8x16b = _mm_or_si128(s36_8x16b, s37_8x16b);
 1292|       |
 1293|       |            /* store 8 8-bit output values  */
 1294|       |            /* Store the output pixels of row 2*/
 1295|  2.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), s38_8x16b);
 1296|       |
 1297|  2.81k|            pu1_src += (8 * src_strd);
 1298|  2.81k|            pu1_dst += (4 * dst_strd);
 1299|       |
 1300|  6.09k|            for(row = 4; row < ht; row += 4)
  ------------------
  |  Branch (1300:26): [True: 3.27k, False: 2.81k]
  ------------------
 1301|  3.27k|            {
 1302|       |
 1303|  3.27k|                PREFETCH((char const *)(pu1_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  3.27k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1304|  3.27k|                PREFETCH((char const *)(pu1_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  3.27k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1305|  3.27k|                PREFETCH((char const *)(pu1_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  3.27k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1306|  3.27k|                PREFETCH((char const *)(pu1_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  3.27k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1307|       |
 1308|       |
 1309|  3.27k|                s3_0_16x8b = s3_2_16x8b;
 1310|  3.27k|                s3_1_16x8b = s3_3_16x8b;
 1311|  3.27k|                s3_2_16x8b = s3_4_16x8b;
 1312|       |
 1313|  3.27k|                s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
 1314|  3.27k|                s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
 1315|  3.27k|                s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
 1316|       |
 1317|       |                /*load 16 pixel values from (cur_row + 4)th row*/
 1318|  3.27k|                s2_0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));
 1319|       |
 1320|  3.27k|                s3_3_16x8b = _mm_unpacklo_epi8(s2_10_16x8b, s2_0_16x8b);
 1321|  3.27k|                s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
 1322|       |
 1323|  3.27k|                s4_0_16x8b = s4_2_16x8b;
 1324|  3.27k|                s4_1_16x8b = s4_3_16x8b;
 1325|  3.27k|                s4_2_16x8b = s4_4_16x8b;
 1326|       |
 1327|  3.27k|                s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 1328|  3.27k|                s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 1329|  3.27k|                s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 1330|       |
 1331|  3.27k|                s7_8x16b = _mm_add_epi16(s6_8x16b, offset_8x16b);
 1332|       |
 1333|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1334|  3.27k|                s8_8x16b = _mm_srai_epi16(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  3.27k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  3.27k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1335|       |
 1336|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1337|  3.27k|                s9_8x16b = _mm_packus_epi16(s8_8x16b, zero_8x16b);
 1338|       |
 1339|  3.27k|                s5_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst));
 1340|  3.27k|                s6_8x16b =  _mm_and_si128(s5_8x16b, mask_low_32b);
 1341|  3.27k|                s7_8x16b =  _mm_and_si128(s9_8x16b, mask_high_96b);
 1342|  3.27k|                s8_8x16b = _mm_or_si128(s6_8x16b, s7_8x16b);
 1343|       |
 1344|       |                /* store 8 8-bit output values  */
 1345|       |                /* Store the output pixels of row 4*/
 1346|  3.27k|                _mm_storel_epi64((__m128i *)(pu1_dst), s8_8x16b);
 1347|       |
 1348|       |                /* row + 2*/
 1349|  3.27k|                s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 1350|  3.27k|                s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 1351|  3.27k|                s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 1352|       |
 1353|       |                /*load 16 pixel values from (cur_row + 5)th row*/
 1354|  3.27k|                s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd));
 1355|       |
 1356|       |                /*load 16 pixel values from (cur_row + 6)th row*/
 1357|  3.27k|                s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 1358|       |
 1359|       |                /*unpacking (cur_row + 5)th row and (cur_row + 6)th row*/
 1360|  3.27k|                s3_4_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 1361|       |
 1362|  3.27k|                s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 1363|       |
 1364|  3.27k|                s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 1365|  3.27k|                s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 1366|  3.27k|                s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 1367|       |
 1368|  3.27k|                s27_8x16b = _mm_add_epi16(s26_8x16b, offset_8x16b);
 1369|       |
 1370|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1371|  3.27k|                s28_8x16b = _mm_srai_epi16(s27_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  3.27k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  3.27k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1372|       |
 1373|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1374|  3.27k|                s29_8x16b = _mm_packus_epi16(s28_8x16b, zero_8x16b);
 1375|       |
 1376|  3.27k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (2 * dst_strd)));
 1377|  3.27k|                s26_8x16b =  _mm_and_si128(s25_8x16b, mask_low_32b);
 1378|  3.27k|                s27_8x16b =  _mm_and_si128(s29_8x16b, mask_high_96b);
 1379|  3.27k|                s28_8x16b = _mm_or_si128(s26_8x16b, s27_8x16b);
 1380|       |
 1381|       |                /* store 8 8-bit output values  */
 1382|       |                /* Store the output pixels of (cur_row+2)*/
 1383|  3.27k|                _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), s28_8x16b);
 1384|       |
 1385|       |
 1386|       |                /*row + 1*/
 1387|  3.27k|                s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 1388|  3.27k|                s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 1389|  3.27k|                s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 1390|       |
 1391|       |                /*unpacking (cur_row + 4)th row and (cur_row + 5)th row*/
 1392|  3.27k|                s4_3_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 1393|  3.27k|                s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 1394|       |
 1395|  3.27k|                s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 1396|  3.27k|                s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 1397|  3.27k|                s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 1398|       |
 1399|  3.27k|                s17_8x16b = _mm_add_epi16(s16_8x16b, offset_8x16b);
 1400|       |
 1401|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1402|  3.27k|                s18_8x16b = _mm_srai_epi16(s17_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  3.27k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  3.27k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1403|       |
 1404|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1405|  3.27k|                s19_8x16b = _mm_packus_epi16(s18_8x16b, zero_8x16b);
 1406|       |
 1407|  3.27k|                s15_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
 1408|  3.27k|                s16_8x16b =  _mm_and_si128(s15_8x16b, mask_low_32b);
 1409|  3.27k|                s17_8x16b =  _mm_and_si128(s19_8x16b, mask_high_96b);
 1410|  3.27k|                s18_8x16b = _mm_or_si128(s16_8x16b, s17_8x16b);
 1411|       |
 1412|       |                /* store 8 8-bit output values  */
 1413|       |                /* Store the output pixels of (cur_row + 1)*/
 1414|  3.27k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s18_8x16b);
 1415|       |
 1416|       |
 1417|       |                /* row + 3*/
 1418|  3.27k|                s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 1419|  3.27k|                s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 1420|  3.27k|                s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 1421|       |
 1422|       |                /*load 16 pixel values from (cur_row + 7)th row*/
 1423|  3.27k|                s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 1424|       |
 1425|       |                /*unpacking (cur_row + 6)th row and (cur_row + 7)th row*/
 1426|  3.27k|                s4_4_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 1427|       |
 1428|  3.27k|                s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 1429|       |
 1430|  3.27k|                s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 1431|  3.27k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 1432|  3.27k|                s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 1433|       |
 1434|  3.27k|                s37_8x16b = _mm_add_epi16(s36_8x16b, offset_8x16b);
 1435|       |
 1436|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 1437|  3.27k|                s38_8x16b = _mm_srai_epi16(s37_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  3.27k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  3.27k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1438|       |
 1439|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 1440|  3.27k|                s39_8x16b = _mm_packus_epi16(s38_8x16b, zero_8x16b);
 1441|       |
 1442|  3.27k|                s35_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (3 * dst_strd)));
 1443|  3.27k|                s36_8x16b =  _mm_and_si128(s35_8x16b, mask_low_32b);
 1444|  3.27k|                s37_8x16b =  _mm_and_si128(s39_8x16b, mask_high_96b);
 1445|  3.27k|                s38_8x16b = _mm_or_si128(s36_8x16b, s37_8x16b);
 1446|       |
 1447|       |                /* store 8 8-bit output values  */
 1448|       |                /* Store the output pixels of (cur_row+3)*/
 1449|  3.27k|                _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), s38_8x16b);
 1450|       |
 1451|  3.27k|                s2_10_16x8b = s2_3_16x8b;
 1452|       |
 1453|  3.27k|                pu1_src += 4 * src_strd; /* pointer update */
 1454|  3.27k|                pu1_dst += 4 * dst_strd; /* pointer update */
 1455|  3.27k|            }
 1456|  2.81k|        }
 1457|  2.71k|    }
 1458|  11.9k|}
ihevc_inter_pred_luma_copy_w16out_ssse3:
 1508|  2.87M|{
 1509|  2.87M|    WORD32 row, col;
 1510|  2.87M|    __m128i  s3, zero_8x16b;
 1511|       |
 1512|  2.87M|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  2.87M|#define ASSERT(x) assert((x))
  ------------------
 1513|  2.87M|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  2.87M|#define ASSERT(x) assert((x))
  ------------------
 1514|  2.87M|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  2.87M|#define UNUSED(x) ((void)(x))
  ------------------
 1515|  2.87M|    zero_8x16b = _mm_setzero_si128();
 1516|       |/*  outer for loop starts from here */
 1517|  2.87M|    if(wd % 8 == 0) /* wd = multiple of 8 case */
  ------------------
  |  Branch (1517:8): [True: 2.87M, False: 795]
  ------------------
 1518|  2.87M|    {
 1519|  14.5M|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1519:22): [True: 11.6M, False: 2.87M]
  ------------------
 1520|  11.6M|        {
 1521|  11.6M|            int offset = 0;
 1522|  23.8M|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (1522:26): [True: 12.2M, False: 11.6M]
  ------------------
 1523|  12.2M|            {
 1524|       |/* row =0 */
 1525|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 1526|  12.2M|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col] */
 1527|  12.2M|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 1528|       |
 1529|  12.2M|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|  12.2M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  12.2M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1530|       |
 1531|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH); */
 1532|  12.2M|                _mm_store_si128((__m128i *)(pi2_dst + offset), s3);
 1533|       |
 1534|       |/* row =1 */
 1535|       |                /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 1536|  12.2M|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset)); /* pu1_src[col] */
 1537|  12.2M|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 1538|       |
 1539|  12.2M|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|  12.2M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  12.2M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1540|       |
 1541|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH); */
 1542|  12.2M|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd + offset), s3);
 1543|       |
 1544|  12.2M|                offset += 8; /* To pointer update */
 1545|  12.2M|            } /* inner for loop ends here(8-output values in single iteration) */
 1546|       |
 1547|  11.6M|            pu1_src += 2 * src_strd; /* pointer update */
 1548|  11.6M|            pi2_dst += 2 * dst_strd; /* pointer update */
 1549|  11.6M|        }
 1550|  2.87M|    }
 1551|    795|    else /* wd = multiple of 4 case */
 1552|    795|    {
 1553|  6.41k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1553:22): [True: 5.62k, False: 795]
  ------------------
 1554|  5.62k|        {
 1555|  5.62k|            int offset = 0;
 1556|  16.5k|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1556:26): [True: 10.9k, False: 5.62k]
  ------------------
 1557|  10.9k|            {
 1558|       |/* row =0 */
 1559|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 1560|  10.9k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col] */
 1561|  10.9k|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 1562|       |
 1563|  10.9k|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|  10.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  10.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1564|       |
 1565|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH); */
 1566|  10.9k|                _mm_storel_epi64((__m128i *)(pi2_dst + offset), s3);
 1567|       |
 1568|       |/* row =1 */
 1569|       |                /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 1570|  10.9k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset)); /* pu1_src[col] */
 1571|  10.9k|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 1572|       |
 1573|  10.9k|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH */
  ------------------
  |  |   41|  10.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  10.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1574|       |
 1575|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH); */
 1576|  10.9k|                _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd + offset), s3);
 1577|  10.9k|                offset += 4; /* To pointer update */
 1578|  10.9k|            } /* inner for loop ends here(4-output values in single iteration) */
 1579|       |
 1580|  5.62k|            pu1_src += 2 * src_strd; /* pointer update */
 1581|  5.62k|            pi2_dst += 2 * dst_strd; /* pointer update */
 1582|  5.62k|        }
 1583|    795|    }
 1584|       |
 1585|  2.87M|}
ihevc_inter_pred_luma_horz_w16out_ssse3:
 1634|   314k|{
 1635|   314k|    WORD32 row, col;
 1636|       |
 1637|       |    /* all 128 bit registers are named with a suffix mxnb, where m is the */
 1638|       |    /* number of n bits packed in the register                            */
 1639|       |
 1640|   314k|    __m128i src_temp1_16x8b, src_temp2_16x8b, src_temp3_16x8b, src_temp4_16x8b, src_temp5_16x8b, src_temp6_16x8b;
 1641|   314k|    __m128i src_temp11_16x8b, src_temp12_16x8b, src_temp13_16x8b, src_temp14_16x8b, src_temp15_16x8b, src_temp16_16x8b;
 1642|   314k|    __m128i res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b, res_temp4_8x16b, res_temp5_8x16b, res_temp6_8x16b;
 1643|   314k|    __m128i res_temp11_8x16b, res_temp12_8x16b, res_temp13_8x16b, res_temp14_8x16b, res_temp15_8x16b, res_temp16_8x16b;
 1644|   314k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, coeff4_5_8x16b, coeff6_7_8x16b;
 1645|   314k|    __m128i control_mask_1_8x16b, control_mask_2_8x16b, control_mask_3_8x16b, control_mask_4_8x16b;
 1646|       |
 1647|   314k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|   314k|#define ASSERT(x) assert((x))
  ------------------
 1648|       |
 1649|   314k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   314k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1650|   314k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   314k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1651|   314k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   314k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1652|   314k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   314k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1653|   314k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   314k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1654|   314k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   314k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1655|       |
 1656|       |    /* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 1657|   314k|    src_temp1_16x8b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 1658|       |
 1659|       |
 1660|   314k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
 1661|   314k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
 1662|   314k|    control_mask_3_8x16b = _mm_set1_epi32(0x05040504); /* Control Mask register */
 1663|   314k|    control_mask_4_8x16b = _mm_set1_epi32(0x07060706); /* Control Mask register */
 1664|       |
 1665|   314k|    coeff0_1_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_1_8x16b);  /* pi1_coeff[4] */
 1666|   314k|    coeff2_3_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_2_8x16b);  /* pi1_coeff[4] */
 1667|       |
 1668|   314k|    coeff4_5_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_3_8x16b);  /* pi1_coeff[4] */
 1669|   314k|    coeff6_7_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_4_8x16b);  /* pi1_coeff[4] */
 1670|       |
 1671|   314k|    if(0 == (ht & 1)) /* ht multiple of 2 case */
  ------------------
  |  Branch (1671:8): [True: 112k, False: 201k]
  ------------------
 1672|   112k|    {
 1673|       |
 1674|   112k|        if(0 == (wd & 7)) /* wd = multiple of 8 case */
  ------------------
  |  Branch (1674:12): [True: 112k, False: 291]
  ------------------
 1675|   112k|        {
 1676|   594k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1676:26): [True: 481k, False: 112k]
  ------------------
 1677|   481k|            {
 1678|       |
 1679|   481k|                int offset = 0;
 1680|       |
 1681|   481k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   481k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1682|   481k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   481k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1683|       |
 1684|       |
 1685|       |
 1686|  1.10M|                for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (1686:30): [True: 621k, False: 481k]
  ------------------
 1687|   621k|                {
 1688|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
 1689|   621k|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));             /* row = 0 */
 1690|   621k|                    src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + src_strd - 3 + offset)); /* row = 1 */
 1691|       |
 1692|   621k|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
 1693|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
 1694|   621k|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1695|   621k|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
 1696|       |                    /* row = 0 */
 1697|   621k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1698|   621k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1699|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1700|   621k|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1701|   621k|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
 1702|       |
 1703|   621k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1704|   621k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1705|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1706|   621k|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1707|   621k|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
 1708|       |
 1709|   621k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1710|   621k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1711|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1712|   621k|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1713|   621k|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
 1714|       |
 1715|   621k|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 1716|   621k|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
 1717|   621k|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
 1718|       |
 1719|   621k|                    src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 1);                   /* row = 1 */
 1720|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/                 /* row = 1 */
 1721|   621k|                    src_temp13_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1722|   621k|                    res_temp11_8x16b = _mm_maddubs_epi16(src_temp13_16x8b, coeff0_1_8x16b);   /* row = 1 */
 1723|       |                                                                                              /* row = 1 */
 1724|   621k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1725|   621k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1726|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1727|   621k|                    src_temp14_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1728|   621k|                    res_temp12_8x16b = _mm_maddubs_epi16(src_temp14_16x8b, coeff2_3_8x16b);   /* row = 1 */
 1729|       |
 1730|   621k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1731|   621k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1732|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1733|   621k|                    src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1734|   621k|                    res_temp13_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff4_5_8x16b);   /* row = 1 */
 1735|       |
 1736|   621k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1737|   621k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1738|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1739|   621k|                    src_temp16_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1740|   621k|                    res_temp14_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff6_7_8x16b);   /* row = 1 */
 1741|       |
 1742|   621k|                    res_temp15_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 1743|   621k|                    res_temp16_8x16b = _mm_add_epi16(res_temp13_8x16b, res_temp14_8x16b);
 1744|   621k|                    res_temp15_8x16b = _mm_add_epi16(res_temp15_8x16b, res_temp16_8x16b);
 1745|       |
 1746|       |                    /* to store the 1st 4 pixels res. */
 1747|   621k|                    _mm_store_si128((__m128i *)(pi2_dst + offset), res_temp5_8x16b);
 1748|   621k|                    _mm_store_si128((__m128i *)(pi2_dst + dst_strd + offset), res_temp15_8x16b);
 1749|       |
 1750|   621k|                    offset += 8; /* To pointer updates*/
 1751|   621k|                }
 1752|   481k|                pu1_src += 2 * src_strd;  /* pointer updates*/
 1753|   481k|                pi2_dst += 2 * dst_strd;  /* pointer updates*/
 1754|   481k|            }
 1755|   112k|        }
 1756|    291|        else /* wd = multiple of 4 case */
 1757|    291|        {
 1758|  2.27k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1758:26): [True: 1.98k, False: 291]
  ------------------
 1759|  1.98k|            {
 1760|  1.98k|                int offset = 0;
 1761|       |
 1762|  1.98k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.98k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1763|  1.98k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.98k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1764|       |
 1765|       |
 1766|  5.81k|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1766:30): [True: 3.82k, False: 1.98k]
  ------------------
 1767|  3.82k|                {
 1768|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
 1769|  3.82k|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));             /* row = 0 */
 1770|  3.82k|                    src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + src_strd - 3 + offset)); /* row = 1 */
 1771|       |
 1772|  3.82k|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
 1773|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
 1774|  3.82k|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1775|  3.82k|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
 1776|       |                    /* row = 0 */
 1777|  3.82k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1778|  3.82k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1779|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1780|  3.82k|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1781|  3.82k|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
 1782|       |
 1783|  3.82k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1784|  3.82k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1785|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1786|  3.82k|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1787|  3.82k|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
 1788|       |
 1789|  3.82k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1790|  3.82k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1791|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1792|  3.82k|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1793|  3.82k|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
 1794|       |
 1795|  3.82k|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 1796|  3.82k|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
 1797|  3.82k|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
 1798|       |
 1799|  3.82k|                    src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 1);                   /* row = 1 */
 1800|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/                 /* row = 1 */
 1801|  3.82k|                    src_temp13_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1802|  3.82k|                    res_temp11_8x16b = _mm_maddubs_epi16(src_temp13_16x8b, coeff0_1_8x16b);   /* row = 1 */
 1803|       |                                                                                              /* row = 1 */
 1804|  3.82k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1805|  3.82k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1806|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1807|  3.82k|                    src_temp14_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1808|  3.82k|                    res_temp12_8x16b = _mm_maddubs_epi16(src_temp14_16x8b, coeff2_3_8x16b);   /* row = 1 */
 1809|       |
 1810|  3.82k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1811|  3.82k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1812|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1813|  3.82k|                    src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1814|  3.82k|                    res_temp13_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff4_5_8x16b);   /* row = 1 */
 1815|       |
 1816|  3.82k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1817|  3.82k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1818|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1819|  3.82k|                    src_temp16_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1820|  3.82k|                    res_temp14_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff6_7_8x16b);   /* row = 1 */
 1821|       |
 1822|  3.82k|                    res_temp15_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 1823|  3.82k|                    res_temp16_8x16b = _mm_add_epi16(res_temp13_8x16b, res_temp14_8x16b);
 1824|  3.82k|                    res_temp15_8x16b = _mm_add_epi16(res_temp15_8x16b, res_temp16_8x16b);
 1825|       |
 1826|       |                    /* to store the 1st 4 pixels res. */
 1827|  3.82k|                    _mm_storel_epi64((__m128i *)(pi2_dst + offset), res_temp5_8x16b);
 1828|  3.82k|                    _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd + offset), res_temp15_8x16b);
 1829|       |
 1830|  3.82k|                    offset += 4; /* To pointer updates*/
 1831|  3.82k|                }
 1832|  1.98k|                pu1_src += 2 * src_strd;  /* Pointer update */
 1833|  1.98k|                pi2_dst += 2 * dst_strd;  /* Pointer update */
 1834|  1.98k|            }
 1835|    291|        }
 1836|   112k|    }
 1837|   201k|    else /* odd ht */
 1838|   201k|    {
 1839|   201k|        if(0 == (wd & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (1839:12): [True: 195k, False: 6.03k]
  ------------------
 1840|   195k|        {
 1841|  3.20M|            for(row = 0; row < ht; row++)
  ------------------
  |  Branch (1841:26): [True: 3.00M, False: 195k]
  ------------------
 1842|  3.00M|            {
 1843|  3.00M|                int offset = 0;
 1844|       |
 1845|  3.00M|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  3.00M|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1846|       |
 1847|       |
 1848|  6.66M|                for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (1848:30): [True: 3.65M, False: 3.00M]
  ------------------
 1849|  3.65M|                {
 1850|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
 1851|  3.65M|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));  /* row = 0 */
 1852|       |
 1853|  3.65M|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
 1854|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
 1855|  3.65M|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1856|  3.65M|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
 1857|       |                    /* row = 0 */
 1858|  3.65M|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1859|  3.65M|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1860|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1861|  3.65M|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1862|  3.65M|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
 1863|       |
 1864|  3.65M|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1865|  3.65M|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1866|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1867|  3.65M|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1868|  3.65M|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
 1869|       |
 1870|  3.65M|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1871|  3.65M|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1872|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1873|  3.65M|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1874|  3.65M|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
 1875|       |
 1876|  3.65M|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 1877|  3.65M|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
 1878|  3.65M|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
 1879|       |
 1880|       |                    /* to store the 1st 4 pixels res. */
 1881|  3.65M|                    _mm_store_si128((__m128i *)(pi2_dst + offset), res_temp5_8x16b);
 1882|       |
 1883|  3.65M|                    offset += 8; /* To pointer updates*/
 1884|  3.65M|                }
 1885|  3.00M|                pu1_src += src_strd;    /* pointer updates*/
 1886|  3.00M|                pi2_dst += dst_strd;    /* pointer updates*/
 1887|  3.00M|            }
 1888|   195k|        }
 1889|  6.03k|        else  /* wd = multiple of 4 case */
 1890|  6.03k|        {
 1891|  51.6k|            for(row = 0; row < (ht - 1); row += 2)
  ------------------
  |  Branch (1891:26): [True: 45.6k, False: 6.03k]
  ------------------
 1892|  45.6k|            {
 1893|  45.6k|                int offset = 0;
 1894|       |
 1895|       |
 1896|  45.6k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  45.6k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1897|  45.6k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  45.6k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 1898|       |
 1899|       |
 1900|  99.6k|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1900:30): [True: 53.9k, False: 45.6k]
  ------------------
 1901|  53.9k|                {
 1902|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
 1903|  53.9k|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));             /* row = 0 */
 1904|  53.9k|                    src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src + src_strd - 3 + offset)); /* row = 1 */
 1905|       |
 1906|  53.9k|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
 1907|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
 1908|  53.9k|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1909|  53.9k|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
 1910|       |                                                                                           /* row = 0 */
 1911|  53.9k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1912|  53.9k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1913|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1914|  53.9k|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1915|  53.9k|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
 1916|       |
 1917|  53.9k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1918|  53.9k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1919|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1920|  53.9k|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1921|  53.9k|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
 1922|       |
 1923|  53.9k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1924|  53.9k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1925|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1926|  53.9k|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1927|  53.9k|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
 1928|       |
 1929|  53.9k|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 1930|  53.9k|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
 1931|  53.9k|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
 1932|       |
 1933|  53.9k|                    src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 1);                   /* row = 1 */
 1934|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/                 /* row = 1 */
 1935|  53.9k|                    src_temp13_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1936|  53.9k|                    res_temp11_8x16b = _mm_maddubs_epi16(src_temp13_16x8b, coeff0_1_8x16b);   /* row = 1 */
 1937|       |                                                                                              /* row = 1 */
 1938|  53.9k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1939|  53.9k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1940|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1941|  53.9k|                    src_temp14_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1942|  53.9k|                    res_temp12_8x16b = _mm_maddubs_epi16(src_temp14_16x8b, coeff2_3_8x16b);   /* row = 1 */
 1943|       |
 1944|  53.9k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1945|  53.9k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1946|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1947|  53.9k|                    src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1948|  53.9k|                    res_temp13_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff4_5_8x16b);   /* row = 1 */
 1949|       |
 1950|  53.9k|                    src_temp11_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);                   /* row = 1 */
 1951|  53.9k|                    src_temp12_16x8b = _mm_srli_si128(src_temp12_16x8b, 2);                   /* row = 1 */
 1952|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/                  /* row = 1 */
 1953|  53.9k|                    src_temp16_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b); /* row = 1 */
 1954|  53.9k|                    res_temp14_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff6_7_8x16b);   /* row = 1 */
 1955|       |
 1956|  53.9k|                    res_temp15_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 1957|  53.9k|                    res_temp16_8x16b = _mm_add_epi16(res_temp13_8x16b, res_temp14_8x16b);
 1958|  53.9k|                    res_temp15_8x16b = _mm_add_epi16(res_temp15_8x16b, res_temp16_8x16b);
 1959|       |
 1960|       |                    /* to store the 1st 4 pixels res. */
 1961|  53.9k|                    _mm_storel_epi64((__m128i *)(pi2_dst + offset), res_temp5_8x16b);
 1962|  53.9k|                    _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd + offset), res_temp15_8x16b);
 1963|       |
 1964|  53.9k|                    offset += 4; /* To pointer updates*/
 1965|  53.9k|                }
 1966|  45.6k|                pu1_src += 2 * src_strd;  /* Pointer update */
 1967|  45.6k|                pi2_dst += 2 * dst_strd;  /* Pointer update */
 1968|  45.6k|            }
 1969|  6.03k|            { /* last repeat at outside the loop */
 1970|  6.03k|                int offset = 0;
 1971|  12.9k|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1971:30): [True: 6.89k, False: 6.03k]
  ------------------
 1972|  6.89k|                {
 1973|       |                    /*load 16 pixel values from 12:-3 pos. relative to cur. pos.*/
 1974|  6.89k|                    src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 3 + offset));  /* row = 0 */
 1975|       |
 1976|  6.89k|                    src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 1);                  /* row = 0 */
 1977|       |                    /* pix. |5:-2|4:-3| to do two dot-products at same time*/              /* row = 0 */
 1978|  6.89k|                    src_temp3_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1979|  6.89k|                    res_temp1_8x16b = _mm_maddubs_epi16(src_temp3_16x8b, coeff0_1_8x16b);  /* row = 0 */
 1980|       |                                                                                           /* row = 0 */
 1981|  6.89k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1982|  6.89k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1983|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1984|  6.89k|                    src_temp4_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1985|  6.89k|                    res_temp2_8x16b = _mm_maddubs_epi16(src_temp4_16x8b, coeff2_3_8x16b);  /* row = 0 */
 1986|       |
 1987|  6.89k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1988|  6.89k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1989|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1990|  6.89k|                    src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1991|  6.89k|                    res_temp3_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff4_5_8x16b);  /* row = 0 */
 1992|       |
 1993|  6.89k|                    src_temp1_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);                  /* row = 0 */
 1994|  6.89k|                    src_temp2_16x8b = _mm_srli_si128(src_temp2_16x8b, 2);                  /* row = 0 */
 1995|       |                    /* pix. |7:0|6:-1| to do two dot-products at same time*/               /* row = 0 */
 1996|  6.89k|                    src_temp6_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b); /* row = 0 */
 1997|  6.89k|                    res_temp4_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff6_7_8x16b);  /* row = 0 */
 1998|       |
 1999|  6.89k|                    res_temp5_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 2000|  6.89k|                    res_temp6_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp4_8x16b);
 2001|  6.89k|                    res_temp5_8x16b = _mm_add_epi16(res_temp5_8x16b, res_temp6_8x16b);
 2002|       |
 2003|       |                    /* to store the 1st 4 pixels res. */
 2004|  6.89k|                    _mm_storel_epi64((__m128i *)(pi2_dst + offset), res_temp5_8x16b);
 2005|       |
 2006|  6.89k|                    offset += 4; /* To pointer updates*/
 2007|  6.89k|                }
 2008|  6.03k|            }
 2009|  6.03k|        }
 2010|   201k|    }
 2011|   314k|}
ihevc_inter_pred_luma_vert_w16out_ssse3:
 2060|  38.9k|{
 2061|  38.9k|    WORD32 row, col;
 2062|  38.9k|    UWORD8 *pu1_src_copy;
 2063|  38.9k|    WORD16 *pi2_dst_copy;
 2064|  38.9k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, coeff4_5_8x16b, coeff6_7_8x16b;
 2065|  38.9k|    __m128i s0_8x16b, s1_8x16b, s2_8x16b, s3_8x16b, s4_8x16b, s5_8x16b, s6_8x16b;
 2066|  38.9k|    __m128i s2_0_16x8b, s2_1_16x8b, s2_2_16x8b, s2_3_16x8b, s2_4_16x8b, s2_5_16x8b, s2_6_16x8b, s2_7_16x8b, s2_8_16x8b, s2_9_16x8b, s2_10_16x8b;
 2067|  38.9k|    __m128i s3_0_16x8b, s3_1_16x8b, s3_2_16x8b, s3_3_16x8b, s3_4_16x8b;
 2068|  38.9k|    __m128i s4_0_16x8b, s4_1_16x8b, s4_2_16x8b, s4_3_16x8b, s4_4_16x8b;
 2069|  38.9k|    __m128i s10_8x16b, s11_8x16b, s12_8x16b, s13_8x16b, s14_8x16b, s15_8x16b, s16_8x16b;
 2070|  38.9k|    __m128i s20_8x16b, s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b, s26_8x16b;
 2071|  38.9k|    __m128i s30_8x16b, s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b, s36_8x16b;
 2072|       |
 2073|       |
 2074|  38.9k|    __m128i control_mask_1_8x16b, control_mask_2_8x16b, control_mask_3_8x16b, control_mask_4_8x16b;
 2075|       |
 2076|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 2077|  38.9k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 2078|       |
 2079|  38.9k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
 2080|  38.9k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
 2081|  38.9k|    control_mask_3_8x16b = _mm_set1_epi32(0x05040504); /* Control Mask register */
 2082|  38.9k|    control_mask_4_8x16b = _mm_set1_epi32(0x07060706); /* Control Mask register */
 2083|       |
 2084|  38.9k|    coeff0_1_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_1_8x16b);  /* pi1_coeff[4] */
 2085|  38.9k|    coeff2_3_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_2_8x16b);  /* pi1_coeff[4] */
 2086|       |
 2087|  38.9k|    coeff4_5_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_3_8x16b);  /* pi1_coeff[4] */
 2088|  38.9k|    coeff6_7_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_4_8x16b);  /* pi1_coeff[4] */
 2089|       |
 2090|       |
 2091|       |/*  outer for loop starts from here */
 2092|  38.9k|    if((wd % 8) == 0)
  ------------------
  |  Branch (2092:8): [True: 38.5k, False: 336]
  ------------------
 2093|  38.5k|    { /* wd = multiple of 8 case */
 2094|       |
 2095|  38.5k|        pu1_src_copy = pu1_src;
 2096|  38.5k|        pi2_dst_copy = pi2_dst;
 2097|       |
 2098|  86.6k|        for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (2098:22): [True: 48.0k, False: 38.5k]
  ------------------
 2099|  48.0k|        {
 2100|       |
 2101|  48.0k|            pu1_src = pu1_src_copy + col;
 2102|  48.0k|            pi2_dst = pi2_dst_copy + col;
 2103|       |
 2104|  48.0k|            PREFETCH((char const *)(pu1_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  48.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2105|  48.0k|            PREFETCH((char const *)(pu1_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  48.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2106|  48.0k|            PREFETCH((char const *)(pu1_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  48.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2107|  48.0k|            PREFETCH((char const *)(pu1_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  48.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2108|       |
 2109|       |            /*load 8 pixel values */
 2110|  48.0k|            s2_0_16x8b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-3 * src_strd)));
 2111|       |
 2112|       |            /*load 8 pixel values */
 2113|  48.0k|            s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-2 * src_strd)));
 2114|       |
 2115|  48.0k|            s3_0_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 2116|       |
 2117|  48.0k|            s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
 2118|       |
 2119|       |            /*load 8 pixel values */
 2120|  48.0k|            s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 2121|       |
 2122|       |            /*load 8 pixel values */
 2123|  48.0k|            s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 2124|       |
 2125|  48.0k|            s3_1_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 2126|       |
 2127|  48.0k|            s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
 2128|       |
 2129|       |            /*load 8 pixel values */
 2130|  48.0k|            s2_4_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 2131|       |
 2132|       |            /*load 8 pixel values */
 2133|  48.0k|            s2_5_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 2134|       |
 2135|  48.0k|            s3_2_16x8b = _mm_unpacklo_epi8(s2_4_16x8b, s2_5_16x8b);
 2136|       |
 2137|  48.0k|            s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
 2138|       |
 2139|       |            /*load 8 pixel values */
 2140|  48.0k|            s2_6_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 2141|       |
 2142|       |            /*load 8 pixel values */
 2143|  48.0k|            s2_7_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (4 * src_strd)));
 2144|       |
 2145|  48.0k|            s3_3_16x8b = _mm_unpacklo_epi8(s2_6_16x8b, s2_7_16x8b);
 2146|       |
 2147|  48.0k|            s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
 2148|       |
 2149|  48.0k|            s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 2150|  48.0k|            s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 2151|  48.0k|            s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 2152|       |
 2153|       |            /* store 8 8-bit output values  */
 2154|       |            /* Store the output pixels of row 0*/
 2155|  48.0k|            _mm_store_si128((__m128i *)(pi2_dst), s6_8x16b);
 2156|       |
 2157|       |            /* ROW 2*/
 2158|  48.0k|            s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 2159|  48.0k|            s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 2160|  48.0k|            s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 2161|       |
 2162|       |            /*load 8 pixel values */
 2163|  48.0k|            s2_8_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (5 * src_strd)));
 2164|       |
 2165|       |            /*load 8 pixel values */
 2166|  48.0k|            s2_9_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (6 * src_strd)));
 2167|       |
 2168|  48.0k|            s3_4_16x8b = _mm_unpacklo_epi8(s2_8_16x8b, s2_9_16x8b);
 2169|       |
 2170|  48.0k|            s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 2171|       |
 2172|  48.0k|            s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 2173|  48.0k|            s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 2174|  48.0k|            s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 2175|       |
 2176|       |            /* store 8 8-bit output values  */
 2177|       |            /* Store the output pixels of row 2*/
 2178|  48.0k|            _mm_store_si128((__m128i *)(pi2_dst + (2 * dst_strd)), s26_8x16b);
 2179|       |
 2180|       |
 2181|       |            /*ROW 1*/
 2182|  48.0k|            s4_0_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 2183|       |
 2184|  48.0k|            s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 2185|       |
 2186|  48.0k|            s4_1_16x8b = _mm_unpacklo_epi8(s2_3_16x8b, s2_4_16x8b);
 2187|       |
 2188|  48.0k|            s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 2189|       |
 2190|  48.0k|            s4_2_16x8b = _mm_unpacklo_epi8(s2_5_16x8b, s2_6_16x8b);
 2191|       |
 2192|  48.0k|            s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 2193|       |
 2194|  48.0k|            s4_3_16x8b = _mm_unpacklo_epi8(s2_7_16x8b, s2_8_16x8b);
 2195|       |
 2196|  48.0k|            s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 2197|       |
 2198|  48.0k|            s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 2199|  48.0k|            s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 2200|  48.0k|            s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 2201|       |
 2202|       |
 2203|       |            /* store 8 8-bit output values  */
 2204|       |            /* Store the output pixels of row 1*/
 2205|  48.0k|            _mm_store_si128((__m128i *)(pi2_dst + (dst_strd)), s16_8x16b);
 2206|       |
 2207|       |
 2208|       |            /* ROW 3*/
 2209|  48.0k|            s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 2210|  48.0k|            s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 2211|  48.0k|            s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 2212|       |
 2213|       |            /*load 8 pixel values */
 2214|  48.0k|            s2_10_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (7 * src_strd)));
 2215|       |
 2216|  48.0k|            s4_4_16x8b = _mm_unpacklo_epi8(s2_9_16x8b, s2_10_16x8b);
 2217|       |
 2218|  48.0k|            s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 2219|       |
 2220|  48.0k|            s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 2221|  48.0k|            s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 2222|  48.0k|            s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 2223|       |
 2224|       |
 2225|       |            /* store 8 8-bit output values  */
 2226|       |            /* Store the output pixels of row 2*/
 2227|  48.0k|            _mm_store_si128((__m128i *)(pi2_dst + (3 * dst_strd)), s36_8x16b);
 2228|       |
 2229|  48.0k|            pu1_src += (8 * src_strd);
 2230|  48.0k|            pi2_dst += (4 * dst_strd);
 2231|       |
 2232|   189k|            for(row = 4; row < ht; row += 4)
  ------------------
  |  Branch (2232:26): [True: 141k, False: 48.0k]
  ------------------
 2233|   141k|            {
 2234|       |
 2235|   141k|                PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   141k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2236|   141k|                PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   141k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2237|   141k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   141k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2238|   141k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   141k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2239|       |
 2240|   141k|                s3_0_16x8b = s3_2_16x8b;
 2241|   141k|                s3_1_16x8b = s3_3_16x8b;
 2242|   141k|                s3_2_16x8b = s3_4_16x8b;
 2243|       |
 2244|   141k|                s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
 2245|   141k|                s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
 2246|   141k|                s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
 2247|       |
 2248|       |                /*load 8 pixel values from (cur_row + 4)th row*/
 2249|   141k|                s2_0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));
 2250|       |
 2251|   141k|                s3_3_16x8b = _mm_unpacklo_epi8(s2_10_16x8b, s2_0_16x8b);
 2252|   141k|                s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
 2253|       |
 2254|   141k|                s4_0_16x8b = s4_2_16x8b;
 2255|   141k|                s4_1_16x8b = s4_3_16x8b;
 2256|   141k|                s4_2_16x8b = s4_4_16x8b;
 2257|       |
 2258|   141k|                s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 2259|   141k|                s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 2260|   141k|                s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 2261|       |
 2262|       |                /* store 8 8-bit output values  */
 2263|       |                /* Store the output pixels of row 4*/
 2264|   141k|                _mm_store_si128((__m128i *)(pi2_dst), s6_8x16b);
 2265|       |
 2266|       |                /* row + 2*/
 2267|   141k|                s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 2268|   141k|                s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 2269|   141k|                s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 2270|       |
 2271|       |                /*load 8 pixel values from (cur_row + 5)th row*/
 2272|   141k|                s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd));
 2273|       |
 2274|       |                /*load 8 pixel values from (cur_row + 6)th row*/
 2275|   141k|                s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 2276|       |
 2277|       |                /*unpacking (cur_row + 5)th row and (cur_row + 6)th row*/
 2278|   141k|                s3_4_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 2279|       |
 2280|   141k|                s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 2281|       |
 2282|   141k|                s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 2283|   141k|                s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 2284|   141k|                s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 2285|       |
 2286|       |                /* store 8 8-bit output values  */
 2287|       |                /* Store the output pixels of (cur_row+2)*/
 2288|   141k|                _mm_store_si128((__m128i *)(pi2_dst + (2 * dst_strd)), s26_8x16b);
 2289|       |
 2290|       |
 2291|       |                /*row + 1*/
 2292|   141k|                s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 2293|   141k|                s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 2294|   141k|                s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 2295|       |
 2296|       |                /*unpacking (cur_row + 4)th row and (cur_row + 5)th row*/
 2297|   141k|                s4_3_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 2298|   141k|                s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 2299|       |
 2300|   141k|                s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 2301|   141k|                s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 2302|   141k|                s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 2303|       |
 2304|       |
 2305|       |                /* store 8 8-bit output values  */
 2306|       |                /* Store the output pixels of (cur_row + 1)*/
 2307|   141k|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd), s16_8x16b);
 2308|       |
 2309|       |
 2310|       |                /* row + 3*/
 2311|   141k|                s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 2312|   141k|                s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 2313|   141k|                s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 2314|       |
 2315|       |                /*load 8 pixel values from (cur_row + 7)th row*/
 2316|   141k|                s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 2317|       |
 2318|       |                /*unpacking (cur_row + 6)th row and (cur_row + 7)th row*/
 2319|   141k|                s4_4_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 2320|       |
 2321|   141k|                s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 2322|       |
 2323|   141k|                s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 2324|   141k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 2325|   141k|                s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 2326|       |
 2327|       |                /* store 8 8-bit output values  */
 2328|       |                /* Store the output pixels of (cur_row+3)*/
 2329|   141k|                _mm_store_si128((__m128i *)(pi2_dst + (3 * dst_strd)), s36_8x16b);
 2330|       |
 2331|   141k|                s2_10_16x8b = s2_3_16x8b;
 2332|       |
 2333|       |
 2334|   141k|                pu1_src += 4 * src_strd; /* pointer update */
 2335|   141k|                pi2_dst += 4 * dst_strd; /* pointer update */
 2336|   141k|            }
 2337|  48.0k|        }
 2338|  38.5k|    }
 2339|    336|    else /* wd = multiple of 8 case */
 2340|    336|    {
 2341|       |
 2342|    336|        pu1_src_copy = pu1_src;
 2343|    336|        pi2_dst_copy = pi2_dst;
 2344|       |
 2345|    887|        for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (2345:22): [True: 551, False: 336]
  ------------------
 2346|    551|        {
 2347|       |
 2348|    551|            pu1_src = pu1_src_copy + col;
 2349|    551|            pi2_dst = pi2_dst_copy + col;
 2350|       |
 2351|    551|            PREFETCH((char const *)(pu1_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    551|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2352|    551|            PREFETCH((char const *)(pu1_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    551|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2353|    551|            PREFETCH((char const *)(pu1_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    551|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2354|    551|            PREFETCH((char const *)(pu1_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    551|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2355|       |
 2356|       |            /*load 8 pixel values */
 2357|    551|            s2_0_16x8b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-3 * src_strd)));
 2358|       |
 2359|       |            /*load 8 pixel values */
 2360|    551|            s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-2 * src_strd)));
 2361|       |
 2362|    551|            s3_0_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 2363|       |
 2364|    551|            s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
 2365|       |
 2366|       |            /*load 8 pixel values */
 2367|    551|            s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 2368|       |
 2369|       |            /*load 8 pixel values */
 2370|    551|            s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 2371|       |
 2372|    551|            s3_1_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 2373|       |
 2374|    551|            s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
 2375|       |
 2376|       |            /*load 8 pixel values */
 2377|    551|            s2_4_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 2378|       |
 2379|       |            /*load 8 pixel values */
 2380|    551|            s2_5_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 2381|       |
 2382|    551|            s3_2_16x8b = _mm_unpacklo_epi8(s2_4_16x8b, s2_5_16x8b);
 2383|       |
 2384|    551|            s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
 2385|       |
 2386|       |            /*load 8 pixel values */
 2387|    551|            s2_6_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 2388|       |
 2389|       |            /*load 8 pixel values */
 2390|    551|            s2_7_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (4 * src_strd)));
 2391|       |
 2392|    551|            s3_3_16x8b = _mm_unpacklo_epi8(s2_6_16x8b, s2_7_16x8b);
 2393|       |
 2394|    551|            s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
 2395|       |
 2396|    551|            s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 2397|    551|            s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 2398|    551|            s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 2399|       |
 2400|       |            /* store 8 8-bit output values  */
 2401|       |            /* Store the output pixels of row 0*/
 2402|    551|            _mm_storel_epi64((__m128i *)(pi2_dst), s6_8x16b);
 2403|       |
 2404|       |            /* ROW 2*/
 2405|    551|            s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 2406|    551|            s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 2407|    551|            s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 2408|       |
 2409|       |            /*load 8 pixel values */
 2410|    551|            s2_8_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (5 * src_strd)));
 2411|       |
 2412|       |            /*load 8 pixel values */
 2413|    551|            s2_9_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (6 * src_strd)));
 2414|       |
 2415|    551|            s3_4_16x8b = _mm_unpacklo_epi8(s2_8_16x8b, s2_9_16x8b);
 2416|       |
 2417|    551|            s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 2418|       |
 2419|    551|            s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 2420|    551|            s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 2421|    551|            s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 2422|       |
 2423|       |            /* store 8 8-bit output values  */
 2424|       |            /* Store the output pixels of row 2*/
 2425|    551|            _mm_storel_epi64((__m128i *)(pi2_dst + (2 * dst_strd)), s26_8x16b);
 2426|       |
 2427|       |
 2428|       |            /*ROW 1*/
 2429|    551|            s4_0_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 2430|       |
 2431|    551|            s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 2432|       |
 2433|    551|            s4_1_16x8b = _mm_unpacklo_epi8(s2_3_16x8b, s2_4_16x8b);
 2434|       |
 2435|    551|            s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 2436|       |
 2437|    551|            s4_2_16x8b = _mm_unpacklo_epi8(s2_5_16x8b, s2_6_16x8b);
 2438|       |
 2439|    551|            s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 2440|       |
 2441|    551|            s4_3_16x8b = _mm_unpacklo_epi8(s2_7_16x8b, s2_8_16x8b);
 2442|       |
 2443|    551|            s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 2444|       |
 2445|    551|            s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 2446|    551|            s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 2447|    551|            s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 2448|       |
 2449|       |
 2450|       |            /* store 8 8-bit output values  */
 2451|       |            /* Store the output pixels of row 1*/
 2452|    551|            _mm_storel_epi64((__m128i *)(pi2_dst + (dst_strd)), s16_8x16b);
 2453|       |
 2454|       |
 2455|       |            /* ROW 3*/
 2456|    551|            s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 2457|    551|            s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 2458|    551|            s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 2459|       |
 2460|       |            /*load 8 pixel values */
 2461|    551|            s2_10_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (7 * src_strd)));
 2462|       |
 2463|    551|            s4_4_16x8b = _mm_unpacklo_epi8(s2_9_16x8b, s2_10_16x8b);
 2464|       |
 2465|    551|            s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 2466|       |
 2467|    551|            s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 2468|    551|            s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 2469|    551|            s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 2470|       |
 2471|       |            /* store 8 8-bit output values  */
 2472|       |            /* Store the output pixels of row 2*/
 2473|    551|            _mm_storel_epi64((__m128i *)(pi2_dst + (3 * dst_strd)), s36_8x16b);
 2474|       |
 2475|    551|            pu1_src += (8 * src_strd);
 2476|    551|            pi2_dst += (4 * dst_strd);
 2477|       |
 2478|  2.07k|            for(row = 4; row < ht; row += 4)
  ------------------
  |  Branch (2478:26): [True: 1.51k, False: 551]
  ------------------
 2479|  1.51k|            {
 2480|       |
 2481|  1.51k|                PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.51k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2482|  1.51k|                PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.51k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2483|  1.51k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.51k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2484|  1.51k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.51k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 2485|       |
 2486|  1.51k|                s3_0_16x8b = s3_2_16x8b;
 2487|  1.51k|                s3_1_16x8b = s3_3_16x8b;
 2488|  1.51k|                s3_2_16x8b = s3_4_16x8b;
 2489|       |
 2490|  1.51k|                s0_8x16b = _mm_maddubs_epi16(s3_0_16x8b, coeff0_1_8x16b);
 2491|  1.51k|                s1_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff2_3_8x16b);
 2492|  1.51k|                s2_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff4_5_8x16b);
 2493|       |
 2494|       |                /*load 8 pixel values from (cur_row + 4)th row*/
 2495|  1.51k|                s2_0_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src));
 2496|       |
 2497|  1.51k|                s3_3_16x8b = _mm_unpacklo_epi8(s2_10_16x8b, s2_0_16x8b);
 2498|  1.51k|                s3_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff6_7_8x16b);
 2499|       |
 2500|  1.51k|                s4_0_16x8b = s4_2_16x8b;
 2501|  1.51k|                s4_1_16x8b = s4_3_16x8b;
 2502|  1.51k|                s4_2_16x8b = s4_4_16x8b;
 2503|       |
 2504|  1.51k|                s4_8x16b = _mm_add_epi16(s0_8x16b, s1_8x16b);
 2505|  1.51k|                s5_8x16b = _mm_add_epi16(s2_8x16b, s3_8x16b);
 2506|  1.51k|                s6_8x16b = _mm_add_epi16(s4_8x16b, s5_8x16b);
 2507|       |
 2508|       |                /* store 8 8-bit output values  */
 2509|       |                /* Store the output pixels of row 4*/
 2510|  1.51k|                _mm_storel_epi64((__m128i *)(pi2_dst), s6_8x16b);
 2511|       |
 2512|       |                /* row + 2*/
 2513|  1.51k|                s20_8x16b = _mm_maddubs_epi16(s3_1_16x8b, coeff0_1_8x16b);
 2514|  1.51k|                s21_8x16b = _mm_maddubs_epi16(s3_2_16x8b, coeff2_3_8x16b);
 2515|  1.51k|                s22_8x16b = _mm_maddubs_epi16(s3_3_16x8b, coeff4_5_8x16b);
 2516|       |
 2517|       |                /*load 8 pixel values from (cur_row + 5)th row*/
 2518|  1.51k|                s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + src_strd));
 2519|       |
 2520|       |                /*load 8 pixel values from (cur_row + 6)th row*/
 2521|  1.51k|                s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 2522|       |
 2523|       |                /*unpacking (cur_row + 5)th row and (cur_row + 6)th row*/
 2524|  1.51k|                s3_4_16x8b = _mm_unpacklo_epi8(s2_1_16x8b, s2_2_16x8b);
 2525|       |
 2526|  1.51k|                s23_8x16b = _mm_maddubs_epi16(s3_4_16x8b, coeff6_7_8x16b);
 2527|       |
 2528|  1.51k|                s24_8x16b = _mm_add_epi16(s20_8x16b, s21_8x16b);
 2529|  1.51k|                s25_8x16b = _mm_add_epi16(s22_8x16b, s23_8x16b);
 2530|  1.51k|                s26_8x16b = _mm_add_epi16(s24_8x16b, s25_8x16b);
 2531|       |
 2532|       |                /* store 8 8-bit output values  */
 2533|       |                /* Store the output pixels of (cur_row+2)*/
 2534|  1.51k|                _mm_storel_epi64((__m128i *)(pi2_dst + (2 * dst_strd)), s26_8x16b);
 2535|       |
 2536|       |
 2537|       |                /*row + 1*/
 2538|  1.51k|                s10_8x16b = _mm_maddubs_epi16(s4_0_16x8b, coeff0_1_8x16b);
 2539|  1.51k|                s11_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff2_3_8x16b);
 2540|  1.51k|                s12_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff4_5_8x16b);
 2541|       |
 2542|       |                /*unpacking (cur_row + 4)th row and (cur_row + 5)th row*/
 2543|  1.51k|                s4_3_16x8b = _mm_unpacklo_epi8(s2_0_16x8b, s2_1_16x8b);
 2544|  1.51k|                s13_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff6_7_8x16b);
 2545|       |
 2546|  1.51k|                s14_8x16b = _mm_add_epi16(s10_8x16b, s11_8x16b);
 2547|  1.51k|                s15_8x16b = _mm_add_epi16(s12_8x16b, s13_8x16b);
 2548|  1.51k|                s16_8x16b = _mm_add_epi16(s14_8x16b, s15_8x16b);
 2549|       |
 2550|       |                /* store 8 8-bit output values  */
 2551|       |                /* Store the output pixels of (cur_row + 1)*/
 2552|  1.51k|                _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd), s16_8x16b);
 2553|       |
 2554|       |
 2555|       |                /* row + 3*/
 2556|  1.51k|                s30_8x16b = _mm_maddubs_epi16(s4_1_16x8b, coeff0_1_8x16b);
 2557|  1.51k|                s31_8x16b = _mm_maddubs_epi16(s4_2_16x8b, coeff2_3_8x16b);
 2558|  1.51k|                s32_8x16b = _mm_maddubs_epi16(s4_3_16x8b, coeff4_5_8x16b);
 2559|       |
 2560|       |                /*load 8 pixel values from (cur_row + 7)th row*/
 2561|  1.51k|                s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 2562|       |
 2563|       |                /*unpacking (cur_row + 6)th row and (cur_row + 7)th row*/
 2564|  1.51k|                s4_4_16x8b = _mm_unpacklo_epi8(s2_2_16x8b, s2_3_16x8b);
 2565|       |
 2566|  1.51k|                s33_8x16b = _mm_maddubs_epi16(s4_4_16x8b, coeff6_7_8x16b);
 2567|       |
 2568|  1.51k|                s34_8x16b = _mm_add_epi16(s30_8x16b, s31_8x16b);
 2569|  1.51k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s33_8x16b);
 2570|  1.51k|                s36_8x16b = _mm_add_epi16(s34_8x16b, s35_8x16b);
 2571|       |
 2572|       |                /* store 8 8-bit output values  */
 2573|       |                /* Store the output pixels of (cur_row+3)*/
 2574|  1.51k|                _mm_storel_epi64((__m128i *)(pi2_dst + (3 * dst_strd)), s36_8x16b);
 2575|       |
 2576|  1.51k|                s2_10_16x8b = s2_3_16x8b;
 2577|       |
 2578|  1.51k|                pu1_src += 4 * src_strd; /* pointer update */
 2579|  1.51k|                pi2_dst += 4 * dst_strd; /* pointer update */
 2580|  1.51k|            }
 2581|    551|        }
 2582|    336|    }
 2583|  38.9k|}
ihevc_inter_pred_luma_vert_w16inp_ssse3:
 2633|  52.6k|{
 2634|  52.6k|    WORD32 row, col;
 2635|  52.6k|    WORD16 *pi2_src_copy;
 2636|  52.6k|    UWORD8 *pu1_dst_copy;
 2637|  52.6k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, coeff4_5_8x16b, coeff6_7_8x16b;
 2638|  52.6k|    __m128i s0_8x16b, s1_8x16b, s2_8x16b, s3_8x16b, s4_8x16b, s5_8x16b, s6_8x16b, s8_8x16b, s9_8x16b;
 2639|  52.6k|    __m128i s2_0_16x8b, s2_1_16x8b, s2_2_16x8b, s2_3_16x8b, s2_4_16x8b, s2_5_16x8b, s2_6_16x8b, s2_7_16x8b, s2_8_16x8b, s2_9_16x8b, s2_10_16x8b;
 2640|  52.6k|    __m128i s3_0_16x8b, s3_1_16x8b, s3_2_16x8b, s3_3_16x8b, s3_4_16x8b;
 2641|  52.6k|    __m128i s4_0_16x8b, s4_1_16x8b, s4_2_16x8b, s4_3_16x8b, s4_4_16x8b;
 2642|  52.6k|    __m128i s10_8x16b, s11_8x16b, s12_8x16b, s13_8x16b, s14_8x16b, s15_8x16b, s16_8x16b, s18_8x16b, s19_8x16b;
 2643|  52.6k|    __m128i s20_8x16b, s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b, s26_8x16b, s28_8x16b, s29_8x16b;
 2644|  52.6k|    __m128i s30_8x16b, s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b, s36_8x16b, s38_8x16b, s39_8x16b;
 2645|       |
 2646|  52.6k|    __m128i zero_8x16b, offset_8x16b, mask_low_32b, mask_high_96b, sign_reg;
 2647|       |
 2648|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 2649|  52.6k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 2650|       |
 2651|  52.6k|    zero_8x16b = _mm_setzero_si128();
 2652|  52.6k|    sign_reg =  _mm_cmpgt_epi8(zero_8x16b, s4_8x16b);
 2653|  52.6k|    s5_8x16b  = _mm_unpacklo_epi8(s4_8x16b, sign_reg);
 2654|       |
 2655|  52.6k|    coeff0_1_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(0, 0, 0, 0));  /* pi1_coeff[4] */
 2656|  52.6k|    coeff2_3_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(1, 1, 1, 1));  /* pi1_coeff[4] */
 2657|       |
 2658|  52.6k|    coeff4_5_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(2, 2, 2, 2));  /* pi1_coeff[4] */
 2659|  52.6k|    coeff6_7_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(3, 3, 3, 3));  /* pi1_coeff[4] */
 2660|       |
 2661|       |
 2662|       |/* seting values in register */
 2663|  52.6k|    offset_8x16b = _mm_set1_epi32(OFFSET_14_MINUS_BIT_DEPTH); /* for offset addition */
  ------------------
  |  |   42|  52.6k|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  52.6k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  52.6k|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2664|  52.6k|    mask_low_32b = _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000);
 2665|  52.6k|    mask_high_96b = _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF);
 2666|       |
 2667|       |
 2668|  52.6k|    pi2_src_copy = pi2_src;
 2669|  52.6k|    pu1_dst_copy = pu1_dst;
 2670|       |
 2671|       |/*  outer for loop starts from here */
 2672|   159k|    for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (2672:18): [True: 106k, False: 52.6k]
  ------------------
 2673|   106k|    {
 2674|       |
 2675|   106k|        pi2_src = pi2_src_copy + col;
 2676|   106k|        pu1_dst = pu1_dst_copy + col;
 2677|       |
 2678|       |        /*load 4 pixel values */
 2679|   106k|        s2_0_16x8b  = _mm_loadl_epi64((__m128i *)(pi2_src + (-3 * src_strd)));
 2680|       |
 2681|       |        /*load 4 pixel values */
 2682|   106k|        s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (-2 * src_strd)));
 2683|       |
 2684|   106k|        s3_0_16x8b = _mm_unpacklo_epi16(s2_0_16x8b, s2_1_16x8b);
 2685|       |
 2686|   106k|        s0_8x16b = _mm_madd_epi16(s3_0_16x8b, coeff0_1_8x16b);
 2687|       |
 2688|       |        /*load 4 pixel values */
 2689|   106k|        s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (-1 * src_strd)));
 2690|       |
 2691|       |        /*load 4 pixel values */
 2692|   106k|        s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (0 * src_strd)));
 2693|       |
 2694|   106k|        s3_1_16x8b = _mm_unpacklo_epi16(s2_2_16x8b, s2_3_16x8b);
 2695|       |
 2696|   106k|        s1_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff2_3_8x16b);
 2697|       |
 2698|       |        /*load 4 pixel values */
 2699|   106k|        s2_4_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (1 * src_strd)));
 2700|       |
 2701|       |        /*load 4 pixel values */
 2702|   106k|        s2_5_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (2 * src_strd)));
 2703|       |
 2704|   106k|        s3_2_16x8b = _mm_unpacklo_epi16(s2_4_16x8b, s2_5_16x8b);
 2705|       |
 2706|   106k|        s2_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff4_5_8x16b);
 2707|       |
 2708|       |        /*load 4 pixel values */
 2709|   106k|        s2_6_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (3 * src_strd)));
 2710|       |
 2711|       |        /*load 4 pixel values */
 2712|   106k|        s2_7_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (4 * src_strd)));
 2713|       |
 2714|   106k|        s3_3_16x8b = _mm_unpacklo_epi16(s2_6_16x8b, s2_7_16x8b);
 2715|       |
 2716|   106k|        s3_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff6_7_8x16b);
 2717|       |
 2718|   106k|        s4_8x16b = _mm_add_epi32(s0_8x16b, s1_8x16b);
 2719|   106k|        s5_8x16b = _mm_add_epi32(s2_8x16b, s3_8x16b);
 2720|   106k|        s6_8x16b = _mm_add_epi32(s4_8x16b, s5_8x16b);
 2721|       |
 2722|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2723|   106k|        s8_8x16b = _mm_srai_epi32(s6_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2724|       |
 2725|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2726|   106k|        s9_8x16b = _mm_add_epi32(s8_8x16b, offset_8x16b);
 2727|       |
 2728|       |        /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2729|   106k|        s8_8x16b = _mm_srai_epi32(s9_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2730|       |
 2731|   106k|        s8_8x16b = _mm_packs_epi32(s8_8x16b, zero_8x16b);
 2732|       |
 2733|       |
 2734|       |        /* i2_tmp = CLIP_U8(i2_tmp);*/
 2735|   106k|        s9_8x16b = _mm_packus_epi16(s8_8x16b, zero_8x16b);
 2736|       |
 2737|   106k|        s4_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst));
 2738|   106k|        s5_8x16b =  _mm_and_si128(s4_8x16b, mask_low_32b);
 2739|   106k|        s6_8x16b =  _mm_and_si128(s9_8x16b, mask_high_96b);
 2740|   106k|        s9_8x16b = _mm_or_si128(s5_8x16b, s6_8x16b);
 2741|       |
 2742|       |        /* store 8 8-bit output values  */
 2743|       |        /* Store the output pixels of row 0*/
 2744|   106k|        _mm_storel_epi64((__m128i *)(pu1_dst), s9_8x16b);
 2745|       |
 2746|       |        /* ROW 2*/
 2747|   106k|        s20_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff0_1_8x16b);
 2748|   106k|        s21_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff2_3_8x16b);
 2749|   106k|        s22_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff4_5_8x16b);
 2750|       |
 2751|       |        /*load 4 pixel values */
 2752|   106k|        s2_8_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (5 * src_strd)));
 2753|       |
 2754|       |        /*load 4 pixel values */
 2755|   106k|        s2_9_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (6 * src_strd)));
 2756|       |
 2757|   106k|        s3_4_16x8b = _mm_unpacklo_epi16(s2_8_16x8b, s2_9_16x8b);
 2758|       |
 2759|   106k|        s23_8x16b = _mm_madd_epi16(s3_4_16x8b, coeff6_7_8x16b);
 2760|       |
 2761|   106k|        s24_8x16b = _mm_add_epi32(s20_8x16b, s21_8x16b);
 2762|   106k|        s25_8x16b = _mm_add_epi32(s22_8x16b, s23_8x16b);
 2763|   106k|        s26_8x16b = _mm_add_epi32(s24_8x16b, s25_8x16b);
 2764|       |
 2765|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2766|   106k|        s28_8x16b = _mm_srai_epi32(s26_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2767|       |
 2768|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2769|   106k|        s29_8x16b = _mm_add_epi32(s28_8x16b, offset_8x16b);
 2770|       |
 2771|       |        /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2772|   106k|        s28_8x16b = _mm_srai_epi32(s29_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2773|       |
 2774|   106k|        s28_8x16b = _mm_packs_epi32(s28_8x16b, zero_8x16b);
 2775|       |
 2776|       |
 2777|       |        /* i2_tmp = CLIP_U8(i2_tmp);*/
 2778|   106k|        s29_8x16b = _mm_packus_epi16(s28_8x16b, zero_8x16b);
 2779|       |
 2780|   106k|        s24_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (2 * dst_strd)));
 2781|   106k|        s25_8x16b =  _mm_and_si128(s24_8x16b, mask_low_32b);
 2782|   106k|        s26_8x16b =  _mm_and_si128(s29_8x16b, mask_high_96b);
 2783|   106k|        s29_8x16b = _mm_or_si128(s25_8x16b, s26_8x16b);
 2784|       |
 2785|       |        /* store 8 8-bit output values  */
 2786|       |        /* Store the output pixels of row 2*/
 2787|   106k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), s29_8x16b);
 2788|       |
 2789|       |
 2790|       |        /*ROW 1*/
 2791|   106k|        s4_0_16x8b = _mm_unpacklo_epi16(s2_1_16x8b, s2_2_16x8b);
 2792|       |
 2793|   106k|        s10_8x16b = _mm_madd_epi16(s4_0_16x8b, coeff0_1_8x16b);
 2794|       |
 2795|   106k|        s4_1_16x8b = _mm_unpacklo_epi16(s2_3_16x8b, s2_4_16x8b);
 2796|       |
 2797|   106k|        s11_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff2_3_8x16b);
 2798|       |
 2799|   106k|        s4_2_16x8b = _mm_unpacklo_epi16(s2_5_16x8b, s2_6_16x8b);
 2800|       |
 2801|   106k|        s12_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff4_5_8x16b);
 2802|       |
 2803|   106k|        s4_3_16x8b = _mm_unpacklo_epi16(s2_7_16x8b, s2_8_16x8b);
 2804|       |
 2805|   106k|        s13_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff6_7_8x16b);
 2806|       |
 2807|   106k|        s14_8x16b = _mm_add_epi32(s10_8x16b, s11_8x16b);
 2808|   106k|        s15_8x16b = _mm_add_epi32(s12_8x16b, s13_8x16b);
 2809|   106k|        s16_8x16b = _mm_add_epi32(s14_8x16b, s15_8x16b);
 2810|       |
 2811|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2812|   106k|        s18_8x16b = _mm_srai_epi32(s16_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2813|       |
 2814|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2815|   106k|        s19_8x16b = _mm_add_epi32(s18_8x16b, offset_8x16b);
 2816|       |
 2817|       |        /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2818|   106k|        s18_8x16b = _mm_srai_epi32(s19_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2819|       |
 2820|   106k|        s18_8x16b = _mm_packs_epi32(s18_8x16b, zero_8x16b);
 2821|       |
 2822|       |
 2823|       |        /* i2_tmp = CLIP_U8(i2_tmp);*/
 2824|   106k|        s19_8x16b = _mm_packus_epi16(s18_8x16b, zero_8x16b);
 2825|       |
 2826|   106k|        s14_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (dst_strd)));
 2827|   106k|        s15_8x16b =  _mm_and_si128(s14_8x16b, mask_low_32b);
 2828|   106k|        s16_8x16b =  _mm_and_si128(s19_8x16b, mask_high_96b);
 2829|   106k|        s19_8x16b = _mm_or_si128(s15_8x16b, s16_8x16b);
 2830|       |
 2831|       |        /* store 8 8-bit output values  */
 2832|       |        /* Store the output pixels of row 1*/
 2833|   106k|        _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd)), s19_8x16b);
 2834|       |
 2835|       |
 2836|       |        /* ROW 3*/
 2837|   106k|        s30_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff0_1_8x16b);
 2838|   106k|        s31_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff2_3_8x16b);
 2839|   106k|        s32_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff4_5_8x16b);
 2840|       |
 2841|       |        /*load 4 pixel values */
 2842|   106k|        s2_10_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (7 * src_strd)));
 2843|       |
 2844|   106k|        s4_4_16x8b = _mm_unpacklo_epi16(s2_9_16x8b, s2_10_16x8b);
 2845|       |
 2846|   106k|        s33_8x16b = _mm_madd_epi16(s4_4_16x8b, coeff6_7_8x16b);
 2847|       |
 2848|   106k|        s34_8x16b = _mm_add_epi32(s30_8x16b, s31_8x16b);
 2849|   106k|        s35_8x16b = _mm_add_epi32(s32_8x16b, s33_8x16b);
 2850|   106k|        s36_8x16b = _mm_add_epi32(s34_8x16b, s35_8x16b);
 2851|       |
 2852|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2853|   106k|        s38_8x16b = _mm_srai_epi32(s36_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2854|       |
 2855|       |
 2856|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2857|   106k|        s39_8x16b = _mm_add_epi32(s38_8x16b, offset_8x16b);
 2858|       |
 2859|       |        /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2860|   106k|        s38_8x16b = _mm_srai_epi32(s39_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   106k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   106k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2861|       |
 2862|   106k|        s38_8x16b = _mm_packs_epi32(s38_8x16b, zero_8x16b);
 2863|       |
 2864|       |
 2865|       |        /* i2_tmp = CLIP_U8(i2_tmp);*/
 2866|   106k|        s39_8x16b = _mm_packus_epi16(s38_8x16b, zero_8x16b);
 2867|       |
 2868|   106k|        s34_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (3 * dst_strd)));
 2869|   106k|        s35_8x16b =  _mm_and_si128(s34_8x16b, mask_low_32b);
 2870|   106k|        s36_8x16b =  _mm_and_si128(s39_8x16b, mask_high_96b);
 2871|   106k|        s39_8x16b = _mm_or_si128(s35_8x16b, s36_8x16b);
 2872|       |
 2873|       |        /* store 8 8-bit output values  */
 2874|       |        /* Store the output pixels of row 2*/
 2875|   106k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), s39_8x16b);
 2876|       |
 2877|   106k|        pi2_src += (8 * src_strd);
 2878|   106k|        pu1_dst += (4 * dst_strd);
 2879|       |
 2880|   270k|        for(row = 4; row < ht; row += 4)
  ------------------
  |  Branch (2880:22): [True: 164k, False: 106k]
  ------------------
 2881|   164k|        {
 2882|       |
 2883|   164k|            s3_0_16x8b = s3_2_16x8b;
 2884|   164k|            s3_1_16x8b = s3_3_16x8b;
 2885|   164k|            s3_2_16x8b = s3_4_16x8b;
 2886|       |
 2887|   164k|            s0_8x16b = _mm_madd_epi16(s3_0_16x8b, coeff0_1_8x16b);
 2888|   164k|            s1_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff2_3_8x16b);
 2889|   164k|            s2_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff4_5_8x16b);
 2890|       |
 2891|       |            /*load 4 pixel values from (cur_row + 4)th row*/
 2892|   164k|            s2_0_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src));
 2893|       |
 2894|   164k|            s3_3_16x8b = _mm_unpacklo_epi16(s2_10_16x8b, s2_0_16x8b);
 2895|   164k|            s3_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff6_7_8x16b);
 2896|       |
 2897|   164k|            s4_0_16x8b = s4_2_16x8b;
 2898|   164k|            s4_1_16x8b = s4_3_16x8b;
 2899|   164k|            s4_2_16x8b = s4_4_16x8b;
 2900|       |
 2901|   164k|            s4_8x16b = _mm_add_epi32(s0_8x16b, s1_8x16b);
 2902|   164k|            s5_8x16b = _mm_add_epi32(s2_8x16b, s3_8x16b);
 2903|   164k|            s6_8x16b = _mm_add_epi32(s4_8x16b, s5_8x16b);
 2904|       |
 2905|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2906|   164k|            s8_8x16b = _mm_srai_epi32(s6_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2907|       |
 2908|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2909|   164k|            s9_8x16b = _mm_add_epi32(s8_8x16b, offset_8x16b);
 2910|       |
 2911|       |            /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2912|   164k|            s8_8x16b = _mm_srai_epi32(s9_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2913|       |
 2914|   164k|            s8_8x16b = _mm_packs_epi32(s8_8x16b, zero_8x16b);
 2915|       |
 2916|       |
 2917|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 2918|   164k|            s9_8x16b = _mm_packus_epi16(s8_8x16b, zero_8x16b);
 2919|       |
 2920|   164k|            s4_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst));
 2921|   164k|            s5_8x16b =  _mm_and_si128(s4_8x16b, mask_low_32b);
 2922|   164k|            s6_8x16b =  _mm_and_si128(s9_8x16b, mask_high_96b);
 2923|   164k|            s9_8x16b = _mm_or_si128(s5_8x16b, s6_8x16b);
 2924|       |
 2925|       |            /* store 8 8-bit output values  */
 2926|       |            /* Store the output pixels of row 4*/
 2927|   164k|            _mm_storel_epi64((__m128i *)(pu1_dst), s9_8x16b);
 2928|       |
 2929|       |/* row + 2*/
 2930|   164k|            s20_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff0_1_8x16b);
 2931|   164k|            s21_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff2_3_8x16b);
 2932|   164k|            s22_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff4_5_8x16b);
 2933|       |
 2934|       |            /*load 4 pixel values from (cur_row + 5)th row*/
 2935|   164k|            s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + src_strd));
 2936|       |
 2937|       |            /*load 4 pixel values from (cur_row + 6)th row*/
 2938|   164k|            s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (2 * src_strd)));
 2939|       |
 2940|       |            /*unpacking (cur_row + 5)th row and (cur_row + 6)th row*/
 2941|   164k|            s3_4_16x8b = _mm_unpacklo_epi16(s2_1_16x8b, s2_2_16x8b);
 2942|       |
 2943|   164k|            s23_8x16b = _mm_madd_epi16(s3_4_16x8b, coeff6_7_8x16b);
 2944|       |
 2945|   164k|            s24_8x16b = _mm_add_epi32(s20_8x16b, s21_8x16b);
 2946|   164k|            s25_8x16b = _mm_add_epi32(s22_8x16b, s23_8x16b);
 2947|   164k|            s26_8x16b = _mm_add_epi32(s24_8x16b, s25_8x16b);
 2948|       |
 2949|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2950|   164k|            s28_8x16b = _mm_srai_epi32(s26_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2951|       |
 2952|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2953|   164k|            s29_8x16b = _mm_add_epi32(s28_8x16b, offset_8x16b);
 2954|       |
 2955|       |            /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2956|   164k|            s28_8x16b = _mm_srai_epi32(s29_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2957|       |
 2958|   164k|            s28_8x16b = _mm_packs_epi32(s28_8x16b, zero_8x16b);
 2959|       |
 2960|       |
 2961|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 2962|   164k|            s29_8x16b = _mm_packus_epi16(s28_8x16b, zero_8x16b);
 2963|       |
 2964|   164k|            s24_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (2 * dst_strd)));
 2965|   164k|            s25_8x16b =  _mm_and_si128(s24_8x16b, mask_low_32b);
 2966|   164k|            s26_8x16b =  _mm_and_si128(s29_8x16b, mask_high_96b);
 2967|   164k|            s29_8x16b = _mm_or_si128(s25_8x16b, s26_8x16b);
 2968|       |
 2969|       |            /* store 8 8-bit output values  */
 2970|       |            /* Store the output pixels of (cur_row+2)*/
 2971|   164k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), s29_8x16b);
 2972|       |
 2973|       |
 2974|       |/*row + 1*/
 2975|   164k|            s10_8x16b = _mm_madd_epi16(s4_0_16x8b, coeff0_1_8x16b);
 2976|   164k|            s11_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff2_3_8x16b);
 2977|   164k|            s12_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff4_5_8x16b);
 2978|       |
 2979|       |            /*unpacking (cur_row + 4)th row and (cur_row + 5)th row*/
 2980|   164k|            s4_3_16x8b = _mm_unpacklo_epi16(s2_0_16x8b, s2_1_16x8b);
 2981|   164k|            s13_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff6_7_8x16b);
 2982|       |
 2983|   164k|            s14_8x16b = _mm_add_epi32(s10_8x16b, s11_8x16b);
 2984|   164k|            s15_8x16b = _mm_add_epi32(s12_8x16b, s13_8x16b);
 2985|   164k|            s16_8x16b = _mm_add_epi32(s14_8x16b, s15_8x16b);
 2986|       |
 2987|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2988|   164k|            s18_8x16b = _mm_srai_epi32(s16_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2989|       |
 2990|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 2991|   164k|            s19_8x16b = _mm_add_epi32(s18_8x16b, offset_8x16b);
 2992|       |
 2993|       |            /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 2994|   164k|            s18_8x16b = _mm_srai_epi32(s19_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 2995|       |
 2996|   164k|            s18_8x16b = _mm_packs_epi32(s18_8x16b, zero_8x16b);
 2997|       |
 2998|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 2999|   164k|            s19_8x16b = _mm_packus_epi16(s18_8x16b, zero_8x16b);
 3000|       |
 3001|   164k|            s14_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
 3002|   164k|            s15_8x16b =  _mm_and_si128(s14_8x16b, mask_low_32b);
 3003|   164k|            s16_8x16b =  _mm_and_si128(s19_8x16b, mask_high_96b);
 3004|   164k|            s19_8x16b = _mm_or_si128(s15_8x16b, s16_8x16b);
 3005|       |
 3006|       |            /* store 8 8-bit output values  */
 3007|       |            /* Store the output pixels of (cur_row + 1)*/
 3008|   164k|            _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s19_8x16b);
 3009|       |
 3010|       |
 3011|       |/* row + 3*/
 3012|   164k|            s30_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff0_1_8x16b);
 3013|   164k|            s31_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff2_3_8x16b);
 3014|   164k|            s32_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff4_5_8x16b);
 3015|       |
 3016|       |            /*load 4 pixel values from (cur_row + 7)th row*/
 3017|   164k|            s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (3 * src_strd)));
 3018|       |
 3019|       |            /*unpacking (cur_row + 6)th row and (cur_row + 7)th row*/
 3020|   164k|            s4_4_16x8b = _mm_unpacklo_epi16(s2_2_16x8b, s2_3_16x8b);
 3021|       |
 3022|   164k|            s33_8x16b = _mm_madd_epi16(s4_4_16x8b, coeff6_7_8x16b);
 3023|       |
 3024|   164k|            s34_8x16b = _mm_add_epi32(s30_8x16b, s31_8x16b);
 3025|   164k|            s35_8x16b = _mm_add_epi32(s32_8x16b, s33_8x16b);
 3026|   164k|            s36_8x16b = _mm_add_epi32(s34_8x16b, s35_8x16b);
 3027|       |
 3028|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3029|   164k|            s38_8x16b = _mm_srai_epi32(s36_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3030|       |
 3031|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3032|   164k|            s39_8x16b = _mm_add_epi32(s38_8x16b, offset_8x16b);
 3033|       |
 3034|       |            /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3035|   164k|            s38_8x16b = _mm_srai_epi32(s39_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   164k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   164k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3036|       |
 3037|   164k|            s38_8x16b = _mm_packs_epi32(s38_8x16b, zero_8x16b);
 3038|       |
 3039|       |
 3040|       |            /* i2_tmp = CLIP_U8(i2_tmp);*/
 3041|   164k|            s39_8x16b = _mm_packus_epi16(s38_8x16b, zero_8x16b);
 3042|       |
 3043|   164k|            s34_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + (3 * dst_strd)));
 3044|   164k|            s35_8x16b =  _mm_and_si128(s34_8x16b, mask_low_32b);
 3045|   164k|            s36_8x16b =  _mm_and_si128(s39_8x16b, mask_high_96b);
 3046|   164k|            s39_8x16b = _mm_or_si128(s35_8x16b, s36_8x16b);
 3047|       |
 3048|       |            /* store 8 8-bit output values  */
 3049|       |            /* Store the output pixels of (cur_row+3)*/
 3050|   164k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), s39_8x16b);
 3051|       |
 3052|   164k|            s2_10_16x8b = s2_3_16x8b;
 3053|       |
 3054|   164k|            pi2_src += 4 * src_strd; /* pointer update */
 3055|   164k|            pu1_dst += 4 * dst_strd; /* pointer update */
 3056|   164k|        }
 3057|   106k|    }
 3058|       |
 3059|  52.6k|}
ihevc_inter_pred_luma_vert_w16inp_w16out_ssse3:
 3110|   148k|{
 3111|   148k|    WORD32 row, col;
 3112|   148k|    WORD16 *pi2_src_copy;
 3113|   148k|    WORD16 *pi2_dst_copy;
 3114|   148k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, coeff4_5_8x16b, coeff6_7_8x16b;
 3115|   148k|    __m128i s0_8x16b, s1_8x16b, s2_8x16b, s3_8x16b, s4_8x16b, s5_8x16b, s6_8x16b, s8_8x16b, s9_8x16b;
 3116|   148k|    __m128i s2_0_16x8b, s2_1_16x8b, s2_2_16x8b, s2_3_16x8b, s2_4_16x8b, s2_5_16x8b, s2_6_16x8b, s2_7_16x8b, s2_8_16x8b, s2_9_16x8b, s2_10_16x8b;
 3117|   148k|    __m128i s3_0_16x8b, s3_1_16x8b, s3_2_16x8b, s3_3_16x8b, s3_4_16x8b;
 3118|   148k|    __m128i s4_0_16x8b, s4_1_16x8b, s4_2_16x8b, s4_3_16x8b, s4_4_16x8b;
 3119|   148k|    __m128i s10_8x16b, s11_8x16b, s12_8x16b, s13_8x16b, s14_8x16b, s15_8x16b, s16_8x16b, s18_8x16b, s19_8x16b;
 3120|   148k|    __m128i s20_8x16b, s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b, s26_8x16b, s28_8x16b, s29_8x16b;
 3121|   148k|    __m128i s30_8x16b, s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b, s36_8x16b, s38_8x16b, s39_8x16b;
 3122|       |
 3123|   148k|    __m128i zero_8x16b, offset_8x16b, sign_reg;
 3124|       |
 3125|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 3126|   148k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 3127|       |
 3128|   148k|    zero_8x16b = _mm_setzero_si128();
 3129|   148k|    sign_reg =  _mm_cmpgt_epi8(zero_8x16b, s4_8x16b);
 3130|   148k|    s5_8x16b  = _mm_unpacklo_epi8(s4_8x16b, sign_reg);
 3131|       |
 3132|   148k|    coeff0_1_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(0, 0, 0, 0));  /* pi1_coeff[4] */
 3133|   148k|    coeff2_3_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(1, 1, 1, 1));  /* pi1_coeff[4] */
 3134|       |
 3135|   148k|    coeff4_5_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(2, 2, 2, 2));  /* pi1_coeff[4] */
 3136|   148k|    coeff6_7_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(3, 3, 3, 3));  /* pi1_coeff[4] */
 3137|       |
 3138|       |
 3139|       |/* seting values in register */
 3140|   148k|    offset_8x16b = _mm_set1_epi32(OFFSET14); /* for offset addition */
  ------------------
  |  |   43|   148k|#define OFFSET14 (1 << (14 - 1))
  ------------------
 3141|       |
 3142|   148k|    pi2_src_copy = pi2_src;
 3143|   148k|    pi2_dst_copy = pi2_dst;
 3144|       |
 3145|       |/*  outer for loop starts from here */
 3146|   466k|    for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (3146:18): [True: 318k, False: 148k]
  ------------------
 3147|   318k|    {
 3148|       |
 3149|   318k|        pi2_src = pi2_src_copy + col;
 3150|   318k|        pi2_dst = pi2_dst_copy + col;
 3151|       |
 3152|       |        /*load 4 pixel values*/
 3153|   318k|        s2_0_16x8b  = _mm_loadl_epi64((__m128i *)(pi2_src + (-3 * src_strd)));
 3154|       |
 3155|       |        /*load 4 pixel values*/
 3156|   318k|        s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (-2 * src_strd)));
 3157|       |
 3158|   318k|        s3_0_16x8b = _mm_unpacklo_epi16(s2_0_16x8b, s2_1_16x8b);
 3159|       |
 3160|   318k|        s0_8x16b = _mm_madd_epi16(s3_0_16x8b, coeff0_1_8x16b);
 3161|       |
 3162|       |        /*load 4 pixel values*/
 3163|   318k|        s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (-1 * src_strd)));
 3164|       |
 3165|       |        /*load 4 pixel values*/
 3166|   318k|        s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (0 * src_strd)));
 3167|       |
 3168|   318k|        s3_1_16x8b = _mm_unpacklo_epi16(s2_2_16x8b, s2_3_16x8b);
 3169|       |
 3170|   318k|        s1_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff2_3_8x16b);
 3171|       |
 3172|       |        /*load 4 pixel values*/
 3173|   318k|        s2_4_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (1 * src_strd)));
 3174|       |
 3175|       |        /*load 4 pixel values*/
 3176|   318k|        s2_5_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (2 * src_strd)));
 3177|       |
 3178|   318k|        s3_2_16x8b = _mm_unpacklo_epi16(s2_4_16x8b, s2_5_16x8b);
 3179|       |
 3180|   318k|        s2_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff4_5_8x16b);
 3181|       |
 3182|       |        /*load 4 pixel values*/
 3183|   318k|        s2_6_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (3 * src_strd)));
 3184|       |
 3185|       |        /*load 4 pixel values*/
 3186|   318k|        s2_7_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (4 * src_strd)));
 3187|       |
 3188|   318k|        s3_3_16x8b = _mm_unpacklo_epi16(s2_6_16x8b, s2_7_16x8b);
 3189|       |
 3190|   318k|        s3_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff6_7_8x16b);
 3191|       |
 3192|   318k|        s4_8x16b = _mm_add_epi32(s0_8x16b, s1_8x16b);
 3193|   318k|        s5_8x16b = _mm_add_epi32(s2_8x16b, s3_8x16b);
 3194|   318k|        s6_8x16b = _mm_add_epi32(s4_8x16b, s5_8x16b);
 3195|       |
 3196|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3197|   318k|        s8_8x16b = _mm_srai_epi32(s6_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   318k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   318k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3198|       |
 3199|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3200|   318k|        s9_8x16b = _mm_sub_epi32(s8_8x16b, offset_8x16b);
 3201|       |
 3202|   318k|        s8_8x16b = _mm_packs_epi32(s9_8x16b, zero_8x16b);
 3203|       |
 3204|       |        /* store 8 8-bit output values  */
 3205|       |        /* Store the output pixels of row 0*/
 3206|   318k|        _mm_storel_epi64((__m128i *)(pi2_dst), s8_8x16b);
 3207|       |
 3208|       |        /* ROW 2*/
 3209|   318k|        s20_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff0_1_8x16b);
 3210|   318k|        s21_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff2_3_8x16b);
 3211|   318k|        s22_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff4_5_8x16b);
 3212|       |
 3213|       |        /*load 4 pixel values*/
 3214|   318k|        s2_8_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (5 * src_strd)));
 3215|       |
 3216|       |        /*load 4 pixel values*/
 3217|   318k|        s2_9_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (6 * src_strd)));
 3218|       |
 3219|   318k|        s3_4_16x8b = _mm_unpacklo_epi16(s2_8_16x8b, s2_9_16x8b);
 3220|       |
 3221|   318k|        s23_8x16b = _mm_madd_epi16(s3_4_16x8b, coeff6_7_8x16b);
 3222|       |
 3223|   318k|        s24_8x16b = _mm_add_epi32(s20_8x16b, s21_8x16b);
 3224|   318k|        s25_8x16b = _mm_add_epi32(s22_8x16b, s23_8x16b);
 3225|   318k|        s26_8x16b = _mm_add_epi32(s24_8x16b, s25_8x16b);
 3226|       |
 3227|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3228|   318k|        s28_8x16b = _mm_srai_epi32(s26_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   318k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   318k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3229|       |
 3230|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3231|   318k|        s29_8x16b = _mm_sub_epi32(s28_8x16b, offset_8x16b);
 3232|       |
 3233|   318k|        s28_8x16b = _mm_packs_epi32(s29_8x16b, zero_8x16b);
 3234|       |
 3235|       |        /* store 8 8-bit output values  */
 3236|       |        /* Store the output pixels of row 2*/
 3237|   318k|        _mm_storel_epi64((__m128i *)(pi2_dst + (2 * dst_strd)), s28_8x16b);
 3238|       |
 3239|       |
 3240|       |        /*ROW 1*/
 3241|   318k|        s4_0_16x8b = _mm_unpacklo_epi16(s2_1_16x8b, s2_2_16x8b);
 3242|       |
 3243|   318k|        s10_8x16b = _mm_madd_epi16(s4_0_16x8b, coeff0_1_8x16b);
 3244|       |
 3245|   318k|        s4_1_16x8b = _mm_unpacklo_epi16(s2_3_16x8b, s2_4_16x8b);
 3246|       |
 3247|   318k|        s11_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff2_3_8x16b);
 3248|       |
 3249|   318k|        s4_2_16x8b = _mm_unpacklo_epi16(s2_5_16x8b, s2_6_16x8b);
 3250|       |
 3251|   318k|        s12_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff4_5_8x16b);
 3252|       |
 3253|   318k|        s4_3_16x8b = _mm_unpacklo_epi16(s2_7_16x8b, s2_8_16x8b);
 3254|       |
 3255|   318k|        s13_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff6_7_8x16b);
 3256|       |
 3257|   318k|        s14_8x16b = _mm_add_epi32(s10_8x16b, s11_8x16b);
 3258|   318k|        s15_8x16b = _mm_add_epi32(s12_8x16b, s13_8x16b);
 3259|   318k|        s16_8x16b = _mm_add_epi32(s14_8x16b, s15_8x16b);
 3260|       |
 3261|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3262|   318k|        s18_8x16b = _mm_srai_epi32(s16_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   318k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   318k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3263|       |
 3264|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3265|   318k|        s19_8x16b = _mm_sub_epi32(s18_8x16b, offset_8x16b);
 3266|       |
 3267|   318k|        s18_8x16b = _mm_packs_epi32(s19_8x16b, zero_8x16b);
 3268|       |
 3269|       |        /* store 8 8-bit output values  */
 3270|       |        /* Store the output pixels of row 1*/
 3271|   318k|        _mm_storel_epi64((__m128i *)(pi2_dst + (dst_strd)), s18_8x16b);
 3272|       |
 3273|       |
 3274|       |        /* ROW 3*/
 3275|   318k|        s30_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff0_1_8x16b);
 3276|   318k|        s31_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff2_3_8x16b);
 3277|   318k|        s32_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff4_5_8x16b);
 3278|       |
 3279|       |        /*load 4 pixel values*/
 3280|   318k|        s2_10_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (7 * src_strd)));
 3281|       |
 3282|   318k|        s4_4_16x8b = _mm_unpacklo_epi16(s2_9_16x8b, s2_10_16x8b);
 3283|       |
 3284|   318k|        s33_8x16b = _mm_madd_epi16(s4_4_16x8b, coeff6_7_8x16b);
 3285|       |
 3286|   318k|        s34_8x16b = _mm_add_epi32(s30_8x16b, s31_8x16b);
 3287|   318k|        s35_8x16b = _mm_add_epi32(s32_8x16b, s33_8x16b);
 3288|   318k|        s36_8x16b = _mm_add_epi32(s34_8x16b, s35_8x16b);
 3289|       |
 3290|       |        /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3291|   318k|        s38_8x16b = _mm_srai_epi32(s36_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   318k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   318k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3292|       |
 3293|       |
 3294|       |        /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3295|   318k|        s39_8x16b = _mm_sub_epi32(s38_8x16b, offset_8x16b);
 3296|       |
 3297|   318k|        s38_8x16b = _mm_packs_epi32(s39_8x16b, zero_8x16b);
 3298|       |
 3299|       |        /* store 8 8-bit output values  */
 3300|       |        /* Store the output pixels of row 2*/
 3301|   318k|        _mm_storel_epi64((__m128i *)(pi2_dst + (3 * dst_strd)), s38_8x16b);
 3302|       |
 3303|   318k|        pi2_src += (8 * src_strd);
 3304|   318k|        pi2_dst += (4 * dst_strd);
 3305|       |
 3306|   827k|        for(row = 4; row < ht; row += 4)
  ------------------
  |  Branch (3306:22): [True: 508k, False: 318k]
  ------------------
 3307|   508k|        {
 3308|       |
 3309|   508k|            s3_0_16x8b = s3_2_16x8b;
 3310|   508k|            s3_1_16x8b = s3_3_16x8b;
 3311|   508k|            s3_2_16x8b = s3_4_16x8b;
 3312|       |
 3313|   508k|            s0_8x16b = _mm_madd_epi16(s3_0_16x8b, coeff0_1_8x16b);
 3314|   508k|            s1_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff2_3_8x16b);
 3315|   508k|            s2_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff4_5_8x16b);
 3316|       |
 3317|       |            /*load 4 pixel values from (cur_row + 4)th row*/
 3318|   508k|            s2_0_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src));
 3319|       |
 3320|   508k|            s3_3_16x8b = _mm_unpacklo_epi16(s2_10_16x8b, s2_0_16x8b);
 3321|   508k|            s3_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff6_7_8x16b);
 3322|       |
 3323|   508k|            s4_0_16x8b = s4_2_16x8b;
 3324|   508k|            s4_1_16x8b = s4_3_16x8b;
 3325|   508k|            s4_2_16x8b = s4_4_16x8b;
 3326|       |
 3327|   508k|            s4_8x16b = _mm_add_epi32(s0_8x16b, s1_8x16b);
 3328|   508k|            s5_8x16b = _mm_add_epi32(s2_8x16b, s3_8x16b);
 3329|   508k|            s6_8x16b = _mm_add_epi32(s4_8x16b, s5_8x16b);
 3330|       |
 3331|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3332|   508k|            s8_8x16b = _mm_srai_epi32(s6_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   508k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   508k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3333|       |
 3334|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3335|   508k|            s9_8x16b = _mm_sub_epi32(s8_8x16b, offset_8x16b);
 3336|       |
 3337|   508k|            s8_8x16b = _mm_packs_epi32(s9_8x16b, zero_8x16b);
 3338|       |
 3339|       |            /* store 8 8-bit output values  */
 3340|       |            /* Store the output pixels of row 4*/
 3341|   508k|            _mm_storel_epi64((__m128i *)(pi2_dst), s8_8x16b);
 3342|       |
 3343|       |/* row + 2*/
 3344|   508k|            s20_8x16b = _mm_madd_epi16(s3_1_16x8b, coeff0_1_8x16b);
 3345|   508k|            s21_8x16b = _mm_madd_epi16(s3_2_16x8b, coeff2_3_8x16b);
 3346|   508k|            s22_8x16b = _mm_madd_epi16(s3_3_16x8b, coeff4_5_8x16b);
 3347|       |
 3348|       |            /*load 4 pixel values from (cur_row + 5)th row*/
 3349|   508k|            s2_1_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + src_strd));
 3350|       |
 3351|       |            /*load 4 pixel values from (cur_row + 6)th row*/
 3352|   508k|            s2_2_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (2 * src_strd)));
 3353|       |
 3354|       |            /*unpacking (cur_row + 5)th row and (cur_row + 6)th row*/
 3355|   508k|            s3_4_16x8b = _mm_unpacklo_epi16(s2_1_16x8b, s2_2_16x8b);
 3356|       |
 3357|   508k|            s23_8x16b = _mm_madd_epi16(s3_4_16x8b, coeff6_7_8x16b);
 3358|       |
 3359|   508k|            s24_8x16b = _mm_add_epi32(s20_8x16b, s21_8x16b);
 3360|   508k|            s25_8x16b = _mm_add_epi32(s22_8x16b, s23_8x16b);
 3361|   508k|            s26_8x16b = _mm_add_epi32(s24_8x16b, s25_8x16b);
 3362|       |
 3363|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3364|   508k|            s28_8x16b = _mm_srai_epi32(s26_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   508k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   508k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3365|       |
 3366|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3367|   508k|            s29_8x16b = _mm_sub_epi32(s28_8x16b, offset_8x16b);
 3368|       |
 3369|   508k|            s28_8x16b = _mm_packs_epi32(s29_8x16b, zero_8x16b);
 3370|       |
 3371|       |            /* store 8 8-bit output values  */
 3372|       |            /* Store the output pixels of (cur_row+2)*/
 3373|   508k|            _mm_storel_epi64((__m128i *)(pi2_dst + (2 * dst_strd)), s28_8x16b);
 3374|       |
 3375|       |
 3376|       |/*row + 1*/
 3377|   508k|            s10_8x16b = _mm_madd_epi16(s4_0_16x8b, coeff0_1_8x16b);
 3378|   508k|            s11_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff2_3_8x16b);
 3379|   508k|            s12_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff4_5_8x16b);
 3380|       |
 3381|       |            /*unpacking (cur_row + 4)th row and (cur_row + 5)th row*/
 3382|   508k|            s4_3_16x8b = _mm_unpacklo_epi16(s2_0_16x8b, s2_1_16x8b);
 3383|   508k|            s13_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff6_7_8x16b);
 3384|       |
 3385|   508k|            s14_8x16b = _mm_add_epi32(s10_8x16b, s11_8x16b);
 3386|   508k|            s15_8x16b = _mm_add_epi32(s12_8x16b, s13_8x16b);
 3387|   508k|            s16_8x16b = _mm_add_epi32(s14_8x16b, s15_8x16b);
 3388|       |
 3389|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3390|   508k|            s18_8x16b = _mm_srai_epi32(s16_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   508k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   508k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3391|       |
 3392|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3393|   508k|            s19_8x16b = _mm_sub_epi32(s18_8x16b, offset_8x16b);
 3394|       |
 3395|   508k|            s18_8x16b = _mm_packs_epi32(s19_8x16b, zero_8x16b);
 3396|       |
 3397|       |            /* store 8 8-bit output values  */
 3398|       |            /* Store the output pixels of (cur_row + 1)*/
 3399|   508k|            _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd), s18_8x16b);
 3400|       |
 3401|       |
 3402|       |/* row + 3*/
 3403|   508k|            s30_8x16b = _mm_madd_epi16(s4_1_16x8b, coeff0_1_8x16b);
 3404|   508k|            s31_8x16b = _mm_madd_epi16(s4_2_16x8b, coeff2_3_8x16b);
 3405|   508k|            s32_8x16b = _mm_madd_epi16(s4_3_16x8b, coeff4_5_8x16b);
 3406|       |
 3407|       |            /*load 4 pixel values from (cur_row + 7)th row*/
 3408|   508k|            s2_3_16x8b = _mm_loadl_epi64((__m128i *)(pi2_src + (3 * src_strd)));
 3409|       |
 3410|       |            /*unpacking (cur_row + 6)th row and (cur_row + 7)th row*/
 3411|   508k|            s4_4_16x8b = _mm_unpacklo_epi16(s2_2_16x8b, s2_3_16x8b);
 3412|       |
 3413|   508k|            s33_8x16b = _mm_madd_epi16(s4_4_16x8b, coeff6_7_8x16b);
 3414|       |
 3415|   508k|            s34_8x16b = _mm_add_epi32(s30_8x16b, s31_8x16b);
 3416|   508k|            s35_8x16b = _mm_add_epi32(s32_8x16b, s33_8x16b);
 3417|   508k|            s36_8x16b = _mm_add_epi32(s34_8x16b, s35_8x16b);
 3418|       |
 3419|       |            /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3420|   508k|            s38_8x16b = _mm_srai_epi32(s36_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   508k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   508k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3421|       |
 3422|       |            /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 3423|   508k|            s39_8x16b = _mm_sub_epi32(s38_8x16b, offset_8x16b);
 3424|       |
 3425|   508k|            s38_8x16b = _mm_packs_epi32(s39_8x16b, zero_8x16b);
 3426|       |
 3427|       |            /* store 8 8-bit output values  */
 3428|       |            /* Store the output pixels of (cur_row+3)*/
 3429|   508k|            _mm_storel_epi64((__m128i *)(pi2_dst + (3 * dst_strd)), s38_8x16b);
 3430|       |
 3431|   508k|            s2_10_16x8b = s2_3_16x8b;
 3432|       |
 3433|   508k|            pi2_src += 4 * src_strd; /* pointer update */
 3434|   508k|            pi2_dst += 4 * dst_strd; /* pointer update */
 3435|   508k|        }
 3436|   318k|    }
 3437|       |
 3438|   148k|}
ihevc_inter_pred_chroma_copy_ssse3:
 3486|  29.6k|{
 3487|  29.6k|    WORD32 row, col;
 3488|  29.6k|    __m128i  s3, mask_4x32b;
 3489|  29.6k|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  29.6k|#define UNUSED(x) ((void)(x))
  ------------------
 3490|  29.6k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  29.6k|#define ASSERT(x) assert((x))
  ------------------
 3491|  29.6k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  29.6k|#define ASSERT(x) assert((x))
  ------------------
 3492|       |
 3493|  29.6k|    mask_4x32b = _mm_set_epi32(0, 0, 0, 0x80808080); /* Mask register */
 3494|       |
 3495|       |/*  for loop starts from here */
 3496|  29.6k|    if(wd % 8 == 0)
  ------------------
  |  Branch (3496:8): [True: 4.41k, False: 25.2k]
  ------------------
 3497|  4.41k|    {
 3498|  31.9k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (3498:22): [True: 27.5k, False: 4.41k]
  ------------------
 3499|  27.5k|        {
 3500|  27.5k|            int offset = 0;
 3501|  87.5k|            for(col = 0; col < 2 * wd; col += 16)
  ------------------
  |  Branch (3501:26): [True: 60.0k, False: 27.5k]
  ------------------
 3502|  60.0k|            {
 3503|       |/* row =0 */
 3504|       |
 3505|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 3506|  60.0k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col]; */
 3507|       |                /* storing 16 8-bit output values */
 3508|  60.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + offset), s3); /* pu1_dst[col] = pu1_src[col]; */
 3509|       |
 3510|       |/* row =1 */
 3511|       |                /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 3512|  60.0k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset)); /* pu1_src[col]; */
 3513|       |                /* storing 8 8-bit output values */
 3514|  60.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + dst_strd + offset), s3); /* pu1_dst[col] = pu1_src[col]*/
 3515|       |
 3516|  60.0k|                offset += 16; /*To pointer update */
 3517|  60.0k|            } /*  inner for loop ends here(16-output values in single iteration) */
 3518|       |
 3519|  27.5k|            pu1_src += 2 * src_strd; /* pointer update */
 3520|  27.5k|            pu1_dst += 2 * dst_strd; /* pointer update */
 3521|  27.5k|        }
 3522|  4.41k|    }
 3523|  25.2k|    else if(wd % 4 == 0)
  ------------------
  |  Branch (3523:13): [True: 20.8k, False: 4.40k]
  ------------------
 3524|  20.8k|    {
 3525|  58.0k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (3525:22): [True: 37.2k, False: 20.8k]
  ------------------
 3526|  37.2k|        {
 3527|  37.2k|            int offset = 0;
 3528|  74.8k|            for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (3528:26): [True: 37.5k, False: 37.2k]
  ------------------
 3529|  37.5k|            {
 3530|       |/* row =0  */
 3531|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 3532|  37.5k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col]; */
 3533|       |                /* storing 8 8-bit output values */
 3534|  37.5k|                _mm_storel_epi64((__m128i *)(pu1_dst + offset), s3); /* pu1_dst[col] = pu1_src[col]; */
 3535|       |/* row =1 */
 3536|       |                /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 3537|  37.5k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset)); /* pu1_src[col]; */
 3538|       |                /* storing 8 8-bit output values */
 3539|  37.5k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + offset), s3); /* pu1_dst[col] = pu1_src[col]; */
 3540|       |
 3541|  37.5k|                offset += 8; /* To pointer update */
 3542|  37.5k|            } /* inner for loop ends here(8-output values in single iteration) */
 3543|       |
 3544|  37.2k|            pu1_src += 2 * src_strd;  /* pointer update */
 3545|  37.2k|            pu1_dst += 2 * dst_strd;  /* pointer update */
 3546|  37.2k|        }
 3547|  20.8k|    }
 3548|  4.40k|    else
 3549|  4.40k|    {
 3550|  14.0k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (3550:22): [True: 9.65k, False: 4.40k]
  ------------------
 3551|  9.65k|        {
 3552|  9.65k|            int offset = 0;
 3553|  19.7k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (3553:26): [True: 10.1k, False: 9.65k]
  ------------------
 3554|  10.1k|            {
 3555|       |/* row =0 */
 3556|  10.1k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col] */
 3557|       |                /* storing four 8-bit output values */
 3558|  10.1k|                _mm_maskmoveu_si128(s3, mask_4x32b, (char *)(pu1_dst + offset)); /* pu1_dst[col] = pu1_src[col]; */
 3559|       |/* row =1 */
 3560|       |                /* pu1_src[col] */
 3561|  10.1k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset));
 3562|       |
 3563|       |                /* storing four 8-bit output values */
 3564|  10.1k|                _mm_maskmoveu_si128(s3, mask_4x32b, (char *)(pu1_dst + dst_strd + offset)); /* pu1_dst[col] = pu1_src[col]; */
 3565|       |
 3566|  10.1k|                offset += 4; /* To pointer update */
 3567|  10.1k|            } /*  inner for loop ends here(4-output values in single iteration) */
 3568|       |
 3569|  9.65k|            pu1_src += 2 * src_strd; /* pointer increment */
 3570|  9.65k|            pu1_dst += 2 * dst_strd; /* pointer increment */
 3571|  9.65k|        }
 3572|  4.40k|    }
 3573|  29.6k|}
ihevc_inter_pred_chroma_horz_ssse3:
 3621|  15.4k|{
 3622|  15.4k|    WORD32 row, col;
 3623|       |
 3624|  15.4k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, control_mask_1_8x16b, control_mask_2_8x16b, offset_8x16b, mask_low_32b, mask_high_96b;
 3625|  15.4k|    __m128i src_temp1_16x8b, src_temp2_16x8b, src_temp3_16x8b, src_temp4_16x8b, src_temp5_16x8b, src_temp6_16x8b;
 3626|  15.4k|    __m128i src_temp11_16x8b, src_temp12_16x8b, src_temp13_16x8b, src_temp14_16x8b, src_temp15_16x8b, src_temp16_16x8b;
 3627|  15.4k|    __m128i res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b, res_temp4_8x16b, res_temp5_8x16b, res_temp6_8x16b, res_temp7_8x16b;
 3628|  15.4k|    __m128i res_temp11_8x16b, res_temp12_8x16b, res_temp13_8x16b, res_temp14_8x16b, res_temp15_8x16b, res_temp16_8x16b, res_temp17_8x16b;
 3629|       |
 3630|  15.4k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  15.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3631|  15.4k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  15.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3632|  15.4k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  15.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3633|  15.4k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  15.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3634|  15.4k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  15.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3635|  15.4k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  15.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3636|       |
 3637|  15.4k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  15.4k|#define ASSERT(x) assert((x))
  ------------------
 3638|       |
 3639|       |/* loading four 8-bit coefficients  */
 3640|  15.4k|    src_temp1_16x8b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 3641|       |
 3642|  15.4k|    offset_8x16b = _mm_set1_epi16(OFFSET_14_MINUS_BIT_DEPTH); /* for offset addition */
  ------------------
  |  |   42|  15.4k|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  15.4k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  15.4k|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3643|  15.4k|    mask_low_32b = _mm_cmpeq_epi16(offset_8x16b, offset_8x16b);
 3644|  15.4k|    mask_high_96b = _mm_srli_si128(mask_low_32b, 12);
 3645|  15.4k|    mask_low_32b = _mm_slli_si128(mask_low_32b, 4);
 3646|       |
 3647|  15.4k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
 3648|  15.4k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
 3649|       |
 3650|  15.4k|    coeff0_1_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_1_8x16b);  /* pi1_coeff[4] */
 3651|  15.4k|    coeff2_3_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_2_8x16b);  /* pi1_coeff[4] */
 3652|       |
 3653|       |/*  outer for loop starts from here */
 3654|  15.4k|    if(wd % 2 == 0 && wd % 4 != 0)
  ------------------
  |  Branch (3654:8): [True: 15.4k, False: 46]
  |  Branch (3654:23): [True: 2.46k, False: 12.9k]
  ------------------
 3655|  2.46k|    {
 3656|       |
 3657|  7.63k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (3657:22): [True: 5.17k, False: 2.46k]
  ------------------
 3658|  5.17k|        {
 3659|  5.17k|            int offset = 0;
 3660|       |
 3661|  5.17k|            PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  5.17k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3662|  5.17k|            PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  5.17k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3663|       |
 3664|       |
 3665|  10.8k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (3665:26): [True: 5.63k, False: 5.17k]
  ------------------
 3666|  5.63k|            {
 3667|       |
 3668|       |
 3669|       |                /*load 16 pixel values from row 0*/
 3670|  5.63k|                src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + offset)); /* pu1_src[col + (i-1) * 2]*/
 3671|       |
 3672|       |                /*load 16 pixel values from row 1*/
 3673|  5.63k|                src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + src_strd + offset)); /* pu1_src[col + (i-1) * 2]*/
 3674|       |
 3675|       |                /*Derive the source pixels for processing the 2nd pixel*/
 3676|  5.63k|                src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);
 3677|       |
 3678|  5.63k|                src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b);
 3679|       |
 3680|       |                /*Derive the source pixels for processing the 3rd pixel*/
 3681|  5.63k|                src_temp3_16x8b = _mm_srli_si128(src_temp1_16x8b, 4);
 3682|       |
 3683|       |                /*Derive the source pixels for processing the 4th pixel*/
 3684|  5.63k|                src_temp4_16x8b = _mm_srli_si128(src_temp1_16x8b, 6);
 3685|       |
 3686|  5.63k|                src_temp6_16x8b = _mm_unpacklo_epi8(src_temp3_16x8b, src_temp4_16x8b);
 3687|       |
 3688|       |                /*Derive the source pixels for processing the 2nd pixel*/
 3689|  5.63k|                src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);
 3690|       |
 3691|  5.63k|                src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b);
 3692|       |
 3693|       |                /*Derive the source pixels for processing the 3rd pixel*/
 3694|  5.63k|                src_temp13_16x8b = _mm_srli_si128(src_temp11_16x8b, 4);
 3695|       |                /*Derive the source pixels for processing the 4th pixel*/
 3696|  5.63k|                src_temp14_16x8b = _mm_srli_si128(src_temp11_16x8b, 6);
 3697|       |
 3698|  5.63k|                src_temp16_16x8b = _mm_unpacklo_epi8(src_temp13_16x8b, src_temp14_16x8b);
 3699|       |
 3700|  5.63k|                res_temp1_8x16b = _mm_unpacklo_epi64(src_temp5_16x8b, src_temp15_16x8b);
 3701|  5.63k|                res_temp2_8x16b = _mm_unpacklo_epi64(src_temp6_16x8b, src_temp16_16x8b);
 3702|  5.63k|                res_temp11_8x16b = _mm_maddubs_epi16(res_temp1_8x16b, coeff0_1_8x16b);
 3703|  5.63k|                res_temp12_8x16b = _mm_maddubs_epi16(res_temp2_8x16b, coeff2_3_8x16b);
 3704|       |
 3705|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 3706|  5.63k|                res_temp13_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 3707|       |
 3708|  5.63k|                res_temp14_8x16b = _mm_adds_epi16(res_temp13_8x16b, offset_8x16b);             /* row = 0 */
 3709|  5.63k|                res_temp15_8x16b = _mm_srai_epi16(res_temp14_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|  5.63k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  5.63k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3710|  5.63k|                res_temp13_8x16b = _mm_packus_epi16(res_temp15_8x16b, res_temp15_8x16b);       /* row = 0 */
 3711|       |
 3712|  5.63k|                res_temp3_8x16b = _mm_srli_si128(res_temp13_8x16b, 4);
 3713|       |
 3714|  5.63k|                res_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + offset));
 3715|  5.63k|                res_temp5_8x16b =  _mm_and_si128(res_temp4_8x16b, mask_low_32b);
 3716|  5.63k|                res_temp6_8x16b =  _mm_and_si128(res_temp13_8x16b, mask_high_96b);
 3717|  5.63k|                res_temp7_8x16b = _mm_or_si128(res_temp5_8x16b, res_temp6_8x16b);
 3718|       |
 3719|       |                /* store 4 16-bit values */
 3720|  5.63k|                _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp7_8x16b); /* pu1_dst[col] = i2_tmp_u  */
 3721|       |
 3722|  5.63k|                res_temp14_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd + offset));
 3723|  5.63k|                res_temp15_8x16b =  _mm_and_si128(res_temp14_8x16b, mask_low_32b);
 3724|  5.63k|                res_temp16_8x16b =  _mm_and_si128(res_temp3_8x16b, mask_high_96b);
 3725|  5.63k|                res_temp17_8x16b = _mm_or_si128(res_temp15_8x16b, res_temp16_8x16b);
 3726|       |
 3727|       |                /* store 4 16-bit values */
 3728|  5.63k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + offset), res_temp17_8x16b); /* pu1_dst[col] = i2_tmp_u  */
 3729|       |
 3730|       |
 3731|  5.63k|                offset += 4; /* To pointer update*/
 3732|       |
 3733|  5.63k|            } /* inner loop ends here(8- output values in single iteration)*/
 3734|       |
 3735|  5.17k|            pu1_src += 2 * src_strd; /*pointer update*/
 3736|  5.17k|            pu1_dst += 2 * dst_strd; /*pointer update*/
 3737|  5.17k|        }
 3738|  2.46k|    }
 3739|  12.9k|    else
 3740|  12.9k|    {
 3741|       |
 3742|  42.4k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (3742:22): [True: 29.4k, False: 12.9k]
  ------------------
 3743|  29.4k|        {
 3744|  29.4k|            int offset = 0;
 3745|       |
 3746|  29.4k|            PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  29.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3747|  29.4k|            PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  29.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3748|       |
 3749|       |
 3750|  90.0k|            for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (3750:26): [True: 60.5k, False: 29.4k]
  ------------------
 3751|  60.5k|            {
 3752|       |
 3753|       |                /*load 16 pixel values from row 0*/
 3754|  60.5k|                src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + offset)); /* pu1_src[col + (i-1) * 2]*/
 3755|       |
 3756|       |                /*load 16 pixel values from row 1*/
 3757|  60.5k|                src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + src_strd + offset)); /* pu1_src[col + (i-1) * 2]*/
 3758|       |
 3759|       |                /*Derive the source pixels for processing the 2nd pixel*/
 3760|  60.5k|                src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);
 3761|       |
 3762|  60.5k|                src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b);
 3763|       |
 3764|       |                /*Derive the source pixels for processing the 3rd pixel*/
 3765|  60.5k|                src_temp3_16x8b = _mm_srli_si128(src_temp1_16x8b, 4);
 3766|       |
 3767|       |                /*Derive the source pixels for processing the 4th pixel*/
 3768|  60.5k|                src_temp4_16x8b = _mm_srli_si128(src_temp1_16x8b, 6);
 3769|       |
 3770|  60.5k|                src_temp6_16x8b = _mm_unpacklo_epi8(src_temp3_16x8b, src_temp4_16x8b);
 3771|       |
 3772|  60.5k|                res_temp1_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff0_1_8x16b);
 3773|  60.5k|                res_temp2_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff2_3_8x16b);
 3774|       |
 3775|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 3776|  60.5k|                res_temp3_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 3777|       |
 3778|  60.5k|                res_temp4_8x16b = _mm_adds_epi16(res_temp3_8x16b, offset_8x16b);             /* row = 0 */
 3779|  60.5k|                res_temp5_8x16b = _mm_srai_epi16(res_temp4_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|  60.5k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  60.5k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3780|  60.5k|                res_temp6_8x16b = _mm_packus_epi16(res_temp5_8x16b, res_temp5_8x16b);        /* row = 0 */
 3781|       |
 3782|       |                /* store 4 16-bit values */
 3783|  60.5k|                _mm_storel_epi64((__m128i *)(pu1_dst + offset), res_temp6_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 3784|       |
 3785|       |                /*Derive the source pixels for processing the 2nd pixel of row 1*/
 3786|  60.5k|                src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);
 3787|       |
 3788|  60.5k|                src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b);
 3789|       |
 3790|       |                /*Derive the source pixels for processing the 3rd pixel of row 1*/
 3791|  60.5k|                src_temp13_16x8b = _mm_srli_si128(src_temp11_16x8b, 4);
 3792|       |
 3793|       |                /*Derive the source pixels for processing the 4th pixel of row 1*/
 3794|  60.5k|                src_temp14_16x8b = _mm_srli_si128(src_temp11_16x8b, 6);
 3795|       |
 3796|  60.5k|                src_temp16_16x8b = _mm_unpacklo_epi8(src_temp13_16x8b, src_temp14_16x8b);
 3797|       |
 3798|  60.5k|                res_temp11_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff0_1_8x16b);
 3799|  60.5k|                res_temp12_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff2_3_8x16b);
 3800|       |
 3801|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 3802|  60.5k|                res_temp13_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 3803|       |
 3804|  60.5k|                res_temp14_8x16b = _mm_adds_epi16(res_temp13_8x16b, offset_8x16b);             /* row = 0 */
 3805|  60.5k|                res_temp15_8x16b = _mm_srai_epi16(res_temp14_8x16b, SHIFT_14_MINUS_BIT_DEPTH); /* row = 0 */
  ------------------
  |  |   41|  60.5k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  60.5k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3806|  60.5k|                res_temp16_8x16b = _mm_packus_epi16(res_temp15_8x16b, res_temp15_8x16b);       /* row = 0 */
 3807|       |
 3808|       |                /* store 4 16-bit values */
 3809|  60.5k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd + offset), res_temp16_8x16b); /* pu1_dst[col] = i2_tmp_u  */
 3810|       |
 3811|       |
 3812|  60.5k|                offset += 8; /* To pointer update*/
 3813|       |
 3814|  60.5k|            } /* inner loop ends here(8- output values in single iteration)*/
 3815|       |
 3816|  29.4k|            pu1_src += 2 * src_strd; /*pointer update*/
 3817|  29.4k|            pu1_dst += 2 * dst_strd; /*pointer update*/
 3818|  29.4k|        }
 3819|  12.9k|    }
 3820|  15.4k|}
ihevc_inter_pred_chroma_vert_ssse3:
 3869|  10.7k|{
 3870|  10.7k|    WORD32 row, col;
 3871|  10.7k|    UWORD8 *pu1_src_copy;
 3872|  10.7k|    UWORD8 *pu1_dst_copy;
 3873|  10.7k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b;
 3874|  10.7k|    __m128i s4_8x16b, s5_8x16b, s6_8x16b, s7_8x16b, s8_8x16b, s9_8x16b;
 3875|  10.7k|    __m128i control_mask_1_8x16b, control_mask_2_8x16b;
 3876|  10.7k|    __m128i s11_8x16b, s12_8x16b, s15_8x16b, s16_8x16b;
 3877|  10.7k|    __m128i zero_8x16b, offset_8x16b, mask_low_32b, mask_high_96b;
 3878|  10.7k|    __m128i s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b;
 3879|  10.7k|    __m128i s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b;
 3880|       |
 3881|  10.7k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  10.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3882|  10.7k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  10.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3883|  10.7k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  10.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3884|  10.7k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  10.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3885|  10.7k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  10.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3886|  10.7k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  10.7k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3887|       |
 3888|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 3889|  10.7k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 3890|       |
 3891|  10.7k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
 3892|  10.7k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
 3893|       |
 3894|  10.7k|    coeff0_1_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_1_8x16b);  /* pi1_coeff[4] */
 3895|  10.7k|    coeff2_3_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_2_8x16b);  /* pi1_coeff[4] */
 3896|       |
 3897|       |
 3898|       |/*  seting  values in register */
 3899|  10.7k|    zero_8x16b = _mm_setzero_si128(); /* for saturated clipping */
 3900|  10.7k|    offset_8x16b = _mm_set1_epi16(OFFSET_14_MINUS_BIT_DEPTH); /* for offset addition */
  ------------------
  |  |   42|  10.7k|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  10.7k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  10.7k|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3901|  10.7k|    mask_low_32b = _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000);
 3902|  10.7k|    mask_high_96b = _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF);
 3903|       |
 3904|       |/*  outer for loop starts from here */
 3905|  10.7k|    if(wd % 8 == 0)
  ------------------
  |  Branch (3905:8): [True: 1.26k, False: 9.45k]
  ------------------
 3906|  1.26k|    { /* wd = multiple of 8 case */
 3907|       |
 3908|  1.26k|        pu1_src_copy = pu1_src;
 3909|  1.26k|        pu1_dst_copy = pu1_dst;
 3910|       |
 3911|  3.12k|        for(col = 0; col < 2 * wd; col += 16)
  ------------------
  |  Branch (3911:22): [True: 1.85k, False: 1.26k]
  ------------------
 3912|  1.85k|        {
 3913|       |
 3914|  1.85k|            pu1_src = pu1_src_copy + col;
 3915|  1.85k|            pu1_dst = pu1_dst_copy + col;
 3916|       |
 3917|       |
 3918|  15.9k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (3918:26): [True: 14.1k, False: 1.85k]
  ------------------
 3919|  14.1k|            {
 3920|       |
 3921|  14.1k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  14.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3922|  14.1k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  14.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 3923|       |
 3924|       |
 3925|       |                /*load 8 pixel values from -751:-768 pos. relative to cur. pos.*/
 3926|  14.1k|                s21_8x16b  = _mm_loadu_si128((__m128i *)(pu1_src + (-1 * src_strd)));
 3927|       |
 3928|       |                /*load 8 pixel values from -495:-512 pos. relative to cur. pos.*/
 3929|  14.1k|                s22_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (0 * src_strd)));
 3930|       |
 3931|       |
 3932|       |                /*load 8 pixel values from -239:-256 pos. relative to cur. pos.*/
 3933|  14.1k|                s23_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (1 * src_strd)));
 3934|       |
 3935|       |                /*load 8 pixel values from 15:0 pos. relative to cur. pos.*/
 3936|  14.1k|                s24_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (2 * src_strd)));
 3937|       |
 3938|  14.1k|                s5_8x16b = _mm_unpacklo_epi8(s21_8x16b, s22_8x16b);
 3939|       |
 3940|  14.1k|                s31_8x16b = _mm_unpackhi_epi8(s21_8x16b, s22_8x16b);
 3941|       |
 3942|  14.1k|                s6_8x16b = _mm_unpacklo_epi8(s23_8x16b, s24_8x16b);
 3943|       |
 3944|  14.1k|                s33_8x16b = _mm_unpackhi_epi8(s23_8x16b, s24_8x16b);
 3945|       |
 3946|  14.1k|                s11_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 3947|       |
 3948|  14.1k|                s32_8x16b = _mm_maddubs_epi16(s31_8x16b, coeff0_1_8x16b);
 3949|       |
 3950|  14.1k|                s12_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 3951|       |
 3952|  14.1k|                s34_8x16b = _mm_maddubs_epi16(s33_8x16b, coeff2_3_8x16b);
 3953|       |
 3954|  14.1k|                s8_8x16b = _mm_add_epi16(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 3955|       |
 3956|  14.1k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s34_8x16b);
 3957|       |
 3958|  14.1k|                s5_8x16b = _mm_add_epi16(s8_8x16b, offset_8x16b);
 3959|       |
 3960|  14.1k|                s31_8x16b = _mm_add_epi16(s35_8x16b, offset_8x16b);
 3961|       |
 3962|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 3963|  14.1k|                s6_8x16b = _mm_srai_epi16(s5_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.1k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.1k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3964|       |
 3965|  14.1k|                s32_8x16b = _mm_srai_epi16(s31_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.1k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.1k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 3966|       |
 3967|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 3968|  14.1k|                s7_8x16b = _mm_packus_epi16(s6_8x16b, zero_8x16b);
 3969|       |
 3970|  14.1k|                s33_8x16b =  _mm_packus_epi16(s32_8x16b, zero_8x16b);
 3971|       |
 3972|  14.1k|                s7_8x16b = _mm_unpacklo_epi64(s7_8x16b, s33_8x16b);
 3973|       |/* store 8 8-bit output values  */
 3974|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 3975|  14.1k|                _mm_storeu_si128((__m128i *)(pu1_dst), s7_8x16b);
 3976|       |
 3977|       |
 3978|  14.1k|                s25_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (3 * src_strd)));
 3979|       |
 3980|  14.1k|                s5_8x16b = _mm_unpacklo_epi8(s22_8x16b, s23_8x16b);
 3981|       |
 3982|  14.1k|                s31_8x16b = _mm_unpackhi_epi8(s22_8x16b, s23_8x16b);
 3983|       |
 3984|  14.1k|                s15_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 3985|       |
 3986|  14.1k|                s32_8x16b = _mm_maddubs_epi16(s31_8x16b, coeff0_1_8x16b);
 3987|       |
 3988|  14.1k|                s6_8x16b = _mm_unpacklo_epi8(s24_8x16b, s25_8x16b);
 3989|       |
 3990|  14.1k|                s33_8x16b = _mm_unpackhi_epi8(s24_8x16b, s25_8x16b);
 3991|       |
 3992|  14.1k|                s16_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 3993|       |
 3994|  14.1k|                s34_8x16b = _mm_maddubs_epi16(s33_8x16b, coeff2_3_8x16b);
 3995|       |
 3996|  14.1k|                s8_8x16b = _mm_add_epi16(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 3997|       |
 3998|  14.1k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s34_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 3999|       |
 4000|  14.1k|                s5_8x16b = _mm_add_epi16(s8_8x16b, offset_8x16b);
 4001|       |
 4002|  14.1k|                s31_8x16b = _mm_add_epi16(s35_8x16b, offset_8x16b);
 4003|       |
 4004|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 4005|  14.1k|                s6_8x16b = _mm_srai_epi16(s5_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.1k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.1k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4006|       |
 4007|  14.1k|                s32_8x16b = _mm_srai_epi16(s31_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.1k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.1k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4008|       |
 4009|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 4010|  14.1k|                s7_8x16b = _mm_packus_epi16(s6_8x16b, zero_8x16b);
 4011|       |
 4012|  14.1k|                s33_8x16b =  _mm_packus_epi16(s32_8x16b, zero_8x16b);
 4013|       |
 4014|  14.1k|                s7_8x16b = _mm_unpacklo_epi64(s7_8x16b, s33_8x16b);
 4015|       |/* store 8 8-bit output values  */
 4016|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 4017|  14.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + dst_strd), s7_8x16b);
 4018|       |
 4019|  14.1k|                pu1_src += 2 * src_strd;
 4020|  14.1k|                pu1_dst += 2 * dst_strd;
 4021|       |
 4022|       |
 4023|  14.1k|            } /* inner for loop ends here(8-output values in single iteration) */
 4024|       |
 4025|  1.85k|        }
 4026|  1.26k|    }
 4027|  9.45k|    else if(wd % 4 == 0)
  ------------------
  |  Branch (4027:13): [True: 6.98k, False: 2.46k]
  ------------------
 4028|  6.98k|    { /* wd = multiple of 8 case */
 4029|       |
 4030|  18.8k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (4030:22): [True: 11.8k, False: 6.98k]
  ------------------
 4031|  11.8k|        {
 4032|  11.8k|            pu1_src_copy = pu1_src;
 4033|  11.8k|            pu1_dst_copy = pu1_dst;
 4034|  23.7k|            for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (4034:26): [True: 11.9k, False: 11.8k]
  ------------------
 4035|  11.9k|            {
 4036|       |
 4037|  11.9k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4038|  11.9k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  11.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4039|       |
 4040|       |
 4041|       |                /*load 8 pixel values from -751:-768 pos. relative to cur. pos.*/
 4042|  11.9k|                s21_8x16b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 4043|       |
 4044|       |                /*load 8 pixel values from -495:-512 pos. relative to cur. pos.*/
 4045|  11.9k|                s22_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 4046|       |
 4047|  11.9k|                s5_8x16b = _mm_unpacklo_epi8(s21_8x16b, s22_8x16b);
 4048|       |
 4049|  11.9k|                s11_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4050|       |
 4051|       |                /*load 8 pixel values from -239:-256 pos. relative to cur. pos.*/
 4052|  11.9k|                s23_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 4053|       |
 4054|       |                /*load 8 pixel values from 15:0 pos. relative to cur. pos.*/
 4055|  11.9k|                s24_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 4056|       |
 4057|  11.9k|                s6_8x16b = _mm_unpacklo_epi8(s23_8x16b, s24_8x16b);
 4058|       |
 4059|  11.9k|                s12_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4060|       |
 4061|  11.9k|                s8_8x16b = _mm_add_epi16(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4062|       |
 4063|  11.9k|                s5_8x16b = _mm_add_epi16(s8_8x16b, offset_8x16b);
 4064|       |
 4065|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 4066|  11.9k|                s6_8x16b = _mm_srai_epi16(s5_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  11.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  11.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4067|       |
 4068|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 4069|  11.9k|                s7_8x16b = _mm_packus_epi16(s6_8x16b, zero_8x16b);
 4070|       |
 4071|       |/* store 8 8-bit output values  */
 4072|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 4073|  11.9k|                _mm_storel_epi64((__m128i *)(pu1_dst), s7_8x16b);
 4074|       |
 4075|  11.9k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 4076|       |
 4077|  11.9k|                s5_8x16b = _mm_unpacklo_epi8(s22_8x16b, s23_8x16b);
 4078|  11.9k|                s15_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4079|       |
 4080|  11.9k|                s6_8x16b = _mm_unpacklo_epi8(s24_8x16b, s25_8x16b);
 4081|  11.9k|                s16_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4082|       |
 4083|  11.9k|                s8_8x16b = _mm_add_epi16(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4084|       |
 4085|  11.9k|                s5_8x16b = _mm_add_epi16(s8_8x16b, offset_8x16b);
 4086|       |
 4087|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 4088|  11.9k|                s6_8x16b = _mm_srai_epi16(s5_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  11.9k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  11.9k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4089|       |
 4090|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 4091|  11.9k|                s7_8x16b = _mm_packus_epi16(s6_8x16b, zero_8x16b);
 4092|       |
 4093|       |/* store 8 8-bit output values  */
 4094|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 4095|  11.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s7_8x16b);
 4096|       |
 4097|  11.9k|                pu1_src += 8;    /* To pointer update */
 4098|  11.9k|                pu1_dst += 8;
 4099|       |
 4100|  11.9k|            } /* inner for loop ends here(8-output values in single iteration) */
 4101|       |
 4102|  11.8k|            pu1_src = pu1_src_copy + 2 * src_strd; /* pointer update */
 4103|  11.8k|            pu1_dst = pu1_dst_copy + 2 * dst_strd; /* pointer update */
 4104|  11.8k|        }
 4105|  6.98k|    }
 4106|       |
 4107|  2.46k|    else
 4108|  2.46k|    { /* wd = multiple of 4 case */
 4109|       |
 4110|  7.64k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (4110:22): [True: 5.18k, False: 2.46k]
  ------------------
 4111|  5.18k|        {
 4112|  5.18k|            pu1_src_copy = pu1_src;
 4113|  5.18k|            pu1_dst_copy = pu1_dst;
 4114|  10.7k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (4114:26): [True: 5.54k, False: 5.18k]
  ------------------
 4115|  5.54k|            {
 4116|       |
 4117|  5.54k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  5.54k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4118|  5.54k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  5.54k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4119|       |
 4120|       |
 4121|       |                /*load 8 pixel values from -751:-768 pos. relative to cur. pos.*/
 4122|  5.54k|                s21_8x16b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 4123|       |
 4124|       |                /*load 8 pixel values from -495:-512 pos. relative to cur. pos.*/
 4125|  5.54k|                s22_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 4126|       |
 4127|  5.54k|                s5_8x16b = _mm_unpacklo_epi8(s21_8x16b, s22_8x16b);
 4128|       |
 4129|  5.54k|                s11_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4130|       |
 4131|       |                /*load 8 pixel values from -239:-256 pos. relative to cur. pos.*/
 4132|  5.54k|                s23_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 4133|       |
 4134|       |                /*load 8 pixel values from 15:0 pos. relative to cur. pos.*/
 4135|  5.54k|                s24_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 4136|       |
 4137|  5.54k|                s6_8x16b = _mm_unpacklo_epi8(s23_8x16b, s24_8x16b);
 4138|       |
 4139|  5.54k|                s12_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4140|       |
 4141|  5.54k|                s8_8x16b = _mm_add_epi16(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4142|       |
 4143|  5.54k|                s5_8x16b = _mm_add_epi16(s8_8x16b, offset_8x16b);
 4144|       |
 4145|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 4146|  5.54k|                s6_8x16b = _mm_srai_epi16(s5_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  5.54k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  5.54k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4147|       |
 4148|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 4149|  5.54k|                s7_8x16b = _mm_packus_epi16(s6_8x16b, zero_8x16b);
 4150|       |
 4151|  5.54k|                s9_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst));
 4152|  5.54k|                s5_8x16b =  _mm_and_si128(s9_8x16b, mask_low_32b);
 4153|  5.54k|                s6_8x16b =  _mm_and_si128(s7_8x16b, mask_high_96b);
 4154|  5.54k|                s9_8x16b = _mm_or_si128(s5_8x16b, s6_8x16b);
 4155|       |
 4156|       |/* store 8 8-bit output values  */
 4157|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 4158|  5.54k|                _mm_storel_epi64((__m128i *)(pu1_dst), s9_8x16b);
 4159|       |
 4160|  5.54k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 4161|       |
 4162|  5.54k|                s5_8x16b = _mm_unpacklo_epi8(s22_8x16b, s23_8x16b);
 4163|  5.54k|                s15_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4164|       |
 4165|  5.54k|                s6_8x16b = _mm_unpacklo_epi8(s24_8x16b, s25_8x16b);
 4166|  5.54k|                s16_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4167|       |
 4168|  5.54k|                s8_8x16b = _mm_add_epi16(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4169|       |
 4170|  5.54k|                s5_8x16b = _mm_add_epi16(s8_8x16b, offset_8x16b);
 4171|       |
 4172|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 4173|  5.54k|                s6_8x16b = _mm_srai_epi16(s5_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  5.54k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  5.54k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4174|       |
 4175|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 4176|  5.54k|                s7_8x16b = _mm_packus_epi16(s6_8x16b, zero_8x16b);
 4177|       |
 4178|  5.54k|                s9_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
 4179|  5.54k|                s5_8x16b =  _mm_and_si128(s9_8x16b, mask_low_32b);
 4180|  5.54k|                s6_8x16b =  _mm_and_si128(s7_8x16b, mask_high_96b);
 4181|  5.54k|                s9_8x16b = _mm_or_si128(s5_8x16b, s6_8x16b);
 4182|       |
 4183|       |/* store 8 8-bit output values  */
 4184|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 4185|  5.54k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s9_8x16b);
 4186|       |
 4187|  5.54k|                pu1_src += 4;   /* To pointer update */
 4188|  5.54k|                pu1_dst += 4;
 4189|  5.54k|            } /* inner for loop ends here(8-output values in single iteration) */
 4190|       |
 4191|  5.18k|            pu1_src = pu1_src_copy + 2 * src_strd; /* pointer update */
 4192|  5.18k|            pu1_dst = pu1_dst_copy + 2 * dst_strd; /* pointer update */
 4193|  5.18k|        }
 4194|  2.46k|    }
 4195|  10.7k|}
ihevc_inter_pred_chroma_copy_w16out_ssse3:
 4244|  2.87M|{
 4245|  2.87M|    WORD32 row, col;
 4246|  2.87M|    __m128i  s3, zero_8x16b;
 4247|       |
 4248|  2.87M|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  2.87M|#define ASSERT(x) assert((x))
  ------------------
 4249|  2.87M|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  2.87M|#define ASSERT(x) assert((x))
  ------------------
 4250|       |
 4251|  2.87M|    UNUSED(pi1_coeff);
  ------------------
  |  |   38|  2.87M|#define UNUSED(x) ((void)(x))
  ------------------
 4252|  2.87M|    zero_8x16b = _mm_setzero_si128();
 4253|       |/*  outer for loop starts from here */
 4254|  2.87M|    if(wd == 2) /* for wd =2 */
  ------------------
  |  Branch (4254:8): [True: 388, False: 2.87M]
  ------------------
 4255|    388|    {
 4256|  1.81k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (4256:22): [True: 1.42k, False: 388]
  ------------------
 4257|  1.42k|        {
 4258|  1.42k|            int offset = 0;
 4259|  2.84k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (4259:26): [True: 1.42k, False: 1.42k]
  ------------------
 4260|  1.42k|            {
 4261|       |/* row =0 */
 4262|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 4263|  1.42k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col] */
 4264|  1.42k|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4265|       |
 4266|  1.42k|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
  ------------------
  |  |   41|  1.42k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.42k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4267|       |
 4268|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
 4269|  1.42k|                _mm_storel_epi64((__m128i *)(pi2_dst + offset), s3);
 4270|       |
 4271|       |/* row =1 */
 4272|       |                /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 4273|  1.42k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset));
 4274|  1.42k|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4275|       |
 4276|  1.42k|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
  ------------------
  |  |   41|  1.42k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.42k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4277|       |
 4278|  1.42k|                _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd + offset), s3);
 4279|  1.42k|                offset += 4; /* To pointer update */
 4280|  1.42k|            } /* inner for loop ends here */
 4281|       |
 4282|  1.42k|            pu1_src += 2 * src_strd; /* pointer update */
 4283|  1.42k|            pi2_dst += 2 * dst_strd; /* pointer update */
 4284|  1.42k|        }
 4285|    388|    }
 4286|  2.87M|    else if(wd % 2 == 0 && wd % 4 != 0)
  ------------------
  |  Branch (4286:13): [True: 2.87M, False: 57]
  |  Branch (4286:28): [True: 301, False: 2.87M]
  ------------------
 4287|    301|    {
 4288|  1.50k|        for(row = 0; row < ht / 2; row++)
  ------------------
  |  Branch (4288:22): [True: 1.20k, False: 301]
  ------------------
 4289|  1.20k|        {
 4290|  1.20k|            int offset = 0;
 4291|  1.20k|            int count = (2 * wd) / 8;
 4292|  2.40k|            for(col = 0; col < count; col++)
  ------------------
  |  Branch (4292:26): [True: 1.20k, False: 1.20k]
  ------------------
 4293|  1.20k|            {
 4294|       |/* row =0 */
 4295|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 4296|  1.20k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col]*/
 4297|  1.20k|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4298|       |
 4299|       |                /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
 4300|  1.20k|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  1.20k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.20k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4301|       |
 4302|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH); */
 4303|  1.20k|                _mm_storeu_si128((__m128i *)(pi2_dst + offset), s3);
 4304|       |
 4305|       |                /*row=1*/       /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 4306|  1.20k|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset));
 4307|  1.20k|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4308|       |
 4309|  1.20k|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
  ------------------
  |  |   41|  1.20k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.20k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4310|  1.20k|                _mm_storeu_si128((__m128i *)(pi2_dst + dst_strd + offset), s3);
 4311|       |
 4312|  1.20k|                offset += 8; /* To pointer update*/
 4313|  1.20k|            } /*  inner for loop ends here(8-output values in single iteration) */
 4314|       |
 4315|       |/* finding last four values */
 4316|  1.20k|            s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col] */
 4317|  1.20k|            s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4318|       |
 4319|  1.20k|            s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
  ------------------
  |  |   41|  1.20k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.20k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4320|       |
 4321|       |            /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
 4322|  1.20k|            _mm_storel_epi64((__m128i *)(pi2_dst + offset), s3);
 4323|       |
 4324|       |            /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 4325|  1.20k|            s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset));
 4326|  1.20k|            s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4327|       |
 4328|  1.20k|            s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
  ------------------
  |  |   41|  1.20k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  1.20k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4329|  1.20k|            _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd + offset), s3);
 4330|       |
 4331|  1.20k|            pu1_src += 2 * src_strd; /* pointer update */
 4332|  1.20k|            pi2_dst += 2 * dst_strd;
 4333|  1.20k|        }
 4334|    301|    }
 4335|  2.87M|    else
 4336|  2.87M|    {
 4337|  8.69M|        for(row = 0; row < ht / 2; row++)
  ------------------
  |  Branch (4337:22): [True: 5.81M, False: 2.87M]
  ------------------
 4338|  5.81M|        {
 4339|  5.81M|            int offset = 0;
 4340|  11.9M|            for(col = 0; col < 2 * wd / 8; col++)
  ------------------
  |  Branch (4340:26): [True: 6.09M, False: 5.81M]
  ------------------
 4341|  6.09M|            {
 4342|       |/* row =0 */
 4343|       |                /*load 16 pixel values from 15:0 pos. relative to cur. pos.*/
 4344|  6.09M|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + offset)); /* pu1_src[col]*/
 4345|  6.09M|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4346|       |
 4347|       |                /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
 4348|  6.09M|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  6.09M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  6.09M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4349|       |
 4350|       |                /* pi2_dst[col] = (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH); */
 4351|  6.09M|                _mm_storeu_si128((__m128i *)(pi2_dst + offset), s3);
 4352|       |
 4353|       |                /*row=1*/       /*load 16 pixel values from 271:256 pos. relative to cur. pos.*/
 4354|  6.09M|                s3 = _mm_loadu_si128((__m128i *)(pu1_src + src_strd + offset));
 4355|  6.09M|                s3 = _mm_unpacklo_epi8(s3, zero_8x16b);
 4356|       |
 4357|  6.09M|                s3 = _mm_slli_epi16(s3,  SHIFT_14_MINUS_BIT_DEPTH); /* (pu1_src[col] << SHIFT_14_MINUS_BIT_DEPTH) */
  ------------------
  |  |   41|  6.09M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  6.09M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 4358|  6.09M|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd + offset), s3);
 4359|       |
 4360|  6.09M|                offset += 8; /* To pointer update*/
 4361|  6.09M|            } /*  inner for loop ends here(8-output values in single iteration) */
 4362|       |
 4363|  5.81M|            pu1_src += 2 * src_strd; /* pointer update */
 4364|  5.81M|            pi2_dst += 2 * dst_strd;
 4365|  5.81M|        }
 4366|  2.87M|    }
 4367|  2.87M|}
ihevc_inter_pred_chroma_horz_w16out_ssse3:
 4416|   335k|{
 4417|   335k|    WORD32 row, col;
 4418|       |
 4419|   335k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b, control_mask_1_8x16b, control_mask_2_8x16b, all_zero;
 4420|   335k|    __m128i src_temp1_16x8b, src_temp2_16x8b, src_temp3_16x8b, src_temp4_16x8b, src_temp5_16x8b, src_temp6_16x8b;
 4421|   335k|    __m128i src_temp11_16x8b, src_temp12_16x8b, src_temp13_16x8b, src_temp14_16x8b, src_temp15_16x8b, src_temp16_16x8b;
 4422|   335k|    __m128i res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b;
 4423|   335k|    __m128i res_temp11_8x16b, res_temp12_8x16b, res_temp13_8x16b;
 4424|       |
 4425|   335k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   335k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4426|   335k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   335k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4427|   335k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   335k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4428|   335k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   335k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4429|   335k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   335k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4430|   335k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   335k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4431|       |
 4432|   335k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   335k|#define ASSERT(x) assert((x))
  ------------------
 4433|       |
 4434|       |/* loading four 8-bit coefficients and convert 8-bit into 16-bit */
 4435|   335k|    src_temp1_16x8b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 4436|       |
 4437|   335k|    all_zero = _mm_setzero_si128();
 4438|       |
 4439|   335k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
 4440|   335k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
 4441|       |
 4442|   335k|    coeff0_1_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_1_8x16b);  /* pi1_coeff[4] */
 4443|   335k|    coeff2_3_8x16b = _mm_shuffle_epi8(src_temp1_16x8b, control_mask_2_8x16b);  /* pi1_coeff[4] */
 4444|       |
 4445|       |/*  outer for loop starts from here */
 4446|   335k|    if(wd % 2 == 0 && wd % 4 != 0)
  ------------------
  |  Branch (4446:8): [True: 335k, False: 46]
  |  Branch (4446:23): [True: 7.48k, False: 328k]
  ------------------
 4447|  7.48k|    {
 4448|  7.48k|        int offset = 0;
 4449|  31.6k|        for(row = ht; row >= 2; row -= 2)
  ------------------
  |  Branch (4449:23): [True: 24.1k, False: 7.48k]
  ------------------
 4450|  24.1k|        {
 4451|  24.1k|            offset = 0;
 4452|  24.1k|            PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  24.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4453|  24.1k|            PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  24.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4454|       |
 4455|       |
 4456|  53.7k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (4456:26): [True: 29.5k, False: 24.1k]
  ------------------
 4457|  29.5k|            {
 4458|       |
 4459|       |                /*load 16 pixel values of row 0*/
 4460|  29.5k|                src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + offset)); /* pu1_src[col + (i-1) * 2]*/
 4461|       |
 4462|       |                /*load 16 pixel values of row 1*/
 4463|  29.5k|                src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + src_strd + offset)); /* pu1_src[col + (i-1) * 2]*/
 4464|       |
 4465|       |                /*Derive the source pixels for processing the 2nd pixel of row 0*/
 4466|  29.5k|                src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);
 4467|       |
 4468|  29.5k|                src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b);
 4469|       |
 4470|       |                /*Derive the source pixels for processing the 3rd pixel of row 0*/
 4471|  29.5k|                src_temp3_16x8b = _mm_srli_si128(src_temp1_16x8b, 4);
 4472|       |
 4473|       |                /*Derive the source pixels for processing the 4th pixel of row 0*/
 4474|  29.5k|                src_temp4_16x8b = _mm_srli_si128(src_temp1_16x8b, 6);
 4475|       |
 4476|  29.5k|                src_temp6_16x8b = _mm_unpacklo_epi8(src_temp3_16x8b, src_temp4_16x8b);
 4477|       |
 4478|       |                /*Derive the source pixels for processing the 2nd pixel of row 1*/
 4479|  29.5k|                src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);
 4480|       |
 4481|  29.5k|                src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b);
 4482|       |
 4483|       |                /*Derive the source pixels for processing the 3rd pixel of row 1*/
 4484|  29.5k|                src_temp13_16x8b = _mm_srli_si128(src_temp11_16x8b, 4);
 4485|       |
 4486|       |                /*Derive the source pixels for processing the 4th pixel of row 1*/
 4487|  29.5k|                src_temp14_16x8b = _mm_srli_si128(src_temp11_16x8b, 6);
 4488|       |
 4489|  29.5k|                src_temp16_16x8b = _mm_unpacklo_epi8(src_temp13_16x8b, src_temp14_16x8b);
 4490|       |
 4491|  29.5k|                res_temp1_8x16b = _mm_unpacklo_epi64(src_temp5_16x8b, src_temp15_16x8b);
 4492|  29.5k|                res_temp2_8x16b = _mm_unpacklo_epi64(src_temp6_16x8b, src_temp16_16x8b);
 4493|  29.5k|                res_temp11_8x16b = _mm_maddubs_epi16(res_temp1_8x16b, coeff0_1_8x16b);
 4494|  29.5k|                res_temp12_8x16b = _mm_maddubs_epi16(res_temp2_8x16b, coeff2_3_8x16b);
 4495|       |
 4496|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 4497|  29.5k|                res_temp13_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 4498|       |
 4499|  29.5k|                res_temp3_8x16b = _mm_srli_si128(res_temp13_8x16b, 8);
 4500|       |
 4501|       |                /* store 4 16-bit values */
 4502|  29.5k|                _mm_storel_epi64((__m128i *)(pi2_dst + offset), res_temp13_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 4503|       |
 4504|       |
 4505|       |
 4506|       |                /* store 4 16-bit values */
 4507|  29.5k|                _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd + offset), res_temp3_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 4508|       |
 4509|       |
 4510|  29.5k|                offset += 4; /* To pointer update*/
 4511|       |
 4512|  29.5k|            } /* inner loop ends here(8- output values in single iteration)*/
 4513|       |
 4514|  24.1k|            pu1_src += 2 * src_strd; /*pointer update*/
 4515|  24.1k|            pi2_dst += 2 * dst_strd; /*pointer update*/
 4516|  24.1k|        }
 4517|       |
 4518|       |        /*Epilogue to handle ht= odd case*/
 4519|  7.48k|        if(row)
  ------------------
  |  Branch (4519:12): [True: 7.22k, False: 260]
  ------------------
 4520|  7.22k|        {
 4521|  7.22k|            offset = 0;
 4522|  15.3k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (4522:26): [True: 8.13k, False: 7.22k]
  ------------------
 4523|  8.13k|            {
 4524|       |
 4525|       |                /*load 16 pixel values of row 0*/
 4526|  8.13k|                src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + offset)); /* pu1_src[col + (i-1) * 2]*/
 4527|       |
 4528|       |                /*Derive the source pixels for processing the 2nd pixel of row 0*/
 4529|  8.13k|                src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);
 4530|       |
 4531|  8.13k|                src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b);
 4532|       |
 4533|       |                /*Derive the source pixels for processing the 3rd pixel of row 0*/
 4534|  8.13k|                src_temp3_16x8b = _mm_srli_si128(src_temp1_16x8b, 4);
 4535|       |
 4536|       |                /*Derive the source pixels for processing the 4th pixel of row 0*/
 4537|  8.13k|                src_temp4_16x8b = _mm_srli_si128(src_temp1_16x8b, 6);
 4538|       |
 4539|  8.13k|                src_temp6_16x8b = _mm_unpacklo_epi8(src_temp3_16x8b, src_temp4_16x8b);
 4540|       |
 4541|  8.13k|                res_temp1_8x16b = _mm_unpacklo_epi64(src_temp5_16x8b, all_zero);
 4542|  8.13k|                res_temp2_8x16b = _mm_unpacklo_epi64(src_temp6_16x8b, all_zero);
 4543|  8.13k|                res_temp11_8x16b = _mm_maddubs_epi16(res_temp1_8x16b, coeff0_1_8x16b);
 4544|  8.13k|                res_temp12_8x16b = _mm_maddubs_epi16(res_temp2_8x16b, coeff2_3_8x16b);
 4545|       |
 4546|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 4547|  8.13k|                res_temp13_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 4548|       |
 4549|       |                //res_temp3_8x16b = _mm_srli_si128 (res_temp13_8x16b, 8);
 4550|       |
 4551|       |                /* store 4 16-bit values */
 4552|  8.13k|                _mm_storel_epi64((__m128i *)(pi2_dst + offset), res_temp13_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 4553|       |
 4554|  8.13k|                offset += 4; /* To pointer update*/
 4555|       |
 4556|  8.13k|            }
 4557|  7.22k|        }
 4558|       |
 4559|  7.48k|    }
 4560|   328k|    else
 4561|   328k|    {
 4562|   328k|        int offset = 0;
 4563|       |
 4564|  1.26M|        for(row = ht; row >= 2; row -= 2)
  ------------------
  |  Branch (4564:23): [True: 932k, False: 328k]
  ------------------
 4565|   932k|        {
 4566|   932k|            offset = 0;
 4567|   932k|            PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   932k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4568|   932k|            PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|   932k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4569|       |
 4570|       |
 4571|  2.11M|            for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (4571:26): [True: 1.18M, False: 932k]
  ------------------
 4572|  1.18M|            {
 4573|       |
 4574|       |                /*load 16 pixel values of row 0*/
 4575|  1.18M|                src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + offset)); /* pu1_src[col + (i-1) * 2]*/
 4576|       |
 4577|       |                /*load 16 pixel values of row 1*/
 4578|  1.18M|                src_temp11_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + src_strd + offset)); /* pu1_src[col + (i-1) * 2]*/
 4579|       |
 4580|       |                /*Derive the source pixels for processing the 2nd pixel of row 0*/
 4581|  1.18M|                src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);
 4582|       |
 4583|  1.18M|                src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b);
 4584|       |
 4585|       |                /*Derive the source pixels for processing the 3rd pixel of row 0*/
 4586|  1.18M|                src_temp3_16x8b = _mm_srli_si128(src_temp1_16x8b, 4);
 4587|       |
 4588|       |                /*Derive the source pixels for processing the 4th pixel of row 0*/
 4589|  1.18M|                src_temp4_16x8b = _mm_srli_si128(src_temp1_16x8b, 6);
 4590|       |
 4591|  1.18M|                src_temp6_16x8b = _mm_unpacklo_epi8(src_temp3_16x8b, src_temp4_16x8b);
 4592|       |
 4593|  1.18M|                res_temp1_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff0_1_8x16b);
 4594|  1.18M|                res_temp2_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff2_3_8x16b);
 4595|       |
 4596|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 4597|  1.18M|                res_temp3_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 4598|       |
 4599|       |                /* store 8 16-bit values */
 4600|  1.18M|                _mm_storeu_si128((__m128i *)(pi2_dst + offset), res_temp3_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 4601|       |
 4602|       |                /*Derive the source pixels for processing the 2nd pixel of row 1*/
 4603|  1.18M|                src_temp12_16x8b = _mm_srli_si128(src_temp11_16x8b, 2);
 4604|       |
 4605|  1.18M|                src_temp15_16x8b = _mm_unpacklo_epi8(src_temp11_16x8b, src_temp12_16x8b);
 4606|       |
 4607|       |                /*Derive the source pixels for processing the 3rd pixel of row 1*/
 4608|  1.18M|                src_temp13_16x8b = _mm_srli_si128(src_temp11_16x8b, 4);
 4609|       |
 4610|       |                /*Derive the source pixels for processing the 4th pixel of row 1*/
 4611|  1.18M|                src_temp14_16x8b = _mm_srli_si128(src_temp11_16x8b, 6);
 4612|       |
 4613|  1.18M|                src_temp16_16x8b = _mm_unpacklo_epi8(src_temp13_16x8b, src_temp14_16x8b);
 4614|       |
 4615|  1.18M|                res_temp11_8x16b = _mm_maddubs_epi16(src_temp15_16x8b, coeff0_1_8x16b);
 4616|  1.18M|                res_temp12_8x16b = _mm_maddubs_epi16(src_temp16_16x8b, coeff2_3_8x16b);
 4617|       |
 4618|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 4619|  1.18M|                res_temp13_8x16b = _mm_add_epi16(res_temp11_8x16b, res_temp12_8x16b);
 4620|       |
 4621|       |                /* store 8 16-bit values */
 4622|  1.18M|                _mm_storeu_si128((__m128i *)(pi2_dst + dst_strd + offset), res_temp13_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 4623|       |
 4624|       |
 4625|  1.18M|                offset += 8; /* To pointer update*/
 4626|       |
 4627|  1.18M|            } /* inner loop ends here(8- output values in single iteration)*/
 4628|       |
 4629|   932k|            pu1_src += 2 * src_strd; /*pointer update*/
 4630|   932k|            pi2_dst += 2 * dst_strd; /*pointer update*/
 4631|   932k|        }
 4632|       |
 4633|       |        /*Epilogue to take care of odd ht*/
 4634|   328k|        if(row)
  ------------------
  |  Branch (4634:12): [True: 230k, False: 97.7k]
  ------------------
 4635|   230k|        {
 4636|   230k|            offset = 0;
 4637|   479k|            for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (4637:26): [True: 248k, False: 230k]
  ------------------
 4638|   248k|            {
 4639|       |
 4640|       |                /*load 16 pixel values of row 0*/
 4641|   248k|                src_temp1_16x8b = _mm_loadu_si128((__m128i *)(pu1_src - 2 + offset)); /* pu1_src[col + (i-1) * 2]*/
 4642|       |
 4643|       |                /*Derive the source pixels for processing the 2nd pixel of row 0*/
 4644|   248k|                src_temp2_16x8b = _mm_srli_si128(src_temp1_16x8b, 2);
 4645|       |
 4646|   248k|                src_temp5_16x8b = _mm_unpacklo_epi8(src_temp1_16x8b, src_temp2_16x8b);
 4647|       |
 4648|       |                /*Derive the source pixels for processing the 3rd pixel of row 0*/
 4649|   248k|                src_temp3_16x8b = _mm_srli_si128(src_temp1_16x8b, 4);
 4650|       |
 4651|       |                /*Derive the source pixels for processing the 4th pixel of row 0*/
 4652|   248k|                src_temp4_16x8b = _mm_srli_si128(src_temp1_16x8b, 6);
 4653|       |
 4654|   248k|                src_temp6_16x8b = _mm_unpacklo_epi8(src_temp3_16x8b, src_temp4_16x8b);
 4655|       |
 4656|   248k|                res_temp1_8x16b = _mm_maddubs_epi16(src_temp5_16x8b, coeff0_1_8x16b);
 4657|   248k|                res_temp2_8x16b = _mm_maddubs_epi16(src_temp6_16x8b, coeff2_3_8x16b);
 4658|       |
 4659|       |                /* i4_tmp += pi1_coeff[i] * pi2_src[col + (i-1) * 2] */
 4660|   248k|                res_temp3_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
 4661|       |
 4662|       |                /* store 8 16-bit values */
 4663|   248k|                _mm_storeu_si128((__m128i *)(pi2_dst + offset), res_temp3_8x16b); /* pi2_dst[col] = i2_tmp_u  */
 4664|       |
 4665|   248k|                offset += 8; /* To pointer update*/
 4666|       |
 4667|   248k|            }
 4668|   230k|        }
 4669|       |
 4670|   328k|    }
 4671|   335k|}
ihevc_inter_pred_chroma_vert_w16out_ssse3:
 4720|  25.9k|{
 4721|  25.9k|    WORD32 row, col;
 4722|  25.9k|    UWORD8 *pu1_src_copy;
 4723|  25.9k|    WORD16 *pi2_dst_copy;
 4724|  25.9k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b;
 4725|  25.9k|    __m128i s4_8x16b, s5_8x16b, s6_8x16b, s8_8x16b;
 4726|  25.9k|    __m128i control_mask_1_8x16b, control_mask_2_8x16b;
 4727|  25.9k|    __m128i s11_8x16b, s12_8x16b, s15_8x16b, s16_8x16b;
 4728|  25.9k|    __m128i s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b;
 4729|  25.9k|    __m128i s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b;
 4730|       |
 4731|       |
 4732|  25.9k|    PREFETCH((char const *)(pu1_src + (0 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  25.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4733|  25.9k|    PREFETCH((char const *)(pu1_src + (1 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  25.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4734|  25.9k|    PREFETCH((char const *)(pu1_src + (2 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  25.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4735|  25.9k|    PREFETCH((char const *)(pu1_src + (3 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  25.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4736|  25.9k|    PREFETCH((char const *)(pu1_src + (4 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  25.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4737|  25.9k|    PREFETCH((char const *)(pu1_src + (5 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  25.9k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4738|       |
 4739|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 4740|  25.9k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 4741|       |
 4742|  25.9k|    control_mask_1_8x16b = _mm_set1_epi32(0x01000100); /* Control Mask register */
 4743|  25.9k|    control_mask_2_8x16b = _mm_set1_epi32(0x03020302); /* Control Mask register */
 4744|       |
 4745|  25.9k|    coeff0_1_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_1_8x16b);  /* pi1_coeff[4] */
 4746|  25.9k|    coeff2_3_8x16b = _mm_shuffle_epi8(s4_8x16b, control_mask_2_8x16b);  /* pi1_coeff[4] */
 4747|       |
 4748|       |
 4749|       |
 4750|       |/*  outer for loop starts from here */
 4751|  25.9k|    if(wd % 8 == 0)
  ------------------
  |  Branch (4751:8): [True: 3.72k, False: 22.2k]
  ------------------
 4752|  3.72k|    { /* wd = multiple of 8 case */
 4753|       |
 4754|  3.72k|        pu1_src_copy = pu1_src;
 4755|  3.72k|        pi2_dst_copy = pi2_dst;
 4756|       |
 4757|  9.81k|        for(col = 0; col < 2 * wd; col += 16)
  ------------------
  |  Branch (4757:22): [True: 6.09k, False: 3.72k]
  ------------------
 4758|  6.09k|        {
 4759|       |
 4760|  6.09k|            pu1_src = pu1_src_copy + col;
 4761|  6.09k|            pi2_dst = pi2_dst_copy + col;
 4762|       |
 4763|       |
 4764|  60.2k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (4764:26): [True: 54.1k, False: 6.09k]
  ------------------
 4765|  54.1k|            {
 4766|       |
 4767|  54.1k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  54.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4768|  54.1k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  54.1k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4769|       |
 4770|       |
 4771|       |                /*load 16 pixel values */
 4772|  54.1k|                s21_8x16b  = _mm_loadu_si128((__m128i *)(pu1_src + (-1 * src_strd)));
 4773|       |
 4774|       |                /*load 16 pixel values */
 4775|  54.1k|                s22_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (0 * src_strd)));
 4776|       |
 4777|       |
 4778|       |                /*load 16 pixel values */
 4779|  54.1k|                s23_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (1 * src_strd)));
 4780|       |
 4781|       |                /*load 16 pixel values */
 4782|  54.1k|                s24_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (2 * src_strd)));
 4783|       |
 4784|  54.1k|                s5_8x16b = _mm_unpacklo_epi8(s21_8x16b, s22_8x16b);
 4785|       |
 4786|  54.1k|                s31_8x16b = _mm_unpackhi_epi8(s21_8x16b, s22_8x16b);
 4787|       |
 4788|  54.1k|                s6_8x16b = _mm_unpacklo_epi8(s23_8x16b, s24_8x16b);
 4789|       |
 4790|  54.1k|                s33_8x16b = _mm_unpackhi_epi8(s23_8x16b, s24_8x16b);
 4791|       |
 4792|  54.1k|                s11_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4793|       |
 4794|  54.1k|                s32_8x16b = _mm_maddubs_epi16(s31_8x16b, coeff0_1_8x16b);
 4795|       |
 4796|  54.1k|                s12_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4797|       |
 4798|  54.1k|                s34_8x16b = _mm_maddubs_epi16(s33_8x16b, coeff2_3_8x16b);
 4799|       |
 4800|  54.1k|                s8_8x16b = _mm_add_epi16(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4801|       |
 4802|  54.1k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s34_8x16b);
 4803|       |
 4804|       |/* store 8 8-bit output values  */
 4805|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 4806|  54.1k|                _mm_storeu_si128((__m128i *)(pi2_dst), s8_8x16b);
 4807|       |
 4808|  54.1k|                _mm_storeu_si128((__m128i *)(pi2_dst + 8), s35_8x16b);
 4809|       |
 4810|       |
 4811|  54.1k|                s25_8x16b = _mm_loadu_si128((__m128i *)(pu1_src + (3 * src_strd)));
 4812|       |
 4813|  54.1k|                s5_8x16b = _mm_unpacklo_epi8(s22_8x16b, s23_8x16b);
 4814|       |
 4815|  54.1k|                s31_8x16b = _mm_unpackhi_epi8(s22_8x16b, s23_8x16b);
 4816|       |
 4817|  54.1k|                s15_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4818|       |
 4819|  54.1k|                s32_8x16b = _mm_maddubs_epi16(s31_8x16b, coeff0_1_8x16b);
 4820|       |
 4821|  54.1k|                s6_8x16b = _mm_unpacklo_epi8(s24_8x16b, s25_8x16b);
 4822|       |
 4823|  54.1k|                s33_8x16b = _mm_unpackhi_epi8(s24_8x16b, s25_8x16b);
 4824|       |
 4825|  54.1k|                s16_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4826|       |
 4827|  54.1k|                s34_8x16b = _mm_maddubs_epi16(s33_8x16b, coeff2_3_8x16b);
 4828|       |
 4829|  54.1k|                s8_8x16b = _mm_add_epi16(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4830|       |
 4831|  54.1k|                s35_8x16b = _mm_add_epi16(s32_8x16b, s34_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4832|       |
 4833|       |/* store 8 8-bit output values  */
 4834|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 4835|  54.1k|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd), s8_8x16b);
 4836|       |
 4837|  54.1k|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd + 8), s35_8x16b);
 4838|       |
 4839|       |
 4840|  54.1k|                pu1_src += 2 * src_strd;
 4841|  54.1k|                pi2_dst += 2 * dst_strd;
 4842|       |
 4843|       |
 4844|  54.1k|            } /* inner for loop ends here(8-output values in single iteration) */
 4845|       |
 4846|  6.09k|        }
 4847|  3.72k|    }
 4848|       |
 4849|  22.2k|    else if(wd % 4 == 0)
  ------------------
  |  Branch (4849:13): [True: 21.8k, False: 325]
  ------------------
 4850|  21.8k|    { /* wd = multiple of 8 case */
 4851|       |
 4852|  66.5k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (4852:22): [True: 44.6k, False: 21.8k]
  ------------------
 4853|  44.6k|        {
 4854|       |
 4855|  44.6k|            pu1_src_copy = pu1_src;
 4856|  44.6k|            pi2_dst_copy = pi2_dst;
 4857|       |
 4858|  90.0k|            for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (4858:26): [True: 45.4k, False: 44.6k]
  ------------------
 4859|  45.4k|            {
 4860|       |
 4861|  45.4k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  45.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4862|  45.4k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  45.4k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4863|       |
 4864|       |
 4865|       |                /*load 8 pixel values */
 4866|  45.4k|                s21_8x16b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 4867|       |
 4868|       |                /*load 8 pixel values */
 4869|  45.4k|                s22_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 4870|       |
 4871|  45.4k|                s5_8x16b = _mm_unpacklo_epi8(s21_8x16b, s22_8x16b);
 4872|       |
 4873|  45.4k|                s11_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4874|       |
 4875|       |                /*load 8 pixel values */
 4876|  45.4k|                s23_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 4877|       |
 4878|       |                /*load 8 pixel values */
 4879|  45.4k|                s24_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 4880|       |
 4881|  45.4k|                s6_8x16b = _mm_unpacklo_epi8(s23_8x16b, s24_8x16b);
 4882|       |
 4883|  45.4k|                s12_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4884|       |
 4885|  45.4k|                s8_8x16b = _mm_add_epi16(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4886|       |
 4887|  45.4k|                _mm_storeu_si128((__m128i *)(pi2_dst), s8_8x16b);
 4888|       |
 4889|  45.4k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 4890|       |
 4891|  45.4k|                s5_8x16b = _mm_unpacklo_epi8(s22_8x16b, s23_8x16b);
 4892|  45.4k|                s15_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4893|       |
 4894|  45.4k|                s6_8x16b = _mm_unpacklo_epi8(s24_8x16b, s25_8x16b);
 4895|  45.4k|                s16_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4896|       |
 4897|  45.4k|                s8_8x16b = _mm_add_epi16(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4898|       |
 4899|  45.4k|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd), s8_8x16b);
 4900|       |
 4901|  45.4k|                pu1_src += 8;    /* To pointer update */
 4902|  45.4k|                pi2_dst += 8;
 4903|       |
 4904|  45.4k|            } /* inner for loop ends here(8-output values in single iteration) */
 4905|       |
 4906|  44.6k|            pu1_src = pu1_src_copy + 2 * src_strd; /* pointer update */
 4907|  44.6k|            pi2_dst = pi2_dst_copy + 2 * dst_strd; /* pointer update */
 4908|  44.6k|        }
 4909|  21.8k|    }
 4910|       |
 4911|    325|    else
 4912|    325|    { /* wd = multiple of 4 case */
 4913|       |
 4914|  1.37k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (4914:22): [True: 1.05k, False: 325]
  ------------------
 4915|  1.05k|        {
 4916|  1.05k|            pu1_src_copy = pu1_src;
 4917|  1.05k|            pi2_dst_copy = pi2_dst;
 4918|  2.94k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (4918:26): [True: 1.88k, False: 1.05k]
  ------------------
 4919|  1.88k|            {
 4920|       |
 4921|  1.88k|                PREFETCH((char const *)(pu1_src + (6 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.88k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4922|  1.88k|                PREFETCH((char const *)(pu1_src + (7 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  1.88k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
 4923|       |
 4924|       |
 4925|       |                /*load 8 pixel values */
 4926|  1.88k|                s21_8x16b  = _mm_loadl_epi64((__m128i *)(pu1_src + (-1 * src_strd)));
 4927|       |
 4928|       |                /*load 8 pixel values */
 4929|  1.88k|                s22_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (0 * src_strd)));
 4930|       |
 4931|  1.88k|                s5_8x16b = _mm_unpacklo_epi8(s21_8x16b, s22_8x16b);
 4932|       |
 4933|  1.88k|                s11_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4934|       |
 4935|       |                /*load 8 pixel values */
 4936|  1.88k|                s23_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (1 * src_strd)));
 4937|       |
 4938|       |                /*load 8 pixel values */
 4939|  1.88k|                s24_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (2 * src_strd)));
 4940|       |
 4941|  1.88k|                s6_8x16b = _mm_unpacklo_epi8(s23_8x16b, s24_8x16b);
 4942|       |
 4943|  1.88k|                s12_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4944|       |
 4945|  1.88k|                s8_8x16b = _mm_add_epi16(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4946|       |
 4947|       |
 4948|       |/* store 8 8-bit output values  */
 4949|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 4950|  1.88k|                _mm_storel_epi64((__m128i *)(pi2_dst), s8_8x16b);
 4951|       |
 4952|  1.88k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pu1_src + (3 * src_strd)));
 4953|       |
 4954|  1.88k|                s5_8x16b = _mm_unpacklo_epi8(s22_8x16b, s23_8x16b);
 4955|  1.88k|                s15_8x16b = _mm_maddubs_epi16(s5_8x16b, coeff0_1_8x16b);
 4956|       |
 4957|  1.88k|                s6_8x16b = _mm_unpacklo_epi8(s24_8x16b, s25_8x16b);
 4958|  1.88k|                s16_8x16b = _mm_maddubs_epi16(s6_8x16b, coeff2_3_8x16b);
 4959|       |
 4960|  1.88k|                s8_8x16b = _mm_add_epi16(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 4961|       |
 4962|       |
 4963|       |/* store 8 8-bit output values  */
 4964|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 4965|  1.88k|                _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd), s8_8x16b);
 4966|       |
 4967|  1.88k|                pu1_src += 4;   /* To pointer update */
 4968|  1.88k|                pi2_dst += 4;
 4969|  1.88k|            } /* inner for loop ends here(8-output values in single iteration) */
 4970|       |
 4971|  1.05k|            pu1_src = pu1_src_copy + 2 * src_strd; /* pointer update */
 4972|  1.05k|            pi2_dst = pi2_dst_copy + 2 * dst_strd; /* pointer update */
 4973|  1.05k|        }
 4974|    325|    }
 4975|  25.9k|}
ihevc_inter_pred_chroma_vert_w16inp_ssse3:
 5024|  60.6k|{
 5025|  60.6k|    WORD32 row, col;
 5026|  60.6k|    WORD16 *pi2_src_copy;
 5027|  60.6k|    UWORD8 *pu1_dst_copy;
 5028|  60.6k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b;
 5029|  60.6k|    __m128i s4_8x16b, s5_8x16b, s6_8x16b, s7_8x16b, s8_8x16b, s9_8x16b;
 5030|  60.6k|    __m128i s11_8x16b, s12_8x16b, s15_8x16b, s16_8x16b;
 5031|  60.6k|    __m128i zero_8x16b, offset_8x16b, mask_low_32b, mask_high_96b, sign_reg;
 5032|  60.6k|    __m128i s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b;
 5033|  60.6k|    __m128i s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b;
 5034|       |
 5035|       |
 5036|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 5037|  60.6k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 5038|       |
 5039|  60.6k|    zero_8x16b = _mm_setzero_si128();
 5040|  60.6k|    sign_reg =  _mm_cmpgt_epi8(zero_8x16b, s4_8x16b);
 5041|  60.6k|    s5_8x16b  = _mm_unpacklo_epi8(s4_8x16b, sign_reg);
 5042|       |
 5043|  60.6k|    coeff0_1_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(0, 0, 0, 0));  /* pi1_coeff[4] */
 5044|  60.6k|    coeff2_3_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(1, 1, 1, 1));  /* pi1_coeff[4] */
 5045|       |
 5046|       |/*  seting  values in register */
 5047|  60.6k|    offset_8x16b = _mm_set1_epi32(OFFSET_14_MINUS_BIT_DEPTH); /* for offset addition */
  ------------------
  |  |   42|  60.6k|#define OFFSET_14_MINUS_BIT_DEPTH (1 << (SHIFT_14_MINUS_BIT_DEPTH - 1))
  |  |  ------------------
  |  |  |  |   41|  60.6k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  |  |  ------------------
  |  |  |  |  |  |  269|  60.6k|#define BIT_DEPTH           8
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5048|  60.6k|    mask_low_32b = _mm_set_epi32(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000);
 5049|  60.6k|    mask_high_96b = _mm_set_epi32(0x00000000, 0x00000000, 0x00000000, 0xFFFFFFFF);
 5050|       |
 5051|       |/*  outer for loop starts from here */
 5052|  60.6k|    if(wd % 4 == 0)
  ------------------
  |  Branch (5052:8): [True: 54.2k, False: 6.37k]
  ------------------
 5053|  54.2k|    { /* wd = multiple of 8 case */
 5054|       |
 5055|  54.2k|        pi2_src_copy = pi2_src;
 5056|  54.2k|        pu1_dst_copy = pu1_dst;
 5057|       |
 5058|   113k|        for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (5058:22): [True: 59.0k, False: 54.2k]
  ------------------
 5059|  59.0k|        {
 5060|       |
 5061|  59.0k|            pi2_src = pi2_src_copy + col;
 5062|  59.0k|            pu1_dst = pu1_dst_copy + col;
 5063|       |
 5064|       |
 5065|   212k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (5065:26): [True: 153k, False: 59.0k]
  ------------------
 5066|   153k|            {
 5067|       |
 5068|       |                /*load 16 pixel values */
 5069|   153k|                s21_8x16b  = _mm_load_si128((__m128i *)(pi2_src + (-1 * src_strd)));
 5070|       |
 5071|       |                /*load 16 pixel values */
 5072|   153k|                s22_8x16b = _mm_load_si128((__m128i *)(pi2_src + (0 * src_strd)));
 5073|       |
 5074|       |
 5075|       |                /*load 16 pixel values */
 5076|   153k|                s23_8x16b = _mm_load_si128((__m128i *)(pi2_src + (1 * src_strd)));
 5077|       |
 5078|       |                /*load 16 pixel values */
 5079|   153k|                s24_8x16b = _mm_load_si128((__m128i *)(pi2_src + (2 * src_strd)));
 5080|       |
 5081|   153k|                s5_8x16b = _mm_unpacklo_epi16(s21_8x16b, s22_8x16b);
 5082|       |
 5083|   153k|                s31_8x16b = _mm_unpackhi_epi16(s21_8x16b, s22_8x16b);
 5084|       |
 5085|   153k|                s6_8x16b = _mm_unpacklo_epi16(s23_8x16b, s24_8x16b);
 5086|       |
 5087|   153k|                s33_8x16b = _mm_unpackhi_epi16(s23_8x16b, s24_8x16b);
 5088|       |
 5089|   153k|                s11_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5090|       |
 5091|   153k|                s32_8x16b = _mm_madd_epi16(s31_8x16b, coeff0_1_8x16b);
 5092|       |
 5093|   153k|                s12_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5094|       |
 5095|   153k|                s34_8x16b = _mm_madd_epi16(s33_8x16b, coeff2_3_8x16b);
 5096|       |
 5097|   153k|                s8_8x16b = _mm_add_epi32(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5098|       |
 5099|   153k|                s35_8x16b = _mm_add_epi32(s32_8x16b, s34_8x16b);
 5100|       |
 5101|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5102|   153k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5103|       |
 5104|   153k|                s32_8x16b = _mm_srai_epi32(s35_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5105|       |
 5106|       |
 5107|       |                /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 5108|   153k|                s7_8x16b = _mm_add_epi32(s6_8x16b, offset_8x16b);
 5109|       |
 5110|       |                /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5111|   153k|                s8_8x16b = _mm_srai_epi32(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5112|       |
 5113|   153k|                s9_8x16b = _mm_packs_epi32(s8_8x16b, zero_8x16b);
 5114|       |
 5115|       |                /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 5116|   153k|                s33_8x16b = _mm_add_epi32(s32_8x16b, offset_8x16b);
 5117|       |
 5118|       |                /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5119|   153k|                s34_8x16b = _mm_srai_epi32(s33_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5120|       |
 5121|   153k|                s35_8x16b = _mm_packs_epi32(s34_8x16b, zero_8x16b);
 5122|       |
 5123|       |
 5124|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 5125|   153k|                s7_8x16b = _mm_packus_epi16(s9_8x16b, zero_8x16b);
 5126|       |
 5127|   153k|                s33_8x16b =  _mm_packus_epi16(s35_8x16b, zero_8x16b);
 5128|       |
 5129|   153k|                s7_8x16b = _mm_unpacklo_epi32(s7_8x16b, s33_8x16b);
 5130|       |/* store 8 8-bit output values  */
 5131|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 5132|   153k|                _mm_storel_epi64((__m128i *)(pu1_dst), s7_8x16b);
 5133|       |
 5134|       |
 5135|   153k|                s25_8x16b = _mm_load_si128((__m128i *)(pi2_src + (3 * src_strd)));
 5136|       |
 5137|   153k|                s5_8x16b = _mm_unpacklo_epi16(s22_8x16b, s23_8x16b);
 5138|       |
 5139|   153k|                s31_8x16b = _mm_unpackhi_epi16(s22_8x16b, s23_8x16b);
 5140|       |
 5141|   153k|                s15_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5142|       |
 5143|   153k|                s32_8x16b = _mm_madd_epi16(s31_8x16b, coeff0_1_8x16b);
 5144|       |
 5145|   153k|                s6_8x16b = _mm_unpacklo_epi16(s24_8x16b, s25_8x16b);
 5146|       |
 5147|   153k|                s33_8x16b = _mm_unpackhi_epi16(s24_8x16b, s25_8x16b);
 5148|       |
 5149|   153k|                s16_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5150|       |
 5151|   153k|                s34_8x16b = _mm_madd_epi16(s33_8x16b, coeff2_3_8x16b);
 5152|       |
 5153|   153k|                s8_8x16b = _mm_add_epi32(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5154|       |
 5155|   153k|                s35_8x16b = _mm_add_epi32(s32_8x16b, s34_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5156|       |
 5157|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5158|   153k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5159|       |
 5160|   153k|                s32_8x16b = _mm_srai_epi32(s35_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5161|       |
 5162|       |
 5163|       |                /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 5164|   153k|                s7_8x16b = _mm_add_epi32(s6_8x16b, offset_8x16b);
 5165|       |
 5166|       |                /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5167|   153k|                s8_8x16b = _mm_srai_epi32(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5168|       |
 5169|   153k|                s9_8x16b = _mm_packs_epi32(s8_8x16b, zero_8x16b);
 5170|       |
 5171|       |                /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 5172|   153k|                s33_8x16b = _mm_add_epi32(s32_8x16b, offset_8x16b);
 5173|       |
 5174|       |                /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5175|   153k|                s34_8x16b = _mm_srai_epi32(s33_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   153k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   153k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5176|       |
 5177|   153k|                s35_8x16b = _mm_packs_epi32(s34_8x16b, zero_8x16b);
 5178|       |
 5179|       |
 5180|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 5181|   153k|                s7_8x16b = _mm_packus_epi16(s9_8x16b, zero_8x16b);
 5182|       |
 5183|   153k|                s33_8x16b =  _mm_packus_epi16(s35_8x16b, zero_8x16b);
 5184|       |
 5185|   153k|                s7_8x16b = _mm_unpacklo_epi32(s7_8x16b, s33_8x16b);
 5186|       |/* store 8 8-bit output values  */
 5187|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 5188|   153k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s7_8x16b);
 5189|       |
 5190|   153k|                pi2_src += 2 * src_strd;
 5191|   153k|                pu1_dst += 2 * dst_strd;
 5192|       |
 5193|       |
 5194|   153k|            } /* inner for loop ends here(8-output values in single iteration) */
 5195|       |
 5196|  59.0k|        }
 5197|  54.2k|    }
 5198|  6.37k|    else
 5199|  6.37k|    { /* wd = multiple of 4 case */
 5200|       |
 5201|  19.8k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (5201:22): [True: 13.4k, False: 6.37k]
  ------------------
 5202|  13.4k|        {
 5203|  13.4k|            pi2_src_copy = pi2_src;
 5204|  13.4k|            pu1_dst_copy = pu1_dst;
 5205|  27.8k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (5205:26): [True: 14.3k, False: 13.4k]
  ------------------
 5206|  14.3k|            {
 5207|       |
 5208|       |                /*load 8 pixel values  */
 5209|  14.3k|                s21_8x16b  = _mm_loadl_epi64((__m128i *)(pi2_src + (-1 * src_strd)));
 5210|       |
 5211|       |                /*load 8 pixel values */
 5212|  14.3k|                s22_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (0 * src_strd)));
 5213|       |
 5214|  14.3k|                s5_8x16b = _mm_unpacklo_epi16(s21_8x16b, s22_8x16b);
 5215|       |
 5216|  14.3k|                s11_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5217|       |
 5218|       |                /*load 8 pixel values */
 5219|  14.3k|                s23_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (1 * src_strd)));
 5220|       |
 5221|       |                /*load 8 pixel values */
 5222|  14.3k|                s24_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (2 * src_strd)));
 5223|       |
 5224|  14.3k|                s6_8x16b = _mm_unpacklo_epi16(s23_8x16b, s24_8x16b);
 5225|       |
 5226|  14.3k|                s12_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5227|       |
 5228|  14.3k|                s8_8x16b = _mm_add_epi32(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5229|       |
 5230|       |
 5231|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5232|  14.3k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.3k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.3k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5233|       |
 5234|       |
 5235|       |                /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 5236|  14.3k|                s7_8x16b = _mm_add_epi32(s6_8x16b, offset_8x16b);
 5237|       |
 5238|       |                /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5239|  14.3k|                s8_8x16b = _mm_srai_epi32(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.3k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.3k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5240|       |
 5241|  14.3k|                s9_8x16b = _mm_packs_epi32(s8_8x16b, zero_8x16b);
 5242|       |
 5243|       |
 5244|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 5245|  14.3k|                s7_8x16b = _mm_packus_epi16(s9_8x16b, zero_8x16b);
 5246|       |
 5247|  14.3k|                s9_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst));
 5248|  14.3k|                s5_8x16b =  _mm_and_si128(s9_8x16b, mask_low_32b);
 5249|  14.3k|                s6_8x16b =  _mm_and_si128(s7_8x16b, mask_high_96b);
 5250|  14.3k|                s9_8x16b = _mm_or_si128(s5_8x16b, s6_8x16b);
 5251|       |
 5252|       |/* store 8 8-bit output values  */
 5253|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 5254|  14.3k|                _mm_storel_epi64((__m128i *)(pu1_dst), s9_8x16b);
 5255|       |
 5256|  14.3k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (3 * src_strd)));
 5257|       |
 5258|  14.3k|                s5_8x16b = _mm_unpacklo_epi16(s22_8x16b, s23_8x16b);
 5259|  14.3k|                s15_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5260|       |
 5261|  14.3k|                s6_8x16b = _mm_unpacklo_epi16(s24_8x16b, s25_8x16b);
 5262|  14.3k|                s16_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5263|       |
 5264|  14.3k|                s8_8x16b = _mm_add_epi32(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5265|       |
 5266|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5267|  14.3k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.3k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.3k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5268|       |
 5269|       |                /* (i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) */
 5270|  14.3k|                s7_8x16b = _mm_add_epi32(s6_8x16b, offset_8x16b);
 5271|       |
 5272|       |                /* i4_tmp = ((i4_tmp >> SHIFT_14_MINUS_BIT_DEPTH) + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5273|  14.3k|                s8_8x16b = _mm_srai_epi32(s7_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  14.3k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  14.3k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5274|       |
 5275|  14.3k|                s9_8x16b = _mm_packs_epi32(s8_8x16b, zero_8x16b);
 5276|       |
 5277|       |                /* i2_tmp = CLIP_U8(i2_tmp);*/
 5278|  14.3k|                s7_8x16b = _mm_packus_epi16(s9_8x16b, zero_8x16b);
 5279|       |
 5280|  14.3k|                s9_8x16b = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
 5281|  14.3k|                s5_8x16b =  _mm_and_si128(s9_8x16b, mask_low_32b);
 5282|  14.3k|                s6_8x16b =  _mm_and_si128(s7_8x16b, mask_high_96b);
 5283|  14.3k|                s9_8x16b = _mm_or_si128(s5_8x16b, s6_8x16b);
 5284|       |
 5285|       |/* store 8 8-bit output values  */
 5286|       |                /* pu1_dst[col] = (UWORD8)i2_tmp; */
 5287|  14.3k|                _mm_storel_epi64((__m128i *)(pu1_dst + dst_strd), s9_8x16b);
 5288|       |
 5289|  14.3k|                pi2_src += 4;   /* To pointer update */
 5290|  14.3k|                pu1_dst += 4;
 5291|  14.3k|            } /* inner for loop ends here(8-output values in single iteration) */
 5292|       |
 5293|  13.4k|            pi2_src = pi2_src_copy + 2 * src_strd; /* pointer update */
 5294|  13.4k|            pu1_dst = pu1_dst_copy + 2 * dst_strd; /* pointer update */
 5295|  13.4k|        }
 5296|  6.37k|    }
 5297|       |
 5298|  60.6k|}
ihevc_inter_pred_chroma_vert_w16inp_w16out_ssse3:
 5349|   177k|{
 5350|   177k|    WORD32 row, col;
 5351|   177k|    WORD16 *pi2_src_copy;
 5352|   177k|    WORD16 *pi2_dst_copy;
 5353|   177k|    __m128i coeff0_1_8x16b, coeff2_3_8x16b;
 5354|   177k|    __m128i s4_8x16b, s5_8x16b, s6_8x16b, s7_8x16b, s8_8x16b, s9_8x16b;
 5355|   177k|    __m128i s11_8x16b, s12_8x16b, s15_8x16b, s16_8x16b;
 5356|   177k|    __m128i zero_8x16b, sign_reg;
 5357|   177k|    __m128i s21_8x16b, s22_8x16b, s23_8x16b, s24_8x16b, s25_8x16b;
 5358|   177k|    __m128i s31_8x16b, s32_8x16b, s33_8x16b, s34_8x16b, s35_8x16b;
 5359|       |
 5360|       |
 5361|       |/* load 8 8-bit coefficients and convert 8-bit into 16-bit  */
 5362|   177k|    s4_8x16b = _mm_loadl_epi64((__m128i *)pi1_coeff);
 5363|       |
 5364|   177k|    zero_8x16b = _mm_setzero_si128();
 5365|   177k|    sign_reg =  _mm_cmpgt_epi8(zero_8x16b, s4_8x16b);
 5366|   177k|    s5_8x16b  = _mm_unpacklo_epi8(s4_8x16b, sign_reg);
 5367|       |
 5368|   177k|    coeff0_1_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(0, 0, 0, 0));  /* pi1_coeff[4] */
 5369|   177k|    coeff2_3_8x16b = _mm_shuffle_epi32(s5_8x16b, _MM_SHUFFLE(1, 1, 1, 1));  /* pi1_coeff[4] */
 5370|       |
 5371|       |
 5372|       |/*  outer for loop starts from here */
 5373|   177k|    if(wd % 4 == 0)
  ------------------
  |  Branch (5373:8): [True: 176k, False: 779]
  ------------------
 5374|   176k|    { /* wd = multiple of 8 case */
 5375|       |
 5376|   176k|        pi2_src_copy = pi2_src;
 5377|   176k|        pi2_dst_copy = pi2_dst;
 5378|       |
 5379|   366k|        for(col = 0; col < 2 * wd; col += 8)
  ------------------
  |  Branch (5379:22): [True: 190k, False: 176k]
  ------------------
 5380|   190k|        {
 5381|       |
 5382|   190k|            pi2_src = pi2_src_copy + col;
 5383|   190k|            pi2_dst = pi2_dst_copy + col;
 5384|       |
 5385|       |
 5386|   686k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (5386:26): [True: 496k, False: 190k]
  ------------------
 5387|   496k|            {
 5388|       |
 5389|       |                /*load 16 pixel values */
 5390|   496k|                s21_8x16b  = _mm_load_si128((__m128i *)(pi2_src + (-1 * src_strd)));
 5391|       |
 5392|       |                /*load 16 pixel values */
 5393|   496k|                s22_8x16b = _mm_load_si128((__m128i *)(pi2_src + (0 * src_strd)));
 5394|       |
 5395|       |
 5396|       |                /*load 16 pixel values */
 5397|   496k|                s23_8x16b = _mm_load_si128((__m128i *)(pi2_src + (1 * src_strd)));
 5398|       |
 5399|       |                /*load 16 pixel values */
 5400|   496k|                s24_8x16b = _mm_load_si128((__m128i *)(pi2_src + (2 * src_strd)));
 5401|       |
 5402|   496k|                s5_8x16b = _mm_unpacklo_epi16(s21_8x16b, s22_8x16b);
 5403|       |
 5404|   496k|                s31_8x16b = _mm_unpackhi_epi16(s21_8x16b, s22_8x16b);
 5405|       |
 5406|   496k|                s6_8x16b = _mm_unpacklo_epi16(s23_8x16b, s24_8x16b);
 5407|       |
 5408|   496k|                s33_8x16b = _mm_unpackhi_epi16(s23_8x16b, s24_8x16b);
 5409|       |
 5410|   496k|                s11_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5411|       |
 5412|   496k|                s32_8x16b = _mm_madd_epi16(s31_8x16b, coeff0_1_8x16b);
 5413|       |
 5414|   496k|                s12_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5415|       |
 5416|   496k|                s34_8x16b = _mm_madd_epi16(s33_8x16b, coeff2_3_8x16b);
 5417|       |
 5418|   496k|                s8_8x16b = _mm_add_epi32(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5419|       |
 5420|   496k|                s35_8x16b = _mm_add_epi32(s32_8x16b, s34_8x16b);
 5421|       |
 5422|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5423|   496k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   496k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   496k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5424|       |
 5425|   496k|                s32_8x16b = _mm_srai_epi32(s35_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   496k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   496k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5426|       |
 5427|   496k|                s9_8x16b = _mm_packs_epi32(s6_8x16b, zero_8x16b);
 5428|       |
 5429|   496k|                s35_8x16b = _mm_packs_epi32(s32_8x16b, zero_8x16b);
 5430|       |
 5431|   496k|                s7_8x16b = _mm_unpacklo_epi64(s9_8x16b, s35_8x16b);
 5432|       |/* store 8 8-bit output values  */
 5433|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 5434|   496k|                _mm_store_si128((__m128i *)(pi2_dst), s7_8x16b);
 5435|       |
 5436|       |
 5437|   496k|                s25_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + (3 * src_strd)));
 5438|       |
 5439|   496k|                s5_8x16b = _mm_unpacklo_epi16(s22_8x16b, s23_8x16b);
 5440|       |
 5441|   496k|                s31_8x16b = _mm_unpackhi_epi16(s22_8x16b, s23_8x16b);
 5442|       |
 5443|   496k|                s15_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5444|       |
 5445|   496k|                s32_8x16b = _mm_madd_epi16(s31_8x16b, coeff0_1_8x16b);
 5446|       |
 5447|   496k|                s6_8x16b = _mm_unpacklo_epi16(s24_8x16b, s25_8x16b);
 5448|       |
 5449|   496k|                s33_8x16b = _mm_unpackhi_epi16(s24_8x16b, s25_8x16b);
 5450|       |
 5451|   496k|                s16_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5452|       |
 5453|   496k|                s34_8x16b = _mm_madd_epi16(s33_8x16b, coeff2_3_8x16b);
 5454|       |
 5455|   496k|                s8_8x16b = _mm_add_epi32(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5456|       |
 5457|   496k|                s35_8x16b = _mm_add_epi32(s32_8x16b, s34_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5458|       |
 5459|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5460|   496k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   496k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   496k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5461|       |
 5462|   496k|                s32_8x16b = _mm_srai_epi32(s35_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|   496k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   496k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5463|       |
 5464|   496k|                s9_8x16b = _mm_packs_epi32(s6_8x16b, zero_8x16b);
 5465|       |
 5466|   496k|                s35_8x16b = _mm_packs_epi32(s32_8x16b, zero_8x16b);
 5467|       |
 5468|   496k|                s7_8x16b = _mm_unpacklo_epi64(s9_8x16b, s35_8x16b);
 5469|       |/* store 8 8-bit output values  */
 5470|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 5471|   496k|                _mm_store_si128((__m128i *)(pi2_dst + dst_strd), s7_8x16b);
 5472|       |
 5473|   496k|                pi2_src += 2 * src_strd;
 5474|   496k|                pi2_dst += 2 * dst_strd;
 5475|       |
 5476|       |
 5477|   496k|            } /* inner for loop ends here(8-output values in single iteration) */
 5478|       |
 5479|   190k|        }
 5480|   176k|    }
 5481|    779|    else
 5482|    779|    { /* wd = multiple of 4 case */
 5483|       |
 5484|  3.44k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (5484:22): [True: 2.66k, False: 779]
  ------------------
 5485|  2.66k|        {
 5486|  2.66k|            pi2_src_copy = pi2_src;
 5487|  2.66k|            pi2_dst_copy = pi2_dst;
 5488|  8.02k|            for(col = 0; col < 2 * wd; col += 4)
  ------------------
  |  Branch (5488:26): [True: 5.35k, False: 2.66k]
  ------------------
 5489|  5.35k|            {
 5490|       |
 5491|       |                /*load 4 pixel values */
 5492|  5.35k|                s21_8x16b  = _mm_loadl_epi64((__m128i *)(pi2_src + (-1 * src_strd)));
 5493|       |
 5494|       |                /*load 4 pixel values */
 5495|  5.35k|                s22_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (0 * src_strd)));
 5496|       |
 5497|  5.35k|                s5_8x16b = _mm_unpacklo_epi16(s21_8x16b, s22_8x16b);
 5498|       |
 5499|  5.35k|                s11_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5500|       |
 5501|       |                /*load 4 pixel values */
 5502|  5.35k|                s23_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (1 * src_strd)));
 5503|       |
 5504|       |                /*load 4 pixel values */
 5505|  5.35k|                s24_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (2 * src_strd)));
 5506|       |
 5507|  5.35k|                s6_8x16b = _mm_unpacklo_epi16(s23_8x16b, s24_8x16b);
 5508|       |
 5509|  5.35k|                s12_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5510|       |
 5511|  5.35k|                s8_8x16b = _mm_add_epi32(s11_8x16b, s12_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5512|       |
 5513|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5514|  5.35k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  5.35k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  5.35k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5515|       |
 5516|  5.35k|                s9_8x16b = _mm_packs_epi32(s6_8x16b, zero_8x16b);
 5517|       |
 5518|       |/* store 8 8-bit output values  */
 5519|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 5520|  5.35k|                _mm_storel_epi64((__m128i *)(pi2_dst), s9_8x16b);
 5521|       |
 5522|  5.35k|                s25_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + (3 * src_strd)));
 5523|       |
 5524|  5.35k|                s5_8x16b = _mm_unpacklo_epi16(s22_8x16b, s23_8x16b);
 5525|  5.35k|                s15_8x16b = _mm_madd_epi16(s5_8x16b, coeff0_1_8x16b);
 5526|       |
 5527|  5.35k|                s6_8x16b = _mm_unpacklo_epi16(s24_8x16b, s25_8x16b);
 5528|  5.35k|                s16_8x16b = _mm_madd_epi16(s6_8x16b, coeff2_3_8x16b);
 5529|       |
 5530|  5.35k|                s8_8x16b = _mm_add_epi32(s15_8x16b, s16_8x16b); /* (i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) */
 5531|       |
 5532|       |                /*(i2_tmp + OFFSET_14_MINUS_BIT_DEPTH) >> SHIFT_14_MINUS_BIT_DEPTH */
 5533|  5.35k|                s6_8x16b = _mm_srai_epi32(s8_8x16b,  SHIFT_14_MINUS_BIT_DEPTH);
  ------------------
  |  |   41|  5.35k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  5.35k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 5534|       |
 5535|  5.35k|                s9_8x16b = _mm_packs_epi32(s6_8x16b, zero_8x16b);
 5536|       |
 5537|       |/* store 8 8-bit output values  */
 5538|       |                /* pi2_dst[col] = (UWORD8)i2_tmp; */
 5539|  5.35k|                _mm_storel_epi64((__m128i *)(pi2_dst + dst_strd), s9_8x16b);
 5540|       |
 5541|  5.35k|                pi2_src += 4;   /* To pointer update */
 5542|  5.35k|                pi2_dst += 4;
 5543|  5.35k|            } /* inner for loop ends here(8-output values in single iteration) */
 5544|       |
 5545|  2.66k|            pi2_src = pi2_src_copy + 2 * src_strd; /* pointer update */
 5546|  2.66k|            pi2_dst = pi2_dst_copy + 2 * dst_strd; /* pointer update */
 5547|  2.66k|        }
 5548|    779|    }
 5549|       |
 5550|   177k|}

ihevc_intra_pred_ref_filtering_sse42:
  108|   202k|{
  109|   202k|    WORD32 filter_flag;
  110|   202k|    WORD32 i; /* Generic indexing variable */
  111|   202k|    WORD32 four_nt = 4 * nt;
  112|   202k|    UWORD8 au1_flt[(4 * MAX_CU_SIZE) + 1];
  113|   202k|    WORD32 bi_linear_int_flag = 0;
  114|   202k|    WORD32 abs_cond_left_flag = 0;
  115|   202k|    WORD32 abs_cond_top_flag = 0;
  116|   202k|    WORD32 dc_val = 1 << (BIT_DEPTH - 5);
  ------------------
  |  |   67|   202k|#define BIT_DEPTH 8
  ------------------
  117|   202k|    __m128i src_temp1, src_temp2, src_temp3, src_temp7;
  118|   202k|    __m128i src_temp4, src_temp5, src_temp6, src_temp8;
  119|       |
  120|       |    //WORD32 strong_intra_smoothing_enable_flag  = 1;
  121|       |
  122|       |
  123|       |
  124|   202k|    filter_flag = gau1_intra_pred_ref_filter[mode] & (1 << (CTZ(nt) - 2));
  125|   202k|    if(0 == filter_flag)
  ------------------
  |  Branch (125:8): [True: 136k, False: 66.4k]
  ------------------
  126|   136k|    {
  127|   136k|        if(pu1_src == pu1_dst)
  ------------------
  |  Branch (127:12): [True: 136k, False: 18.4E]
  ------------------
  128|   136k|        {
  129|   136k|            return;
  130|   136k|        }
  131|  18.4E|        else
  132|  18.4E|        {
  133|  18.4E|            if(nt == 4)
  ------------------
  |  Branch (133:16): [True: 0, False: 18.4E]
  ------------------
  134|      0|            {
  135|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  136|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  137|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  138|       |
  139|      0|            }
  140|       |
  141|  18.4E|            else if(nt == 8)
  ------------------
  |  Branch (141:21): [True: 0, False: 18.4E]
  ------------------
  142|      0|            {
  143|       |
  144|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  145|      0|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_src + 16));
  146|       |
  147|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  148|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  149|       |
  150|       |
  151|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  152|      0|            }
  153|  18.4E|            else if(nt == 16)
  ------------------
  |  Branch (153:21): [True: 0, False: 18.4E]
  ------------------
  154|      0|            {
  155|       |
  156|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  157|      0|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_src + 16));
  158|      0|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_src + 32));
  159|      0|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_src + 48));
  160|       |
  161|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  162|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  163|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  164|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  165|       |
  166|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  167|      0|            }
  168|  18.4E|            else if(nt == 32)
  ------------------
  |  Branch (168:21): [True: 0, False: 18.4E]
  ------------------
  169|      0|            {
  170|       |
  171|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  172|      0|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_src + 16));
  173|      0|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_src + 32));
  174|      0|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_src + 48));
  175|       |
  176|      0|                src_temp5 = _mm_loadu_si128((__m128i *)(pu1_src + 64));
  177|      0|                src_temp6 = _mm_loadu_si128((__m128i *)(pu1_src + 80));
  178|      0|                src_temp7 = _mm_loadu_si128((__m128i *)(pu1_src + 96));
  179|      0|                src_temp8 = _mm_loadu_si128((__m128i *)(pu1_src + 112));
  180|       |
  181|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  182|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  183|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  184|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  185|       |
  186|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 64), src_temp5);
  187|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 80), src_temp6);
  188|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 96), src_temp7);
  189|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 112), src_temp8);
  190|       |
  191|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  192|      0|            }
  193|       |
  194|  18.4E|        }
  195|   136k|    }
  196|       |
  197|  66.4k|    else
  198|  66.4k|    {
  199|       |        /* If strong intra smoothin is enabled and transform size is 32 */
  200|  66.4k|        if((1 == strong_intra_smoothing_enable_flag) && (32 == nt))
  ------------------
  |  Branch (200:12): [True: 5.55k, False: 60.9k]
  |  Branch (200:57): [True: 1.18k, False: 4.37k]
  ------------------
  201|  1.18k|        {
  202|       |            /* Strong Intra Filtering */
  203|  1.18k|            abs_cond_top_flag = (abs(pu1_src[2 * nt] + pu1_src[4 * nt]
  204|  1.18k|                                     - (2 * pu1_src[3 * nt]))) < dc_val;
  205|  1.18k|            abs_cond_left_flag = (abs(pu1_src[2 * nt] + pu1_src[0]
  206|  1.18k|                                      - (2 * pu1_src[nt]))) < dc_val;
  207|       |
  208|  1.18k|            bi_linear_int_flag = ((1 == abs_cond_left_flag)
  ------------------
  |  Branch (208:35): [True: 581, False: 604]
  ------------------
  209|  1.18k|                            && (1 == abs_cond_top_flag));
  ------------------
  |  Branch (209:32): [True: 385, False: 196]
  ------------------
  210|  1.18k|        }
  211|       |        /* Extremities Untouched*/
  212|  66.4k|        au1_flt[0] = pu1_src[0];
  213|  66.4k|        au1_flt[4 * nt] = pu1_src[4 * nt];
  214|       |
  215|       |        /* Strong filtering of reference samples */
  216|  66.4k|        if(1 == bi_linear_int_flag)
  ------------------
  |  Branch (216:12): [True: 385, False: 66.1k]
  ------------------
  217|    385|        {
  218|    385|            au1_flt[2 * nt] = pu1_src[2 * nt];
  219|       |
  220|  24.6k|            for(i = 1; i < (2 * nt); i++)
  ------------------
  |  Branch (220:24): [True: 24.2k, False: 385]
  ------------------
  221|  24.2k|                au1_flt[i] = (((2 * nt) - i) * pu1_src[0] + i * pu1_src[2 * nt] + 32) >> 6;
  222|       |
  223|  24.6k|            for(i = 1; i < (2 * nt); i++)
  ------------------
  |  Branch (223:24): [True: 24.2k, False: 385]
  ------------------
  224|  24.2k|                au1_flt[i + (2 * nt)] = (((2 * nt) - i) * pu1_src[2 * nt] + i * pu1_src[4 * nt] + 32) >> 6;
  225|    385|        }
  226|  66.1k|        else
  227|  66.1k|        {
  228|  66.1k|            __m128i const_value_8x16;
  229|       |
  230|  66.1k|            const_value_8x16 = _mm_set1_epi16(2);
  231|       |
  232|  66.1k|            au1_flt[0] = pu1_src[0];
  233|  66.1k|            au1_flt[4 * nt] = pu1_src[4 * nt];
  234|       |
  235|       |            /* Perform bilinear filtering of Reference Samples */
  236|   330k|            for(i = 0; i < (four_nt); i += 16)
  ------------------
  |  Branch (236:24): [True: 264k, False: 66.1k]
  ------------------
  237|   264k|            {
  238|   264k|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src + i));
  239|   264k|                src_temp2 = _mm_srli_si128(src_temp1, 1);
  240|   264k|                src_temp3 = _mm_srli_si128(src_temp2, 1);
  241|       |
  242|   264k|                src_temp1 =  _mm_cvtepu8_epi16(src_temp1);
  243|   264k|                src_temp2 =  _mm_cvtepu8_epi16(src_temp2);
  244|   264k|                src_temp3 =  _mm_cvtepu8_epi16(src_temp3);
  245|       |
  246|   264k|                src_temp2 = _mm_slli_epi16(src_temp2,  1);
  247|       |
  248|   264k|                src_temp1 = _mm_add_epi16(src_temp1, src_temp2);
  249|   264k|                src_temp1 = _mm_add_epi16(src_temp1, src_temp3);
  250|   264k|                src_temp1 = _mm_add_epi16(src_temp1, const_value_8x16);
  251|       |
  252|   264k|                src_temp1 = _mm_srai_epi16(src_temp1,  2);
  253|       |
  254|   264k|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_src + 8 + i));
  255|   264k|                src_temp5 = _mm_srli_si128(src_temp4, 1);
  256|   264k|                src_temp6 = _mm_srli_si128(src_temp5, 1);
  257|       |
  258|   264k|                src_temp4 =  _mm_cvtepu8_epi16(src_temp4);
  259|   264k|                src_temp5 =  _mm_cvtepu8_epi16(src_temp5);
  260|   264k|                src_temp6 =  _mm_cvtepu8_epi16(src_temp6);
  261|       |
  262|   264k|                src_temp5 = _mm_slli_epi16(src_temp5,  1);
  263|       |
  264|   264k|                src_temp4 = _mm_add_epi16(src_temp4, src_temp5);
  265|   264k|                src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  266|   264k|                src_temp4 = _mm_add_epi16(src_temp4, const_value_8x16);
  267|       |
  268|   264k|                src_temp4 = _mm_srai_epi16(src_temp4,  2);
  269|       |
  270|       |                /* converting 16 bit to 8 bit */
  271|   264k|                src_temp1 = _mm_packus_epi16(src_temp1, src_temp4);
  272|       |
  273|   264k|                _mm_storeu_si128((__m128i *)(au1_flt + 1 + i), src_temp1);
  274|   264k|            }
  275|  66.1k|            au1_flt[4 * nt] = pu1_src[4 * nt];
  276|  66.1k|        }
  277|       |
  278|  66.4k|        if(nt == 4)
  ------------------
  |  Branch (278:12): [True: 0, False: 66.4k]
  ------------------
  279|      0|        {
  280|      0|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  281|      0|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  282|      0|            pu1_dst[four_nt] = au1_flt[four_nt];
  283|      0|        }
  284|  66.4k|        else if(nt == 8)
  ------------------
  |  Branch (284:17): [True: 27.0k, False: 39.4k]
  ------------------
  285|  27.0k|        {
  286|       |
  287|  27.0k|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  288|  27.0k|            src_temp2 = _mm_loadu_si128((__m128i *)(au1_flt + 16));
  289|       |
  290|  27.0k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  291|  27.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  292|       |
  293|  27.0k|            pu1_dst[four_nt] = au1_flt[four_nt];
  294|  27.0k|        }
  295|  39.4k|        else if(nt == 16)
  ------------------
  |  Branch (295:17): [True: 26.7k, False: 12.6k]
  ------------------
  296|  26.7k|        {
  297|       |
  298|  26.7k|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  299|  26.7k|            src_temp2 = _mm_loadu_si128((__m128i *)(au1_flt + 16));
  300|  26.7k|            src_temp3 = _mm_loadu_si128((__m128i *)(au1_flt + 32));
  301|  26.7k|            src_temp4 = _mm_loadu_si128((__m128i *)(au1_flt + 48));
  302|       |
  303|  26.7k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  304|  26.7k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  305|  26.7k|            _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  306|  26.7k|            _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  307|       |
  308|  26.7k|            pu1_dst[four_nt] = au1_flt[four_nt];
  309|  26.7k|        }
  310|       |
  311|  12.6k|        else if(nt == 32)
  ------------------
  |  Branch (311:17): [True: 13.3k, False: 18.4E]
  ------------------
  312|  13.3k|        {
  313|       |
  314|  13.3k|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  315|  13.3k|            src_temp2 = _mm_loadu_si128((__m128i *)(au1_flt + 16));
  316|  13.3k|            src_temp3 = _mm_loadu_si128((__m128i *)(au1_flt + 32));
  317|  13.3k|            src_temp4 = _mm_loadu_si128((__m128i *)(au1_flt + 48));
  318|       |
  319|  13.3k|            src_temp5 = _mm_loadu_si128((__m128i *)(au1_flt + 64));
  320|  13.3k|            src_temp6 = _mm_loadu_si128((__m128i *)(au1_flt + 80));
  321|  13.3k|            src_temp7 = _mm_loadu_si128((__m128i *)(au1_flt + 96));
  322|  13.3k|            src_temp8 = _mm_loadu_si128((__m128i *)(au1_flt + 112));
  323|       |
  324|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  325|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  326|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  327|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  328|       |
  329|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 64), src_temp5);
  330|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 80), src_temp6);
  331|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 96), src_temp7);
  332|  13.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 112), src_temp8);
  333|       |
  334|  13.3k|            pu1_dst[four_nt] = au1_flt[four_nt];
  335|  13.3k|        }
  336|       |
  337|  66.4k|    }
  338|   202k|}
ihevc_intra_pred_luma_dc_sse42:
  385|  20.8k|{
  386|       |
  387|  20.8k|    WORD32 acc_dc;
  388|  20.8k|    WORD32 dc_val, two_dc_val, three_dc_val;
  389|  20.8k|    WORD32 row;
  390|  20.8k|    WORD32 log2nt = 5;
  391|  20.8k|    WORD32 two_nt, three_nt;
  392|  20.8k|    __m128i src_temp1, src_temp7, src_temp3, src_temp4, src_temp5, src_temp6;
  393|  20.8k|    __m128i src_temp8, src_temp9, src_temp10, src_temp2;
  394|  20.8k|    __m128i m_zero = _mm_set1_epi32(0);
  395|  20.8k|    __m128i sm = _mm_loadu_si128((__m128i *)&IHEVCE_SHUFFLEMASK5[0]);
  396|  20.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  20.8k|#define UNUSED(x) ((void)(x))
  ------------------
  397|  20.8k|    UNUSED(mode);
  ------------------
  |  |   38|  20.8k|#define UNUSED(x) ((void)(x))
  ------------------
  398|       |
  399|       |
  400|  20.8k|    switch(nt)
  401|  20.8k|    {
  402|  1.50k|        case 32:
  ------------------
  |  Branch (402:9): [True: 1.50k, False: 19.3k]
  ------------------
  403|  1.50k|            log2nt = 5;
  404|  1.50k|            break;
  405|  3.75k|        case 16:
  ------------------
  |  Branch (405:9): [True: 3.75k, False: 17.0k]
  ------------------
  406|  3.75k|            log2nt = 4;
  407|  3.75k|            break;
  408|  6.45k|        case 8:
  ------------------
  |  Branch (408:9): [True: 6.45k, False: 14.3k]
  ------------------
  409|  6.45k|            log2nt = 3;
  410|  6.45k|            break;
  411|  9.11k|        case 4:
  ------------------
  |  Branch (411:9): [True: 9.11k, False: 11.7k]
  ------------------
  412|  9.11k|            log2nt = 2;
  413|  9.11k|            break;
  414|      0|        default:
  ------------------
  |  Branch (414:9): [True: 0, False: 20.8k]
  ------------------
  415|      0|            break;
  416|  20.8k|    }
  417|  20.8k|    two_nt = 2 * nt;
  418|  20.8k|    three_nt = 3 * nt;
  419|       |
  420|  20.8k|    acc_dc = 0;
  421|       |    /* Calculate DC value for the transform block */
  422|       |
  423|       |
  424|       |
  425|  20.8k|    if(nt == 32)
  ------------------
  |  Branch (425:8): [True: 1.50k, False: 19.3k]
  ------------------
  426|  1.50k|    {
  427|  1.50k|        __m128i temp;
  428|  1.50k|        WORD32 itr_count;
  429|       |
  430|  1.50k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
  431|  1.50k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 16));
  432|  1.50k|        src_temp7 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 32));
  433|  1.50k|        src_temp8 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 48));
  434|       |
  435|  1.50k|        src_temp3 = _mm_sad_epu8(src_temp3, m_zero);
  436|  1.50k|        src_temp4 = _mm_sad_epu8(src_temp4, m_zero);
  437|  1.50k|        src_temp7 = _mm_sad_epu8(src_temp7, m_zero);
  438|  1.50k|        src_temp8 = _mm_sad_epu8(src_temp8, m_zero);
  439|       |
  440|  1.50k|        src_temp4 = _mm_add_epi16(src_temp3, src_temp4);
  441|  1.50k|        src_temp8 = _mm_add_epi16(src_temp7, src_temp8);
  442|  1.50k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp8);
  443|       |
  444|  1.50k|        src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
  445|  1.50k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  446|       |
  447|  1.50k|        acc_dc = _mm_cvtsi128_si32(src_temp4);
  448|       |
  449|  1.50k|        acc_dc += pu1_ref[three_nt];
  450|  1.50k|        acc_dc -= pu1_ref[two_nt];
  451|       |
  452|       |        /* computing acc_dc value */
  453|  1.50k|        dc_val = (acc_dc + nt) >> (log2nt + 1);
  454|       |
  455|  1.50k|        two_dc_val = 2 * dc_val;
  456|  1.50k|        three_dc_val = 3 * dc_val;
  457|       |
  458|  1.50k|        temp = _mm_set1_epi8(dc_val);
  459|       |
  460|  4.51k|        for(itr_count = 0; itr_count < 2; itr_count++)
  ------------------
  |  Branch (460:28): [True: 3.01k, False: 1.50k]
  ------------------
  461|  3.01k|        {
  462|       |            /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
  463|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((0) * dst_strd)), temp);
  464|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), temp);
  465|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), temp);
  466|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), temp);
  467|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), temp);
  468|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), temp);
  469|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), temp);
  470|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), temp);
  471|       |
  472|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), temp);
  473|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), temp);
  474|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), temp);
  475|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), temp);
  476|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), temp);
  477|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), temp);
  478|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), temp);
  479|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), temp);
  480|       |
  481|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((0) * dst_strd)), temp);
  482|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((1) * dst_strd)), temp);
  483|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((2) * dst_strd)), temp);
  484|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((3) * dst_strd)), temp);
  485|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((4) * dst_strd)), temp);
  486|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((5) * dst_strd)), temp);
  487|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((6) * dst_strd)), temp);
  488|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((7) * dst_strd)), temp);
  489|       |
  490|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((8) * dst_strd)), temp);
  491|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((9) * dst_strd)), temp);
  492|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((10) * dst_strd)), temp);
  493|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((11) * dst_strd)), temp);
  494|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((12) * dst_strd)), temp);
  495|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((13) * dst_strd)), temp);
  496|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((14) * dst_strd)), temp);
  497|  3.01k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((15) * dst_strd)), temp);
  498|       |
  499|  3.01k|            pu1_dst += 16 * dst_strd;
  500|  3.01k|        }
  501|  1.50k|    }
  502|       |
  503|  19.3k|    else
  504|       |
  505|  19.3k|    {
  506|  19.3k|        __m128i  zero_8x16b;
  507|  19.3k|        __m128i sm1 = _mm_loadu_si128((__m128i *)&IHEVCE_SHUFFLEMASK4[0]);
  508|       |
  509|       |        /* DC filtering for the first top row and first left column */
  510|       |
  511|  19.3k|        zero_8x16b = _mm_set1_epi16(0);
  512|       |
  513|  19.3k|        if(nt == 4) /* nt multiple of 4*/
  ------------------
  |  Branch (513:12): [True: 9.11k, False: 10.1k]
  ------------------
  514|  9.11k|        {
  515|  9.11k|            WORD32 temp1, temp2, temp3;
  516|       |
  517|  9.11k|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
  518|  9.11k|            src_temp2 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  519|       |
  520|  9.11k|            src_temp4 =  _mm_cvtepu8_epi16(src_temp3);
  521|  9.11k|            src_temp2 =  _mm_cvtepu8_epi16(src_temp2);
  522|       |
  523|  9.11k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  524|  9.11k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  525|  9.11k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  526|       |
  527|  9.11k|            acc_dc = _mm_cvtsi128_si32(src_temp4);
  528|  9.11k|            acc_dc += pu1_ref[three_nt];
  529|  9.11k|            acc_dc -= pu1_ref[two_nt];
  530|       |
  531|       |/* computing acc_dc value */
  532|       |
  533|  9.11k|            dc_val = (acc_dc + nt) >> (log2nt + 1);
  534|       |
  535|  9.11k|            three_dc_val = 3 * dc_val;
  536|       |
  537|       |            /* loding 8-bit 16 pixel */
  538|  9.11k|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
  539|  9.11k|            two_dc_val = 2 * dc_val;
  540|       |
  541|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
  542|  9.11k|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
  543|       |
  544|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2) >> 2 */
  545|  9.11k|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
  546|       |
  547|  9.11k|            src_temp2 = _mm_packus_epi16(src_temp2, zero_8x16b);
  548|       |
  549|  9.11k|            temp1 = _mm_cvtsi128_si32(src_temp2);
  550|       |
  551|  9.11k|            *(WORD32 *)(&pu1_dst[0]) = temp1;
  552|       |
  553|       |            /*  retore  first value*/
  554|  9.11k|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
  555|  9.11k|                            >> 2);
  556|       |
  557|  36.4k|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (557:26): [True: 27.3k, False: 9.11k]
  ------------------
  558|  27.3k|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
  559|  27.3k|                                >> 2;
  560|       |
  561|  9.11k|            src_temp2 = _mm_insert_epi8(src_temp2, dc_val, 0);
  562|       |
  563|  9.11k|            src_temp2 =  _mm_shuffle_epi8(src_temp2, sm1);
  564|  9.11k|            src_temp3 =  _mm_shuffle_epi8(src_temp2, sm1);
  565|  9.11k|            src_temp4 =  _mm_shuffle_epi8(src_temp2, sm1);
  566|       |
  567|  9.11k|            src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[(1 * dst_strd) + 0], 0);
  568|  9.11k|            src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[(2 * dst_strd) + 0], 0);
  569|  9.11k|            src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[(3 * dst_strd) + 0], 0);
  570|       |
  571|  9.11k|            temp1 = _mm_cvtsi128_si32(src_temp2);
  572|  9.11k|            temp2 = _mm_cvtsi128_si32(src_temp3);
  573|  9.11k|            temp3 = _mm_cvtsi128_si32(src_temp4);
  574|       |
  575|  9.11k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp1;
  576|  9.11k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp2;
  577|  9.11k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp3;
  578|       |
  579|  9.11k|        }
  580|  10.1k|        else if(nt == 8) /* if nt%8==0*/
  ------------------
  |  Branch (580:17): [True: 6.45k, False: 3.74k]
  ------------------
  581|  6.45k|        {
  582|       |
  583|  6.45k|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
  584|       |
  585|  6.45k|            src_temp4 = _mm_sad_epu8(src_temp3, m_zero);
  586|  6.45k|            src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
  587|  6.45k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  588|       |
  589|  6.45k|            acc_dc = _mm_cvtsi128_si32(src_temp4);
  590|       |
  591|  6.45k|            acc_dc += pu1_ref[three_nt];
  592|  6.45k|            acc_dc -= pu1_ref[two_nt];
  593|       |
  594|       |            /* computing acc_dc value */
  595|       |
  596|  6.45k|            dc_val = (acc_dc + nt) >> (log2nt + 1);
  597|       |
  598|  6.45k|            three_dc_val = 3 * dc_val;
  599|  6.45k|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
  600|  6.45k|            two_dc_val = 2 * dc_val;
  601|       |
  602|       |            /* loding 8-bit 16 pixel */
  603|  6.45k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  604|  6.45k|            src_temp2 =  _mm_cvtepu8_epi16(src_temp2);
  605|       |
  606|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
  607|  6.45k|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
  608|       |
  609|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2)>>2 */
  610|  6.45k|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
  611|  6.45k|            src_temp2 = _mm_packus_epi16(src_temp2, zero_8x16b);
  612|       |
  613|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_temp2);
  614|       |
  615|       |            /*  retore  first value*/
  616|  6.45k|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
  617|  6.45k|                            >> 2);
  618|       |
  619|  51.5k|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (619:26): [True: 45.1k, False: 6.45k]
  ------------------
  620|  45.1k|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
  621|  45.1k|                                >> 2;
  622|       |
  623|       |            /* Fill the remaining rows with DC value*/
  624|       |
  625|  6.45k|            src_temp1 = _mm_set1_epi8(dc_val);
  626|  6.45k|            src_temp2 = _mm_set1_epi8(dc_val);
  627|  6.45k|            src_temp3 = _mm_set1_epi8(dc_val);
  628|  6.45k|            src_temp4 = _mm_set1_epi8(dc_val);
  629|  6.45k|            src_temp5 = _mm_set1_epi8(dc_val);
  630|  6.45k|            src_temp6 = _mm_set1_epi8(dc_val);
  631|  6.45k|            src_temp7 = _mm_set1_epi8(dc_val);
  632|       |
  633|  6.45k|            src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((1) * dst_strd)], 0);
  634|  6.45k|            src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[((2) * dst_strd)], 0);
  635|  6.45k|            src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[((3) * dst_strd)], 0);
  636|  6.45k|            src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[((4) * dst_strd)], 0);
  637|  6.45k|            src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[((5) * dst_strd)], 0);
  638|  6.45k|            src_temp6 = _mm_insert_epi8(src_temp6, pu1_dst[((6) * dst_strd)], 0);
  639|  6.45k|            src_temp7 = _mm_insert_epi8(src_temp7, pu1_dst[((7) * dst_strd)], 0);
  640|       |
  641|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
  642|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
  643|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
  644|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
  645|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
  646|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
  647|  6.45k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
  648|       |
  649|  6.45k|        }
  650|  3.74k|        else if(nt == 16) /* if nt%8==0*/
  ------------------
  |  Branch (650:17): [True: 3.75k, False: 18.4E]
  ------------------
  651|  3.75k|        {
  652|       |
  653|  3.75k|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
  654|  3.75k|            src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 16));
  655|       |
  656|  3.75k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  657|  3.75k|            src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 8));
  658|       |
  659|  3.75k|            src_temp3 = _mm_sad_epu8(src_temp3, m_zero);
  660|  3.75k|            src_temp4 = _mm_sad_epu8(src_temp4, m_zero);
  661|       |
  662|  3.75k|            src_temp2 =  _mm_cvtepu8_epi16(src_temp2);
  663|  3.75k|            src_temp10 =  _mm_cvtepu8_epi16(src_temp10);
  664|       |
  665|  3.75k|            src_temp4 = _mm_add_epi16(src_temp3, src_temp4);
  666|  3.75k|            src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
  667|  3.75k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  668|       |
  669|  3.75k|            acc_dc = _mm_cvtsi128_si32(src_temp4);
  670|       |
  671|  3.75k|            acc_dc += pu1_ref[three_nt];
  672|  3.75k|            acc_dc -= pu1_ref[two_nt];
  673|       |
  674|       |            /* computing acc_dc value */
  675|       |
  676|  3.75k|            dc_val = (acc_dc + nt) >> (log2nt + 1);
  677|       |
  678|  3.75k|            three_dc_val = 3 * dc_val;
  679|  3.75k|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
  680|  3.75k|            two_dc_val = 2 * dc_val;
  681|       |
  682|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
  683|  3.75k|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
  684|  3.75k|            src_temp10 = _mm_add_epi16(src_temp10, src_temp1);
  685|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2)>>2 */
  686|  3.75k|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
  687|  3.75k|            src_temp10 = _mm_srli_epi16(src_temp10, 2);
  688|       |
  689|  3.75k|            src_temp2 = _mm_packus_epi16(src_temp2, src_temp10);
  690|       |
  691|  3.75k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp2);
  692|       |
  693|       |            /*  retore  first value*/
  694|  3.75k|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
  695|  3.75k|                            >> 2);
  696|       |
  697|  60.0k|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (697:26): [True: 56.2k, False: 3.75k]
  ------------------
  698|  56.2k|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
  699|  56.2k|                                >> 2;
  700|       |            /* Fill the remaining rows with DC value*/
  701|  3.75k|            src_temp1 =  _mm_set1_epi8(dc_val);
  702|  3.75k|            src_temp2 =  _mm_set1_epi8(dc_val);
  703|  3.75k|            src_temp3 =  _mm_set1_epi8(dc_val);
  704|  3.75k|            src_temp4 =  _mm_set1_epi8(dc_val);
  705|  3.75k|            src_temp5 =  _mm_set1_epi8(dc_val);
  706|  3.75k|            src_temp6 =  _mm_set1_epi8(dc_val);
  707|  3.75k|            src_temp7 =  _mm_set1_epi8(dc_val);
  708|       |
  709|  11.2k|            for(row = 1; row < nt; row += 8)
  ------------------
  |  Branch (709:26): [True: 7.50k, False: 3.75k]
  ------------------
  710|  7.50k|            {
  711|       |
  712|  7.50k|                src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((1) * dst_strd)], 0);
  713|  7.50k|                src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[((2) * dst_strd)], 0);
  714|  7.50k|                src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[((3) * dst_strd)], 0);
  715|  7.50k|                src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[((4) * dst_strd)], 0);
  716|  7.50k|                src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[((5) * dst_strd)], 0);
  717|  7.50k|                src_temp6 = _mm_insert_epi8(src_temp6, pu1_dst[((6) * dst_strd)], 0);
  718|  7.50k|                src_temp7 = _mm_insert_epi8(src_temp7, pu1_dst[((7) * dst_strd)], 0);
  719|       |
  720|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
  721|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
  722|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
  723|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
  724|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
  725|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
  726|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
  727|       |
  728|  7.50k|                src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((8) * dst_strd)], 0);
  729|  7.50k|                src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[((9) * dst_strd)], 0);
  730|  7.50k|                src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[((10) * dst_strd)], 0);
  731|  7.50k|                src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[((11) * dst_strd)], 0);
  732|  7.50k|                src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[((12) * dst_strd)], 0);
  733|  7.50k|                src_temp6 = _mm_insert_epi8(src_temp6, pu1_dst[((13) * dst_strd)], 0);
  734|  7.50k|                src_temp7 = _mm_insert_epi8(src_temp7, pu1_dst[((14) * dst_strd)], 0);
  735|       |
  736|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), src_temp1);
  737|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), src_temp2);
  738|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), src_temp3);
  739|       |
  740|  7.50k|                src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((15) * dst_strd)], 0);
  741|       |
  742|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), src_temp4);
  743|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), src_temp5);
  744|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), src_temp6);
  745|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), src_temp7);
  746|       |
  747|  7.50k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), src_temp1);
  748|       |
  749|  7.50k|            }
  750|       |
  751|  3.75k|        }
  752|  18.4E|        else if(nt == 32) /* if nt%8==0*/
  ------------------
  |  Branch (752:17): [True: 0, False: 18.4E]
  ------------------
  753|      0|        {
  754|       |
  755|      0|            __m128i src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16, src_temp17;
  756|       |
  757|      0|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
  758|      0|            src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 16));
  759|      0|            src_temp7 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 32));
  760|      0|            src_temp8 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 48));
  761|       |
  762|       |            /* loding 8-bit 16 pixel */
  763|      0|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  764|      0|            src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 8));
  765|      0|            src_temp9 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 16));
  766|      0|            src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 24));
  767|       |
  768|      0|            src_temp3 = _mm_sad_epu8(src_temp3, m_zero);
  769|      0|            src_temp4 = _mm_sad_epu8(src_temp4, m_zero);
  770|      0|            src_temp7 = _mm_sad_epu8(src_temp7, m_zero);
  771|      0|            src_temp8 = _mm_sad_epu8(src_temp8, m_zero);
  772|       |
  773|      0|            src_temp2 =  _mm_cvtepu8_epi16(src_temp2);
  774|      0|            src_temp6 =  _mm_cvtepu8_epi16(src_temp6);
  775|      0|            src_temp9 =  _mm_cvtepu8_epi16(src_temp9);
  776|      0|            src_temp10 =  _mm_cvtepu8_epi16(src_temp10);
  777|       |
  778|      0|            src_temp4 = _mm_add_epi16(src_temp3, src_temp4);
  779|      0|            src_temp8 = _mm_add_epi16(src_temp7, src_temp8);
  780|      0|            src_temp4 = _mm_add_epi16(src_temp4, src_temp8);
  781|       |
  782|      0|            src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
  783|      0|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
  784|       |
  785|      0|            acc_dc = _mm_cvtsi128_si32(src_temp4);
  786|       |
  787|      0|            acc_dc += pu1_ref[three_nt];
  788|      0|            acc_dc -= pu1_ref[two_nt];
  789|       |
  790|       |            /* computing acc_dc value */
  791|       |
  792|      0|            dc_val = (acc_dc + nt) >> (log2nt + 1);
  793|       |
  794|      0|            three_dc_val = 3 * dc_val;
  795|      0|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
  796|      0|            two_dc_val = 2 * dc_val;
  797|       |
  798|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
  799|      0|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
  800|      0|            src_temp2 = _mm_add_epi16(src_temp6, src_temp1);
  801|      0|            src_temp2 = _mm_add_epi16(src_temp9, src_temp1);
  802|      0|            src_temp2 = _mm_add_epi16(src_temp10, src_temp1);
  803|       |
  804|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2)>>2 */
  805|      0|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
  806|      0|            src_temp6 = _mm_srli_epi16(src_temp6, 2);
  807|      0|            src_temp9 = _mm_srli_epi16(src_temp9, 2);
  808|      0|            src_temp10 = _mm_srli_epi16(src_temp10, 2);
  809|       |
  810|      0|            src_temp2 = _mm_packus_epi16(src_temp2, src_temp6);
  811|      0|            src_temp10 = _mm_packus_epi16(src_temp9, src_temp10);
  812|       |
  813|      0|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp2);
  814|      0|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp10);
  815|       |
  816|       |            /*  retore  first value*/
  817|      0|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
  818|      0|                            >> 2);
  819|       |
  820|      0|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (820:26): [True: 0, False: 0]
  ------------------
  821|      0|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
  822|      0|                                >> 2;
  823|       |            /* Fill the remaining rows with DC value*/
  824|      0|            src_temp1 = _mm_insert_epi8(src_temp1, dc_val, 0);
  825|       |
  826|      0|            src_temp2 =  src_temp1;
  827|      0|            src_temp3 = src_temp1;
  828|      0|            src_temp4 =  src_temp1;
  829|      0|            src_temp5 =  src_temp1;
  830|      0|            src_temp6 =  src_temp1;
  831|      0|            src_temp7 =  src_temp1;
  832|       |
  833|      0|            src_temp12 = src_temp1;
  834|      0|            src_temp13 = src_temp1;
  835|      0|            src_temp14 = src_temp1;
  836|      0|            src_temp15 = src_temp1;
  837|      0|            src_temp16 = src_temp1;
  838|      0|            src_temp17 = src_temp1;
  839|      0|            src_temp11 = src_temp1;
  840|       |
  841|      0|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (841:26): [True: 0, False: 0]
  ------------------
  842|      0|            {
  843|      0|                src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((1) * dst_strd)], 0);
  844|      0|                src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[((2) * dst_strd)], 0);
  845|      0|                src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[((3) * dst_strd)], 0);
  846|      0|                src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[((4) * dst_strd)], 0);
  847|      0|                src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[((5) * dst_strd)], 0);
  848|      0|                src_temp6 = _mm_insert_epi8(src_temp6, pu1_dst[((6) * dst_strd)], 0);
  849|      0|                src_temp7 = _mm_insert_epi8(src_temp7, pu1_dst[((7) * dst_strd)], 0);
  850|       |
  851|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + (row * dst_strd)), src_temp1);
  852|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + (row * dst_strd) + 16), src_temp11);
  853|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp2);
  854|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd) + 16), src_temp12);
  855|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp3);
  856|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd) + 16), src_temp13);
  857|       |
  858|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp4);
  859|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd) + 16), src_temp14);
  860|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp5);
  861|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd) + 16), src_temp15);
  862|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp6);
  863|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd) + 16), src_temp16);
  864|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp7);
  865|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd) + 16), src_temp17);
  866|       |
  867|       |
  868|      0|            }
  869|       |
  870|      0|        }
  871|  19.3k|    }
  872|  20.8k|}
ihevc_intra_pred_luma_horz_sse42:
  917|  2.77k|{
  918|       |
  919|  2.77k|    WORD32 row;
  920|  2.77k|    WORD32 two_nt;
  921|  2.77k|    UNUSED(src_strd);
  ------------------
  |  |   38|  2.77k|#define UNUSED(x) ((void)(x))
  ------------------
  922|  2.77k|    UNUSED(mode);
  ------------------
  |  |   38|  2.77k|#define UNUSED(x) ((void)(x))
  ------------------
  923|       |
  924|  2.77k|    two_nt = 2 * nt;
  925|       |
  926|       |
  927|  2.77k|    if(nt == 32)
  ------------------
  |  Branch (927:8): [True: 172, False: 2.60k]
  ------------------
  928|    172|    {
  929|    172|        __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7, src_temp8;
  930|    172|        __m128i src_temp9, src_temp10, src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16;
  931|    172|        __m128i sm = _mm_loadu_si128((__m128i *)&IHEVCE_SHUFFLEMASK4[0]);
  932|       |
  933|    516|        for(row = 0; row < nt; row += 16)
  ------------------
  |  Branch (933:22): [True: 344, False: 172]
  ------------------
  934|    344|        {
  935|    344|            {
  936|    344|                src_temp1 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 1 - row - 15));
  937|       |
  938|    344|                src_temp2 =  _mm_srli_si128(src_temp1, 1);
  939|    344|                src_temp3 =  _mm_srli_si128(src_temp1, 2);
  940|    344|                src_temp4 =  _mm_srli_si128(src_temp1, 3);
  941|    344|                src_temp5 =  _mm_srli_si128(src_temp1, 4);
  942|    344|                src_temp6 =  _mm_srli_si128(src_temp1, 5);
  943|    344|                src_temp7 =  _mm_srli_si128(src_temp1, 6);
  944|    344|                src_temp8 =  _mm_srli_si128(src_temp1, 7);
  945|       |
  946|    344|                src_temp9 =  _mm_srli_si128(src_temp1, 8);
  947|    344|                src_temp10 =  _mm_srli_si128(src_temp1, 9);
  948|    344|                src_temp11 =  _mm_srli_si128(src_temp1, 10);
  949|    344|                src_temp12 =  _mm_srli_si128(src_temp1, 11);
  950|    344|                src_temp13 =  _mm_srli_si128(src_temp1, 12);
  951|    344|                src_temp14 =  _mm_srli_si128(src_temp1, 13);
  952|    344|                src_temp15 =  _mm_srli_si128(src_temp1, 14);
  953|    344|                src_temp16 =  _mm_srli_si128(src_temp1, 15);
  954|       |
  955|    344|                src_temp8 =  _mm_shuffle_epi8(src_temp8, sm);
  956|    344|                src_temp7 =  _mm_shuffle_epi8(src_temp7, sm);
  957|    344|                src_temp6 =  _mm_shuffle_epi8(src_temp6, sm);
  958|    344|                src_temp5 =  _mm_shuffle_epi8(src_temp5, sm);
  959|    344|                src_temp4 =  _mm_shuffle_epi8(src_temp4, sm);
  960|    344|                src_temp3 =  _mm_shuffle_epi8(src_temp3, sm);
  961|    344|                src_temp2 =  _mm_shuffle_epi8(src_temp2, sm);
  962|    344|                src_temp1 =  _mm_shuffle_epi8(src_temp1, sm);
  963|       |
  964|    344|                src_temp16 =  _mm_shuffle_epi8(src_temp16, sm);
  965|    344|                src_temp15 =  _mm_shuffle_epi8(src_temp15, sm);
  966|    344|                src_temp14 =  _mm_shuffle_epi8(src_temp14, sm);
  967|    344|                src_temp13 =  _mm_shuffle_epi8(src_temp13, sm);
  968|    344|                src_temp12 =  _mm_shuffle_epi8(src_temp12, sm);
  969|    344|                src_temp11 =  _mm_shuffle_epi8(src_temp11, sm);
  970|    344|                src_temp10 =  _mm_shuffle_epi8(src_temp10, sm);
  971|    344|                src_temp9 =  _mm_shuffle_epi8(src_temp9, sm);
  972|       |
  973|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), src_temp16);
  974|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp15);
  975|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp14);
  976|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp13);
  977|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp12);
  978|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp11);
  979|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp10);
  980|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 7) * dst_strd)), src_temp9);
  981|       |
  982|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 8) * dst_strd)), src_temp8);
  983|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 9) * dst_strd)), src_temp7);
  984|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 10) * dst_strd)), src_temp6);
  985|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 11) * dst_strd)), src_temp5);
  986|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 12) * dst_strd)), src_temp4);
  987|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 13) * dst_strd)), src_temp3);
  988|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 14) * dst_strd)), src_temp2);
  989|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 15) * dst_strd)), src_temp1);
  990|       |
  991|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 0) * dst_strd)), src_temp16);
  992|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 1) * dst_strd)), src_temp15);
  993|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 2) * dst_strd)), src_temp14);
  994|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 3) * dst_strd)), src_temp13);
  995|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 4) * dst_strd)), src_temp12);
  996|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 5) * dst_strd)), src_temp11);
  997|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 6) * dst_strd)), src_temp10);
  998|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 7) * dst_strd)), src_temp9);
  999|       |
 1000|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 8) * dst_strd)), src_temp8);
 1001|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 9) * dst_strd)), src_temp7);
 1002|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 10) * dst_strd)), src_temp6);
 1003|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 11) * dst_strd)), src_temp5);
 1004|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 12) * dst_strd)), src_temp4);
 1005|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 13) * dst_strd)), src_temp3);
 1006|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 14) * dst_strd)), src_temp2);
 1007|    344|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 15) * dst_strd)), src_temp1);
 1008|       |
 1009|    344|            }
 1010|       |
 1011|    344|        }
 1012|       |
 1013|    172|    }
 1014|  2.60k|    else
 1015|       |
 1016|  2.60k|    {
 1017|  2.60k|        __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6;
 1018|  2.60k|        __m128i src_temp10, zero_8x16b, src_temp7;
 1019|       |
 1020|       |        /* DC filtering for the first top row and first left column */
 1021|       |
 1022|  2.60k|        zero_8x16b = _mm_set1_epi16(0);
 1023|       |
 1024|       |        /*Filtering done for the 1st row */
 1025|       |
 1026|  2.60k|        src_temp2 =  _mm_set1_epi16(pu1_ref[two_nt - 1]);
 1027|  2.60k|        src_temp10 =  _mm_set1_epi16(pu1_ref[two_nt]);
 1028|       |
 1029|       |        /*  loding 8-bit 16 pixels */
 1030|  2.60k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1031|       |
 1032|  2.60k|        src_temp4 =  _mm_cvtepu8_epi16(src_temp4);
 1033|       |
 1034|       |        /*(pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt])*/
 1035|  2.60k|        src_temp3 = _mm_sub_epi16(src_temp4, src_temp10);
 1036|       |
 1037|       |        /* ((pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt]) >> 1)*/
 1038|  2.60k|        src_temp3 = _mm_srai_epi16(src_temp3, 1);
 1039|       |
 1040|       |        /* pu1_ref[two_nt - 1]+((pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt]) >> 1)*/
 1041|  2.60k|        src_temp3 = _mm_add_epi16(src_temp2, src_temp3);
 1042|       |
 1043|  2.60k|        if(nt == 4)
  ------------------
  |  Branch (1043:12): [True: 1.71k, False: 891]
  ------------------
 1044|  1.71k|        {
 1045|  1.71k|            int temp1, temp2, temp3;
 1046|  1.71k|            src_temp3 = _mm_packus_epi16(src_temp3, zero_8x16b);
 1047|  1.71k|            temp1 = _mm_cvtsi128_si32(src_temp3);
 1048|       |
 1049|  1.71k|            *(WORD32 *)(&pu1_dst[0]) = temp1;
 1050|       |
 1051|  1.71k|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 2]);
 1052|  1.71k|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 3]);
 1053|  1.71k|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 4]);
 1054|       |
 1055|  1.71k|            temp1 = _mm_cvtsi128_si32(src_temp2);
 1056|  1.71k|            temp2 = _mm_cvtsi128_si32(src_temp3);
 1057|  1.71k|            temp3 = _mm_cvtsi128_si32(src_temp4);
 1058|       |
 1059|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1060|  1.71k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp1;
 1061|  1.71k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp2;
 1062|  1.71k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp3;
 1063|       |
 1064|  1.71k|        }
 1065|    891|        else if(nt == 8)
  ------------------
  |  Branch (1065:17): [True: 462, False: 429]
  ------------------
 1066|    462|        {
 1067|    462|            src_temp10 = _mm_packus_epi16(src_temp3, zero_8x16b);
 1068|       |
 1069|       |
 1070|    462|            src_temp1 =  _mm_set1_epi8(pu1_ref[two_nt - 2]);
 1071|    462|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 3]);
 1072|    462|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 4]);
 1073|    462|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 5]);
 1074|    462|            src_temp5 =  _mm_set1_epi8(pu1_ref[two_nt - 6]);
 1075|    462|            src_temp6 =  _mm_set1_epi8(pu1_ref[two_nt - 7]);
 1076|    462|            src_temp7 =  _mm_set1_epi8(pu1_ref[two_nt - 8]);
 1077|       |
 1078|    462|            _mm_storel_epi64((__m128i *)(pu1_dst), src_temp10);
 1079|       |
 1080|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1081|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
 1082|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp2);
 1083|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp3);
 1084|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp4);
 1085|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp5);
 1086|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp6);
 1087|    462|            _mm_storel_epi64((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp7);
 1088|       |
 1089|    462|        }
 1090|    429|        else if(nt == 16)
  ------------------
  |  Branch (1090:17): [True: 429, False: 0]
  ------------------
 1091|    429|        {
 1092|    429|            src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 8));
 1093|    429|            src_temp4 =  _mm_cvtepu8_epi16(src_temp4);
 1094|       |
 1095|    429|            src_temp10 = _mm_sub_epi16(src_temp4, src_temp10);
 1096|    429|            src_temp10 = _mm_srai_epi16(src_temp10, 1);
 1097|    429|            src_temp10 = _mm_add_epi16(src_temp2, src_temp10);
 1098|       |
 1099|    429|            src_temp3 = _mm_packus_epi16(src_temp3, src_temp10);
 1100|    429|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp3);
 1101|       |
 1102|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1103|    429|            src_temp1 =  _mm_set1_epi8(pu1_ref[two_nt - 2]);
 1104|    429|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 3]);
 1105|    429|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 4]);
 1106|    429|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 5]);
 1107|    429|            src_temp5 =  _mm_set1_epi8(pu1_ref[two_nt - 6]);
 1108|    429|            src_temp6 =  _mm_set1_epi8(pu1_ref[two_nt - 7]);
 1109|    429|            src_temp7 =  _mm_set1_epi8(pu1_ref[two_nt - 8]);
 1110|    429|            src_temp10 =  _mm_set1_epi8(pu1_ref[two_nt - 9]);
 1111|       |
 1112|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
 1113|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
 1114|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
 1115|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
 1116|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
 1117|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
 1118|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
 1119|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), src_temp10);
 1120|       |
 1121|    429|            src_temp1 =  _mm_set1_epi8(pu1_ref[two_nt - 10]);
 1122|    429|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 11]);
 1123|    429|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 12]);
 1124|    429|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 13]);
 1125|    429|            src_temp5 =  _mm_set1_epi8(pu1_ref[two_nt - 14]);
 1126|    429|            src_temp6 =  _mm_set1_epi8(pu1_ref[two_nt - 15]);
 1127|    429|            src_temp7 =  _mm_set1_epi8(pu1_ref[two_nt - 16]);
 1128|       |
 1129|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), src_temp1);
 1130|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), src_temp2);
 1131|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), src_temp3);
 1132|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), src_temp4);
 1133|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), src_temp5);
 1134|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), src_temp6);
 1135|    429|            _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), src_temp7);
 1136|       |
 1137|    429|        }
 1138|  2.60k|    }
 1139|  2.77k|}
ihevc_intra_pred_luma_ver_sse42:
 1185|  20.5k|{
 1186|  20.5k|    WORD32 row;
 1187|  20.5k|    WORD16 s2_predpixel;
 1188|  20.5k|    WORD32 two_nt = 2 * nt;
 1189|  20.5k|    __m128i src_temp0, src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7;
 1190|       |
 1191|  20.5k|    UNUSED(src_strd);
  ------------------
  |  |   38|  20.5k|#define UNUSED(x) ((void)(x))
  ------------------
 1192|  20.5k|    UNUSED(mode);
  ------------------
  |  |   38|  20.5k|#define UNUSED(x) ((void)(x))
  ------------------
 1193|       |
 1194|  20.5k|    if(nt == 32)
  ------------------
  |  Branch (1194:8): [True: 1.84k, False: 18.6k]
  ------------------
 1195|  1.84k|    {
 1196|  1.84k|        __m128i temp1, temp2;
 1197|  1.84k|        WORD32 itr_count;
 1198|       |
 1199|  1.84k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1200|  1.84k|        temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 16));
 1201|       |
 1202|  5.53k|        for(itr_count = 0; itr_count < 2; itr_count++)
  ------------------
  |  Branch (1202:28): [True: 3.69k, False: 1.84k]
  ------------------
 1203|  3.69k|        {
 1204|       |            /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
 1205|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((0) * dst_strd)), temp1);
 1206|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), temp1);
 1207|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), temp1);
 1208|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), temp1);
 1209|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), temp1);
 1210|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), temp1);
 1211|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), temp1);
 1212|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), temp1);
 1213|       |
 1214|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((0) * dst_strd)), temp2);
 1215|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((1) * dst_strd)), temp2);
 1216|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((2) * dst_strd)), temp2);
 1217|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((3) * dst_strd)), temp2);
 1218|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((4) * dst_strd)), temp2);
 1219|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((5) * dst_strd)), temp2);
 1220|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((6) * dst_strd)), temp2);
 1221|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((7) * dst_strd)), temp2);
 1222|       |
 1223|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), temp1);
 1224|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), temp1);
 1225|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), temp1);
 1226|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), temp1);
 1227|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), temp1);
 1228|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), temp1);
 1229|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), temp1);
 1230|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), temp1);
 1231|       |
 1232|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((8) * dst_strd)), temp2);
 1233|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((9) * dst_strd)), temp2);
 1234|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((10) * dst_strd)), temp2);
 1235|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((11) * dst_strd)), temp2);
 1236|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((12) * dst_strd)), temp2);
 1237|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((13) * dst_strd)), temp2);
 1238|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((14) * dst_strd)), temp2);
 1239|  3.69k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((15) * dst_strd)), temp2);
 1240|       |
 1241|  3.69k|            pu1_dst += 16 * dst_strd;
 1242|  3.69k|        }
 1243|  1.84k|    }
 1244|       |
 1245|  18.6k|    else
 1246|       |
 1247|  18.6k|    {
 1248|       |        /*Filtering done for the 1st column */
 1249|   167k|        for(row = nt - 1; row >= 0; row--)
  ------------------
  |  Branch (1249:27): [True: 148k, False: 18.6k]
  ------------------
 1250|   148k|        {
 1251|   148k|            s2_predpixel = pu1_ref[two_nt + 1]
 1252|   148k|                            + ((pu1_ref[two_nt - 1 - row] - pu1_ref[two_nt]) >> 1);
 1253|   148k|            pu1_dst[row * dst_strd] = CLIP_U8(s2_predpixel);
  ------------------
  |  |   40|   148k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   148k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3.45k, False: 144k]
  |  |  |  |  |  Branch (40:53): [True: 3.20k, False: 141k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1254|   148k|        }
 1255|       |
 1256|       |        /* Replication to next columns*/
 1257|       |
 1258|  18.6k|        if(nt == 4)
  ------------------
  |  Branch (1258:12): [True: 8.02k, False: 10.6k]
  ------------------
 1259|  8.02k|        {
 1260|  8.02k|            int temp1, temp2, temp3, temp4;
 1261|       |
 1262|  8.02k|            src_temp2 =   _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1263|  8.02k|            src_temp3 =  src_temp2;
 1264|  8.02k|            src_temp4 =  src_temp2;
 1265|  8.02k|            src_temp5 =  src_temp2;
 1266|       |
 1267|  8.02k|            src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[(0 * dst_strd)], 0);
 1268|  8.02k|            src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[(1 * dst_strd)], 0);
 1269|  8.02k|            src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[(2 * dst_strd)], 0);
 1270|  8.02k|            src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[(3 * dst_strd)], 0);
 1271|       |
 1272|  8.02k|            temp1 = _mm_cvtsi128_si32(src_temp2);
 1273|  8.02k|            temp2 = _mm_cvtsi128_si32(src_temp3);
 1274|  8.02k|            temp3 = _mm_cvtsi128_si32(src_temp4);
 1275|  8.02k|            temp4 = _mm_cvtsi128_si32(src_temp5);
 1276|       |
 1277|       |            /* loding 4-bit 8 pixels values */
 1278|  8.02k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp1;
 1279|  8.02k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp2;
 1280|  8.02k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp3;
 1281|  8.02k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp4;
 1282|       |
 1283|  8.02k|        }
 1284|  10.6k|        else if(nt == 8)
  ------------------
  |  Branch (1284:17): [True: 6.81k, False: 3.86k]
  ------------------
 1285|  6.81k|        {
 1286|       |
 1287|  6.81k|            src_temp0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1288|  6.81k|            src_temp1 = src_temp0;
 1289|  6.81k|            src_temp2 = src_temp0;
 1290|  6.81k|            src_temp3 = src_temp0;
 1291|  6.81k|            src_temp4 = src_temp0;
 1292|  6.81k|            src_temp5 = src_temp0;
 1293|  6.81k|            src_temp6 = src_temp0;
 1294|  6.81k|            src_temp7 = src_temp0;
 1295|       |
 1296|  6.81k|            src_temp0 = _mm_insert_epi8(src_temp0, pu1_dst[((0) * dst_strd)], 0);
 1297|  6.81k|            src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((1) * dst_strd)], 0);
 1298|  6.81k|            src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[((2) * dst_strd)], 0);
 1299|  6.81k|            src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[((3) * dst_strd)], 0);
 1300|  6.81k|            src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[((4) * dst_strd)], 0);
 1301|  6.81k|            src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[((5) * dst_strd)], 0);
 1302|  6.81k|            src_temp6 = _mm_insert_epi8(src_temp6, pu1_dst[((6) * dst_strd)], 0);
 1303|  6.81k|            src_temp7 = _mm_insert_epi8(src_temp7, pu1_dst[((7) * dst_strd)], 0);
 1304|       |
 1305|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((0) * dst_strd)), src_temp0);
 1306|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
 1307|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
 1308|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
 1309|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
 1310|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
 1311|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
 1312|  6.81k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
 1313|       |
 1314|       |
 1315|  6.81k|        }
 1316|  3.86k|        else if(nt == 16)
  ------------------
  |  Branch (1316:17): [True: 3.87k, False: 18.4E]
  ------------------
 1317|  3.87k|        {
 1318|  11.6k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (1318:26): [True: 7.73k, False: 3.87k]
  ------------------
 1319|  7.73k|            {
 1320|       |
 1321|  7.73k|                src_temp0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1322|  7.73k|                src_temp1 = src_temp0;
 1323|  7.73k|                src_temp2 = src_temp0;
 1324|  7.73k|                src_temp3 = src_temp0;
 1325|  7.73k|                src_temp4 = src_temp0;
 1326|  7.73k|                src_temp5 = src_temp0;
 1327|  7.73k|                src_temp6 = src_temp0;
 1328|  7.73k|                src_temp7 = src_temp0;
 1329|       |
 1330|  7.73k|                src_temp0 = _mm_insert_epi8(src_temp0, pu1_dst[((row + 0) * dst_strd)], 0);
 1331|  7.73k|                src_temp1 = _mm_insert_epi8(src_temp1, pu1_dst[((row + 1) * dst_strd)], 0);
 1332|  7.73k|                src_temp2 = _mm_insert_epi8(src_temp2, pu1_dst[((row + 2) * dst_strd)], 0);
 1333|  7.73k|                src_temp3 = _mm_insert_epi8(src_temp3, pu1_dst[((row + 3) * dst_strd)], 0);
 1334|  7.73k|                src_temp4 = _mm_insert_epi8(src_temp4, pu1_dst[((row + 4) * dst_strd)], 0);
 1335|  7.73k|                src_temp5 = _mm_insert_epi8(src_temp5, pu1_dst[((row + 5) * dst_strd)], 0);
 1336|  7.73k|                src_temp6 = _mm_insert_epi8(src_temp6, pu1_dst[((row + 6) * dst_strd)], 0);
 1337|  7.73k|                src_temp7 = _mm_insert_epi8(src_temp7, pu1_dst[((row + 7) * dst_strd)], 0);
 1338|       |
 1339|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), src_temp0);
 1340|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp1);
 1341|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp2);
 1342|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp3);
 1343|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp4);
 1344|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp5);
 1345|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp6);
 1346|  7.73k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 7) * dst_strd)), src_temp7);
 1347|       |
 1348|  7.73k|            }
 1349|       |
 1350|  3.87k|        }
 1351|       |
 1352|       |
 1353|  18.6k|    }
 1354|  20.5k|}
ihevc_intra_pred_luma_mode_3_to_9_sse42:
 1401|  17.6k|{
 1402|  17.6k|    WORD32 row, col;
 1403|  17.6k|    WORD32 two_nt = 2 * nt;
 1404|  17.6k|    WORD32 intra_pred_ang;
 1405|       |
 1406|       |
 1407|  17.6k|    __m128i const_temp_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
 1408|  17.6k|    __m128i fract_4x32b, intra_pred_ang_4x32b;
 1409|  17.6k|    __m128i row_4x32b, two_nt_4x32b, ref_main_idx_4x32b, res_temp5_4x32b, sm3;
 1410|  17.6k|    UNUSED(src_strd);
  ------------------
  |  |   38|  17.6k|#define UNUSED(x) ((void)(x))
  ------------------
 1411|       |
 1412|       |
 1413|       |    /* Intra Pred Angle according to the mode */
 1414|  17.6k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1415|       |
 1416|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1417|       |    /* samples dependent on distance to obtain destination sample */
 1418|       |
 1419|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1420|       |    /* samples dependent on distance to obtain destination sample */
 1421|       |
 1422|  17.6k|    const_temp_4x32b  = _mm_set1_epi16(16);
 1423|  17.6k|    const_temp2_4x32b = _mm_set1_epi32(31);
 1424|  17.6k|    const_temp3_4x32b = _mm_set1_epi32(32);
 1425|  17.6k|    const_temp4_4x32b = _mm_set1_epi32(4);
 1426|       |
 1427|  17.6k|    two_nt_4x32b = _mm_set1_epi32(two_nt - nt);
 1428|       |
 1429|       |
 1430|  17.6k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 1431|       |
 1432|       |    /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 1433|  17.6k|    intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 1434|       |
 1435|  17.6k|    row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 1436|       |
 1437|  17.6k|    if(nt == 4)
  ------------------
  |  Branch (1437:8): [True: 11.4k, False: 6.20k]
  ------------------
 1438|  11.4k|    {
 1439|       |
 1440|  11.4k|        WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 1441|  11.4k|        int temp11, temp21, temp31, temp41;
 1442|       |        // WORD8  ai1_fract_temp_val[16], ai1_row_temp_val[16];
 1443|       |
 1444|  11.4k|        __m128i fract1_8x16b, fract2_8x16b;
 1445|  11.4k|        __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1446|       |
 1447|  11.4k|        __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1448|  11.4k|        __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b; //, src_temp8_8x16b;
 1449|  11.4k|        __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 1450|       |
 1451|       |        /* pos = ((row + 1) * intra_pred_ang); */
 1452|  11.4k|        res_temp5_4x32b  = _mm_mullo_epi32(row_4x32b, intra_pred_ang_4x32b);
 1453|       |
 1454|       |        /* idx = pos >> 5; */
 1455|  11.4k|        fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1456|       |
 1457|       |        /* fract = pos & (31); */
 1458|  11.4k|        ref_main_idx_4x32b = _mm_sub_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 1459|       |
 1460|       |        /*(32 - fract) */
 1461|  11.4k|        row_4x32b = _mm_sub_epi32(const_temp3_4x32b, fract_4x32b);
 1462|       |
 1463|  11.4k|        fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 1464|  11.4k|        fract2_8x16b = _mm_slli_epi16(row_4x32b, 8);
 1465|       |
 1466|  11.4k|        fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 1467|  11.4k|        row_4x32b = _mm_or_si128(row_4x32b, fract2_8x16b); /*(32 - fract) */
 1468|       |
 1469|  11.4k|        fract2_8x16b = _mm_unpackhi_epi8(row_4x32b, fract_4x32b);
 1470|  11.4k|        fract1_8x16b = _mm_unpacklo_epi8(row_4x32b, fract_4x32b);
 1471|       |
 1472|  11.4k|        temp1_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 1473|  11.4k|        temp2_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 1474|  11.4k|        temp3_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 1475|  11.4k|        temp4_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 1476|       |
 1477|  11.4k|        ref_main_temp0 = _mm_srli_si128(ref_main_idx_4x32b, 4);  /* next 32 bit values */
 1478|  11.4k|        ref_main_temp1 = _mm_srli_si128(ref_main_idx_4x32b, 8);  /* next 32 bit values */
 1479|  11.4k|        ref_main_temp2 = _mm_srli_si128(ref_main_idx_4x32b, 12); /* next 32 bit values */
 1480|  11.4k|        ref_main_idx1  = _mm_cvtsi128_si32(ref_main_idx_4x32b);    /* col=0*/
 1481|  11.4k|        ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* col=1*/
 1482|  11.4k|        ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* col=2*/
 1483|  11.4k|        ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* col=3*/
 1484|       |
 1485|       |        /* loding 8-bit 16 pixels */
 1486|  11.4k|        src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1 - 1)); /* col=0*/
 1487|  11.4k|        src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx2 - 1)); /* col=1*/
 1488|  11.4k|        src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx3 - 1)); /* col=2*/
 1489|  11.4k|        src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx4 - 1)); /* col=3*/
 1490|       |
 1491|  11.4k|        src_temp1_8x16b =  _mm_shuffle_epi8(src_temp1_8x16b, sm3); /* col=0*/
 1492|  11.4k|        src_temp2_8x16b =  _mm_shuffle_epi8(src_temp2_8x16b, sm3); /* col=1*/
 1493|  11.4k|        src_temp3_8x16b =  _mm_shuffle_epi8(src_temp3_8x16b, sm3); /* col=2*/
 1494|  11.4k|        src_temp4_8x16b =  _mm_shuffle_epi8(src_temp4_8x16b, sm3); /* col=3*/
 1495|       |
 1496|       |        /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1497|  11.4k|        src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1498|  11.4k|        src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1499|  11.4k|        src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1500|  11.4k|        src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1501|       |
 1502|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1503|  11.4k|        src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1504|  11.4k|        src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1505|  11.4k|        src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1506|  11.4k|        src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1507|       |
 1508|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1509|  11.4k|        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1510|  11.4k|        src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1511|  11.4k|        src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1512|  11.4k|        src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1513|       |
 1514|       |        /* converting 16 bit to 8 bit */
 1515|  11.4k|        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 1516|  11.4k|        src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 1517|       |
 1518|       |
 1519|  11.4k|        src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 1520|  11.4k|        src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 1521|       |
 1522|  11.4k|        src_temp3_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1523|  11.4k|        src_temp2_8x16b = _mm_srli_si128(src_temp3_8x16b, 4);
 1524|  11.4k|        src_temp1_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 1525|  11.4k|        src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 12);
 1526|       |
 1527|  11.4k|        temp11 = _mm_cvtsi128_si32(src_temp7_8x16b);
 1528|  11.4k|        temp21 = _mm_cvtsi128_si32(src_temp1_8x16b);
 1529|  11.4k|        temp31 = _mm_cvtsi128_si32(src_temp2_8x16b);
 1530|  11.4k|        temp41 = _mm_cvtsi128_si32(src_temp3_8x16b);
 1531|       |
 1532|       |        /* loding 4-bit 8 pixels values */
 1533|  11.4k|        *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 1534|  11.4k|        *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 1535|  11.4k|        *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 1536|  11.4k|        *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 1537|       |
 1538|  11.4k|    }
 1539|       |
 1540|  6.20k|    else if(nt == 16 || nt == 32)
  ------------------
  |  Branch (1540:13): [True: 1.94k, False: 4.26k]
  |  Branch (1540:25): [True: 1.08k, False: 3.17k]
  ------------------
 1541|  3.03k|    {
 1542|  3.03k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 1543|  3.03k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 1544|  3.03k|        const_temp2_4x32b = _mm_set1_epi16(31);
 1545|  3.03k|        const_temp4_4x32b = _mm_set1_epi16(8);
 1546|  3.03k|        const_temp3_4x32b = _mm_set1_epi16(32);
 1547|  3.03k|        two_nt_4x32b = _mm_set1_epi16(two_nt);
 1548|       |
 1549|  11.2k|        for(col = 0; col < nt; col += 8)
  ------------------
  |  Branch (1549:22): [True: 8.22k, False: 3.03k]
  ------------------
 1550|  8.22k|        {
 1551|  8.22k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 1552|  8.22k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 1553|       |            //WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 1554|       |
 1555|  8.22k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 1556|       |
 1557|  8.22k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1558|  8.22k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 1559|       |
 1560|       |            /* pos = ((row + 1) * intra_pred_ang); */
 1561|  8.22k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 1562|       |
 1563|       |            /* idx = pos >> 5; */
 1564|  8.22k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1565|       |
 1566|       |            /*(32 - fract) */
 1567|  8.22k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 1568|       |
 1569|  8.22k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 1570|  8.22k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 1571|       |
 1572|  8.22k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 1573|  8.22k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 1574|       |
 1575|       |
 1576|  8.22k|            fract8_8x16b = _mm_unpackhi_epi8(fract2_8x16b, fract_4x32b);
 1577|  8.22k|            fract_4x32b = _mm_unpacklo_epi8(fract2_8x16b, fract_4x32b);
 1578|       |
 1579|  8.22k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 1580|  8.22k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 1581|  8.22k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 1582|  8.22k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 1583|       |
 1584|  8.22k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 1585|  8.22k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 1586|  8.22k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 1587|  8.22k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 1588|       |
 1589|       |            /* fract = pos & (31); */
 1590|  8.22k|            ref_main_idx_4x32b = _mm_sub_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 1591|       |
 1592|  8.22k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 1593|       |
 1594|  8.22k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 1595|  8.22k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 1596|  8.22k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 1597|  8.22k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 1598|       |
 1599|  8.22k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 1600|  8.22k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 1601|  8.22k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 1602|  8.22k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 1603|       |
 1604|  33.2k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (1604:26): [True: 25.0k, False: 8.22k]
  ------------------
 1605|  25.0k|            {
 1606|  25.0k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1607|  25.0k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1608|       |
 1609|       |
 1610|  25.0k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 1611|  25.0k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 1612|       |
 1613|       |                /* loding 8-bit 16 pixels */
 1614|  25.0k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx1 - 1 - (8 + row))); /* col=0*/
 1615|  25.0k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx2 - 1 - (8 + row))); /* col=1*/
 1616|  25.0k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx3 - 1 - (8 + row))); /* col=2*/
 1617|  25.0k|                src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx4 - 1 - (8 + row))); /* col=3*/
 1618|       |
 1619|       |                /* loding 8-bit 16 pixels */
 1620|  25.0k|                src_temp11_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx5 - 1 - (8 + row))); /* col=5*/
 1621|  25.0k|                src_temp12_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx6 - 1 - (8 + row))); /* col=6*/
 1622|  25.0k|                src_temp13_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx7 - 1 - (8 + row))); /* col=7*/
 1623|  25.0k|                src_temp14_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx8 - 1 - (8 + row))); /* col=8*/
 1624|       |
 1625|  25.0k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp1_8x16b, sm3); /* col=0*/
 1626|  25.0k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp2_8x16b, sm3); /* col=1*/
 1627|  25.0k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp3_8x16b, sm3); /* col=2*/
 1628|  25.0k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp4_8x16b, sm3); /* col=3*/
 1629|       |
 1630|  25.0k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp11_8x16b, sm3); /* col=0*/
 1631|  25.0k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp12_8x16b, sm3); /* col=1*/
 1632|  25.0k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp13_8x16b, sm3); /* col=2*/
 1633|  25.0k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp14_8x16b, sm3); /* col=3*/
 1634|       |
 1635|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1636|  25.0k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1637|  25.0k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1638|  25.0k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1639|  25.0k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1640|       |
 1641|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1642|  25.0k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 1643|  25.0k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 1644|  25.0k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 1645|  25.0k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 1646|       |
 1647|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1648|  25.0k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1649|  25.0k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1650|  25.0k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1651|  25.0k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1652|       |
 1653|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1654|  25.0k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1655|  25.0k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1656|  25.0k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1657|  25.0k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1658|       |
 1659|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1660|  25.0k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 1661|  25.0k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 1662|  25.0k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 1663|  25.0k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 1664|       |
 1665|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1666|  25.0k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 1667|  25.0k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 1668|  25.0k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 1669|  25.0k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 1670|       |
 1671|       |                /* converting 16 bit to 8 bit */
 1672|  25.0k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 1673|  25.0k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 1674|       |
 1675|       |                /* converting 16 bit to 8 bit */
 1676|  25.0k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 1677|  25.0k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 1678|       |
 1679|  25.0k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 1680|  25.0k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 1681|       |
 1682|  25.0k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 1683|  25.0k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 1684|       |
 1685|  25.0k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1686|  25.0k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1687|       |
 1688|  25.0k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 1689|  25.0k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 1690|       |
 1691|  25.0k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 1692|  25.0k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 1693|       |
 1694|  25.0k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 1695|  25.0k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 1696|       |
 1697|  25.0k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 1698|  25.0k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 1699|       |
 1700|  25.0k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 1701|  25.0k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 1702|       |
 1703|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 7))), src_temp1_8x16b);          /* row=7*/
 1704|       |
 1705|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 6))), src_temp5_8x16b);       /* row=6*/
 1706|       |
 1707|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 5))), src_temp2_8x16b);       /* row=5*/
 1708|       |
 1709|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 4))), src_temp6_8x16b);       /* row=4*/
 1710|       |
 1711|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp3_8x16b);       /* row=3*/
 1712|       |
 1713|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp7_8x16b);       /* row=2*/
 1714|       |
 1715|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp4_8x16b);       /* row=1*/
 1716|       |
 1717|  25.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 0))), src_temp8_8x16b);       /* row=0*/
 1718|       |
 1719|  25.0k|            }
 1720|  8.22k|        }
 1721|  3.03k|    }
 1722|  3.17k|    else
 1723|  3.17k|    {
 1724|  3.17k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 1725|  3.17k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 1726|  3.17k|        const_temp2_4x32b = _mm_set1_epi16(31);
 1727|  3.17k|        const_temp4_4x32b = _mm_set1_epi16(8);
 1728|  3.17k|        const_temp3_4x32b = _mm_set1_epi16(32);
 1729|  3.17k|        two_nt_4x32b = _mm_set1_epi16(two_nt - nt);
 1730|  3.17k|        {
 1731|  3.17k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 1732|  3.17k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 1733|       |
 1734|  3.17k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 1735|       |
 1736|  3.17k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1737|  3.17k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 1738|       |
 1739|       |            /* pos = ((row + 1) * intra_pred_ang); */
 1740|  3.17k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 1741|       |
 1742|       |            /* idx = pos >> 5; */
 1743|  3.17k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 1744|       |
 1745|       |            /* fract = pos & (31); */
 1746|  3.17k|            ref_main_idx_4x32b = _mm_sub_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 1747|       |
 1748|       |            /*(32 - fract) */
 1749|  3.17k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 1750|       |
 1751|  3.17k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 1752|  3.17k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 1753|       |
 1754|  3.17k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 1755|  3.17k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 1756|       |
 1757|       |
 1758|  3.17k|            fract8_8x16b = _mm_unpackhi_epi8(fract2_8x16b, fract_4x32b);
 1759|  3.17k|            fract_4x32b = _mm_unpacklo_epi8(fract2_8x16b, fract_4x32b);
 1760|       |
 1761|  3.17k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 1762|  3.17k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 1763|  3.17k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 1764|  3.17k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 1765|       |
 1766|  3.17k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 1767|  3.17k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 1768|  3.17k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 1769|  3.17k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 1770|       |
 1771|  3.17k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 1772|  3.17k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 1773|  3.17k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 1774|  3.17k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 1775|       |
 1776|  3.17k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 1777|  3.17k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 1778|  3.17k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 1779|  3.17k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 1780|       |
 1781|  3.17k|            {
 1782|  3.17k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1783|  3.17k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1784|       |
 1785|  3.17k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 1786|  3.17k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 1787|       |
 1788|       |                /* loding 8-bit 16 pixels */
 1789|  3.17k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx1 - 1)); /* col=0*/
 1790|  3.17k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx2 - 1)); /* col=1*/
 1791|  3.17k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx3 - 1)); /* col=2*/
 1792|  3.17k|                src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx4 - 1)); /* col=3*/
 1793|       |
 1794|       |                /* loding 8-bit 16 pixels */
 1795|  3.17k|                src_temp11_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx5 - 1)); /* col=5*/
 1796|  3.17k|                src_temp12_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx6 - 1)); /* col=6*/
 1797|  3.17k|                src_temp13_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx7 - 1)); /* col=7*/
 1798|  3.17k|                src_temp14_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx8 - 1)); /* col=8*/
 1799|       |
 1800|  3.17k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp1_8x16b, sm3); /* col=0*/
 1801|  3.17k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp2_8x16b, sm3); /* col=1*/
 1802|  3.17k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp3_8x16b, sm3); /* col=2*/
 1803|  3.17k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp4_8x16b, sm3); /* col=3*/
 1804|       |
 1805|  3.17k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp11_8x16b, sm3); /* col=0*/
 1806|  3.17k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp12_8x16b, sm3); /* col=1*/
 1807|  3.17k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp13_8x16b, sm3); /* col=2*/
 1808|  3.17k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp14_8x16b, sm3); /* col=3*/
 1809|       |
 1810|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1811|  3.17k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 1812|  3.17k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 1813|  3.17k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 1814|  3.17k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 1815|       |
 1816|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 1817|  3.17k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 1818|  3.17k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 1819|  3.17k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 1820|  3.17k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 1821|       |
 1822|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1823|  3.17k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 1824|  3.17k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 1825|  3.17k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 1826|  3.17k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 1827|       |
 1828|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1829|  3.17k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 1830|  3.17k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 1831|  3.17k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 1832|  3.17k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 1833|       |
 1834|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 1835|  3.17k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 1836|  3.17k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 1837|  3.17k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 1838|  3.17k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 1839|       |
 1840|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 1841|  3.17k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 1842|  3.17k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 1843|  3.17k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 1844|  3.17k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 1845|       |
 1846|       |                /* converting 16 bit to 8 bit */
 1847|  3.17k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 1848|  3.17k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 1849|       |
 1850|       |                /* converting 16 bit to 8 bit */
 1851|  3.17k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 1852|  3.17k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 1853|       |
 1854|  3.17k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 1855|  3.17k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 1856|       |
 1857|  3.17k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 1858|  3.17k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 1859|       |
 1860|  3.17k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1861|  3.17k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1862|       |
 1863|  3.17k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 1864|  3.17k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 1865|       |
 1866|  3.17k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 1867|  3.17k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 1868|       |
 1869|  3.17k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 1870|  3.17k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 1871|       |
 1872|  3.17k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 1873|  3.17k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 1874|       |
 1875|  3.17k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 1876|  3.17k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 1877|       |
 1878|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst), src_temp8_8x16b);       /* row=0*/
 1879|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 1)), src_temp4_8x16b);       /* row=1*/
 1880|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 2)), src_temp7_8x16b);       /* row=2*/
 1881|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 3)), src_temp3_8x16b);       /* row=3*/
 1882|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 4)), src_temp6_8x16b);       /* row=4*/
 1883|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 5)), src_temp2_8x16b);       /* row=5*/
 1884|       |
 1885|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 6)), src_temp5_8x16b);       /* row=6*/
 1886|  3.17k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 7)), src_temp1_8x16b);          /* row=7*/
 1887|       |
 1888|  3.17k|            }
 1889|  3.17k|        }
 1890|  3.17k|    }
 1891|       |
 1892|  17.6k|}
ihevc_intra_pred_luma_mode_11_to_17_sse42:
 1938|  17.8k|{
 1939|       |
 1940|       |    /* This function and ihevc_intra_pred_luma_mode_19_to_25 are same except*/
 1941|       |    /* for ref main & side samples assignment,can be combined for */
 1942|       |    /* optimzation*/
 1943|       |
 1944|  17.8k|    WORD32 row, col, k;
 1945|  17.8k|    WORD32 two_nt;
 1946|  17.8k|    WORD32 intra_pred_ang, inv_ang, inv_ang_sum;
 1947|  17.8k|    WORD32 ref_idx;
 1948|       |
 1949|  17.8k|    __m128i const_temp_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
 1950|  17.8k|    __m128i fract_4x32b,  intra_pred_ang_4x32b;
 1951|  17.8k|    __m128i row_4x32b, two_nt_4x32b, ref_main_idx_4x32b, res_temp5_4x32b, sm3;
 1952|       |
 1953|       |
 1954|  17.8k|    UWORD8 ref_tmp[2 * MAX_CU_SIZE + 2] = {0};
 1955|  17.8k|    UWORD8 *ref_main;
 1956|  17.8k|    UWORD8 *ref_temp;
 1957|  17.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  17.8k|#define UNUSED(x) ((void)(x))
  ------------------
 1958|       |
 1959|  17.8k|    inv_ang_sum = 128;
 1960|  17.8k|    two_nt    = 2 * nt;
 1961|  17.8k|    ref_temp = ref_tmp + 1;
 1962|  17.8k|    ref_main = ref_temp + nt - 1;
 1963|  17.8k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 1964|       |
 1965|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 1966|       |    /* samples dependent on distance to obtain destination sample */
 1967|  17.8k|    const_temp_4x32b  = _mm_set1_epi16(16);
 1968|  17.8k|    const_temp2_4x32b = _mm_set1_epi32(31);
 1969|  17.8k|    const_temp3_4x32b = _mm_set1_epi32(32);
 1970|  17.8k|    const_temp4_4x32b = _mm_set1_epi32(4);
 1971|       |
 1972|  17.8k|    two_nt_4x32b = _mm_set1_epi32(1);
 1973|       |
 1974|       |
 1975|  17.8k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 1976|       |
 1977|       |    /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 1978|  17.8k|    intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 1979|       |
 1980|  17.8k|    row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 1981|       |
 1982|  17.8k|    if(nt == 4)
  ------------------
  |  Branch (1982:8): [True: 10.8k, False: 6.94k]
  ------------------
 1983|  10.8k|    {
 1984|       |
 1985|  10.8k|        WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 1986|  10.8k|        int temp11, temp21, temp31, temp41;
 1987|       |//        WORD8  ai1_fract_temp_val[16], ai1_row_temp_val[16];
 1988|       |
 1989|  10.8k|        __m128i fract1_8x16b, fract2_8x16b;
 1990|  10.8k|        __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 1991|       |
 1992|  10.8k|        __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1993|  10.8k|        __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1994|  10.8k|        __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 1995|       |
 1996|       |        /* Intermediate reference samples for negative angle modes */
 1997|       |        /* This have to be removed during optimization*/
 1998|       |        /* For horizontal modes, (ref main = ref left) (ref side = ref above) */
 1999|  10.8k|        inv_ang = gai4_ihevc_inv_ang_table[mode - 11];
 2000|       |
 2001|  10.8k|        ref_main = ref_temp + nt - 1;
 2002|  65.3k|        for(k = 0; k < nt + 1; k++)
  ------------------
  |  Branch (2002:20): [True: 54.4k, False: 10.8k]
  ------------------
 2003|  54.4k|            ref_temp[k + nt - 1] = pu1_ref[two_nt - k];
 2004|       |
 2005|  10.8k|        ref_main = ref_temp + nt - 1;
 2006|  10.8k|        ref_idx = (nt * intra_pred_ang) >> 5;
 2007|       |
 2008|       |        /* SIMD Optimization can be done using look-up table for the loop */
 2009|       |        /* For negative angled derive the main reference samples from side */
 2010|       |        /*  reference samples refer to section 8.4.4.2.6 */
 2011|  24.6k|        for(k = -1; k > ref_idx; k--)
  ------------------
  |  Branch (2011:21): [True: 13.7k, False: 10.8k]
  ------------------
 2012|  13.7k|        {
 2013|  13.7k|            inv_ang_sum += inv_ang;
 2014|  13.7k|            ref_main[k] = pu1_ref[two_nt + (inv_ang_sum >> 8)];
 2015|  13.7k|        }
 2016|       |
 2017|       |
 2018|       |        /* pos = ((row + 1) * intra_pred_ang); */
 2019|  10.8k|        res_temp5_4x32b  = _mm_mullo_epi32(row_4x32b, intra_pred_ang_4x32b);
 2020|       |
 2021|       |        /* idx = pos >> 5; */
 2022|  10.8k|        fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2023|       |
 2024|       |        /* fract = pos & (31); */
 2025|  10.8k|        ref_main_idx_4x32b = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 2026|       |
 2027|       |        /*(32 - fract) */
 2028|  10.8k|        row_4x32b = _mm_sub_epi32(const_temp3_4x32b, fract_4x32b);
 2029|       |
 2030|  10.8k|        fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2031|  10.8k|        fract2_8x16b = _mm_slli_epi16(row_4x32b, 8);
 2032|       |
 2033|  10.8k|        fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2034|  10.8k|        row_4x32b = _mm_or_si128(row_4x32b, fract2_8x16b); /*(32 - fract) */
 2035|       |
 2036|  10.8k|        fract2_8x16b = _mm_unpackhi_epi8(fract_4x32b, row_4x32b);
 2037|  10.8k|        fract1_8x16b = _mm_unpacklo_epi8(fract_4x32b, row_4x32b);
 2038|       |
 2039|  10.8k|        temp1_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 2040|  10.8k|        temp2_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 2041|  10.8k|        temp3_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 2042|  10.8k|        temp4_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 2043|       |
 2044|  10.8k|        ref_main_temp0 = _mm_srli_si128(ref_main_idx_4x32b, 4);  /* next 32 bit values */
 2045|  10.8k|        ref_main_temp1 = _mm_srli_si128(ref_main_idx_4x32b, 8);  /* next 32 bit values */
 2046|  10.8k|        ref_main_temp2 = _mm_srli_si128(ref_main_idx_4x32b, 12); /* next 32 bit values */
 2047|  10.8k|        ref_main_idx1  = _mm_cvtsi128_si32(ref_main_idx_4x32b);    /* col=0*/
 2048|  10.8k|        ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* col=1*/
 2049|  10.8k|        ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* col=2*/
 2050|  10.8k|        ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* col=3*/
 2051|       |
 2052|       |        /* loding 8-bit 16 pixels */
 2053|  10.8k|        src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1)); /* col=0*/
 2054|  10.8k|        src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx2)); /* col=1*/
 2055|  10.8k|        src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx3)); /* col=2*/
 2056|  10.8k|        src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx4)); /* col=3*/
 2057|       |
 2058|  10.8k|        src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 2059|  10.8k|        src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 2060|  10.8k|        src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 2061|  10.8k|        src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 2062|       |
 2063|       |        /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2064|  10.8k|        src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2065|  10.8k|        src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2066|  10.8k|        src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2067|  10.8k|        src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2068|       |
 2069|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2070|  10.8k|        src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2071|  10.8k|        src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2072|  10.8k|        src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2073|  10.8k|        src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2074|       |
 2075|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2076|  10.8k|        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 2077|  10.8k|        src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 2078|  10.8k|        src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 2079|  10.8k|        src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 2080|       |
 2081|       |        /* converting 16 bit to 8 bit */
 2082|  10.8k|        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2083|  10.8k|        src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2084|       |
 2085|       |
 2086|  10.8k|        src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2087|  10.8k|        src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2088|       |
 2089|  10.8k|        src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2090|  10.8k|        src_temp1_8x16b = _mm_srli_si128(src_temp7_8x16b, 4);
 2091|  10.8k|        src_temp2_8x16b = _mm_srli_si128(src_temp7_8x16b, 8);
 2092|  10.8k|        src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 12);
 2093|       |
 2094|  10.8k|        temp11 = _mm_cvtsi128_si32(src_temp7_8x16b);
 2095|  10.8k|        temp21 = _mm_cvtsi128_si32(src_temp1_8x16b);
 2096|  10.8k|        temp31 = _mm_cvtsi128_si32(src_temp2_8x16b);
 2097|  10.8k|        temp41 = _mm_cvtsi128_si32(src_temp3_8x16b);
 2098|       |
 2099|       |        /* loding 8-bit 4 pixels values */
 2100|  10.8k|        *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 2101|  10.8k|        *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 2102|  10.8k|        *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 2103|  10.8k|        *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 2104|  10.8k|    }
 2105|       |
 2106|  6.94k|    else if(nt == 32)
  ------------------
  |  Branch (2106:13): [True: 1.25k, False: 5.69k]
  ------------------
 2107|  1.25k|    {
 2108|       |
 2109|       |
 2110|  1.25k|        __m128i temp1, temp2, temp3, temp11, temp12;
 2111|  1.25k|        __m128i src_values0, src_values1;
 2112|       |        /* Intermediate reference samples for negative angle modes */
 2113|       |
 2114|  1.25k|        ref_temp[two_nt - 1] = pu1_ref[two_nt - nt];
 2115|  1.25k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + nt + 1));
 2116|  1.25k|        temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + nt + 17));
 2117|  1.25k|        temp2 = _mm_loadu_si128((__m128i *)IHEVCE_SHUFFLEMASKY3);
 2118|       |
 2119|       |        /* For negative angled derive the main reference samples from side */
 2120|       |
 2121|  1.25k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1)); /*nt-(nt+15)*/
 2122|  1.25k|        src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 17)); /*(nt+16)-(two_nt-1)*/
 2123|       |
 2124|  1.25k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode]));
 2125|  1.25k|        temp12 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode] + 16));
 2126|       |
 2127|  1.25k|        src_values0 = _mm_shuffle_epi8(src_values0, temp2);
 2128|  1.25k|        src_values1 = _mm_shuffle_epi8(src_values1, temp2);
 2129|  1.25k|        src_values0 = _mm_shuffle_epi8(src_values0, temp12);
 2130|  1.25k|        src_values1 = _mm_shuffle_epi8(src_values1, temp11);
 2131|       |
 2132|  1.25k|        temp1 = _mm_shuffle_epi8(temp1, temp2);
 2133|  1.25k|        temp3 = _mm_shuffle_epi8(temp3, temp2);
 2134|       |
 2135|  1.25k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp3);
 2136|  1.25k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1 + 16), temp1);
 2137|  1.25k|        _mm_storeu_si128((__m128i *)(ref_main - 16), src_values0);
 2138|  1.25k|        _mm_storeu_si128((__m128i *)(ref_main - nt + inv_angle_shuffle[17 - mode][0]), src_values1);
 2139|       |
 2140|       |
 2141|  1.25k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2142|  1.25k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 2143|  1.25k|        const_temp2_4x32b = _mm_set1_epi16(31);
 2144|  1.25k|        const_temp4_4x32b = _mm_set1_epi16(8);
 2145|  1.25k|        const_temp3_4x32b = _mm_set1_epi16(32);
 2146|  1.25k|        two_nt_4x32b = _mm_set1_epi16(1);
 2147|       |
 2148|  6.26k|        for(col = 0; col < nt; col += 8)
  ------------------
  |  Branch (2148:22): [True: 5.00k, False: 1.25k]
  ------------------
 2149|  5.00k|        {
 2150|  5.00k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 2151|  5.00k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 2152|       |            // WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 2153|       |
 2154|  5.00k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 2155|       |
 2156|  5.00k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2157|  5.00k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 2158|       |
 2159|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2160|  5.00k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2161|       |
 2162|       |            /* idx = pos >> 5; */
 2163|  5.00k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2164|       |
 2165|       |            /* fract = pos & (31); */
 2166|  5.00k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 2167|       |
 2168|  5.00k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 2169|       |            /*(32 - fract) */
 2170|  5.00k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 2171|       |
 2172|  5.00k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2173|  5.00k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 2174|       |
 2175|  5.00k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2176|  5.00k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 2177|       |
 2178|       |
 2179|  5.00k|            fract8_8x16b = _mm_unpackhi_epi8(fract_4x32b, fract2_8x16b);
 2180|  5.00k|            fract_4x32b = _mm_unpacklo_epi8(fract_4x32b, fract2_8x16b);
 2181|       |
 2182|  5.00k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 2183|  5.00k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 2184|  5.00k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 2185|  5.00k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 2186|       |
 2187|  5.00k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 2188|  5.00k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 2189|  5.00k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 2190|  5.00k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 2191|       |
 2192|  5.00k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 2193|  5.00k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 2194|  5.00k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 2195|  5.00k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 2196|       |
 2197|  5.00k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 2198|  5.00k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 2199|  5.00k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 2200|  5.00k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 2201|       |
 2202|  24.9k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2202:26): [True: 19.9k, False: 5.00k]
  ------------------
 2203|  19.9k|            {
 2204|  19.9k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2205|  19.9k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 2206|       |
 2207|       |
 2208|  19.9k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 2209|  19.9k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 2210|       |
 2211|       |                /* loding 8-bit 16 pixels */
 2212|  19.9k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1 + row)); /* col=0*/
 2213|  19.9k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2 + row)); /* col=1*/
 2214|  19.9k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3 + row)); /* col=2*/
 2215|  19.9k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4 + row)); /* col=3*/
 2216|       |
 2217|  19.9k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 1); /* col=0*/
 2218|  19.9k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 1); /* col=1*/
 2219|  19.9k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 1); /* col=2*/
 2220|  19.9k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 1); /* col=3*/
 2221|       |
 2222|       |                /* loding 8-bit 16 pixels */
 2223|  19.9k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5 + row)); /* col=5*/
 2224|  19.9k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6 + row)); /* col=6*/
 2225|  19.9k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7 + row)); /* col=7*/
 2226|  19.9k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8 + row)); /* col=8*/
 2227|       |
 2228|  19.9k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 2229|  19.9k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 2230|  19.9k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 2231|  19.9k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 2232|       |
 2233|  19.9k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp15_8x16b, sm3); /* col=0*/
 2234|  19.9k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp16_8x16b, sm3); /* col=1*/
 2235|  19.9k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp17_8x16b, sm3); /* col=2*/
 2236|  19.9k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp18_8x16b, sm3); /* col=3*/
 2237|       |
 2238|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2239|  19.9k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2240|  19.9k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2241|  19.9k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2242|  19.9k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2243|       |
 2244|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2245|  19.9k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 2246|  19.9k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 2247|  19.9k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 2248|  19.9k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 2249|       |
 2250|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2251|  19.9k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2252|  19.9k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2253|  19.9k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2254|  19.9k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2255|       |
 2256|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2257|  19.9k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 2258|  19.9k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 2259|  19.9k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 2260|  19.9k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 2261|       |
 2262|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2263|  19.9k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 2264|  19.9k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 2265|  19.9k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 2266|  19.9k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 2267|       |
 2268|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2269|  19.9k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 2270|  19.9k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 2271|  19.9k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 2272|  19.9k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 2273|       |
 2274|       |                /* converting 16 bit to 8 bit */
 2275|  19.9k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2276|  19.9k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2277|       |
 2278|       |                /* converting 16 bit to 8 bit */
 2279|  19.9k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 2280|  19.9k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 2281|       |
 2282|  19.9k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2283|  19.9k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2284|       |
 2285|  19.9k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2286|  19.9k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2287|       |
 2288|  19.9k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2289|  19.9k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2290|       |
 2291|  19.9k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2292|  19.9k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2293|       |
 2294|       |
 2295|  19.9k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2296|  19.9k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2297|       |
 2298|  19.9k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2299|  19.9k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2300|       |
 2301|  19.9k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 2302|  19.9k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 2303|  19.9k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 2304|  19.9k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 2305|       |
 2306|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * row)), src_temp1_8x16b);          /* row=0*/
 2307|       |
 2308|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp5_8x16b);       /* row=1*/
 2309|       |
 2310|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp2_8x16b);       /* row=2*/
 2311|       |
 2312|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp6_8x16b);       /* row=4*/
 2313|       |
 2314|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 4))), src_temp3_8x16b);       /* row=5*/
 2315|       |
 2316|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 5))), src_temp7_8x16b);       /* row=6*/
 2317|       |
 2318|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 6))), src_temp4_8x16b);       /* row=7*/
 2319|       |
 2320|  19.9k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 7))), src_temp8_8x16b);       /* row=8*/
 2321|       |
 2322|  19.9k|            }
 2323|  5.00k|        }
 2324|  1.25k|    }
 2325|  5.69k|    else if(nt == 16)
  ------------------
  |  Branch (2325:13): [True: 2.52k, False: 3.16k]
  ------------------
 2326|  2.52k|    {
 2327|       |
 2328|  2.52k|        __m128i temp1, temp2, temp11, src_values0;
 2329|       |        /* Intermediate reference samples for negative angle modes */
 2330|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 2331|  2.52k|        ref_temp[two_nt - 1] = pu1_ref[two_nt - nt];
 2332|  2.52k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + nt + 1));
 2333|  2.52k|        temp2 = _mm_loadu_si128((__m128i *)IHEVCE_SHUFFLEMASKY3);
 2334|  2.52k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1)); /*nt-(nt+15)*/
 2335|       |
 2336|  2.52k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode] + 16));
 2337|       |
 2338|  2.52k|        src_values0 = _mm_shuffle_epi8(src_values0, temp2);
 2339|  2.52k|        temp1 = _mm_shuffle_epi8(temp1, temp2);
 2340|  2.52k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 2341|       |
 2342|  2.52k|        _mm_storeu_si128((__m128i *)(ref_main - nt), src_values0);
 2343|  2.52k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp1);
 2344|       |
 2345|  2.52k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2346|  2.52k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 2347|  2.52k|        const_temp2_4x32b = _mm_set1_epi16(31);
 2348|  2.52k|        const_temp4_4x32b = _mm_set1_epi16(8);
 2349|  2.52k|        const_temp3_4x32b = _mm_set1_epi16(32);
 2350|  2.52k|        two_nt_4x32b = _mm_set1_epi16(1);
 2351|       |
 2352|  7.57k|        for(col = 0; col < nt; col += 8)
  ------------------
  |  Branch (2352:22): [True: 5.05k, False: 2.52k]
  ------------------
 2353|  5.05k|        {
 2354|  5.05k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 2355|  5.05k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 2356|       |            // WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 2357|       |
 2358|  5.05k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 2359|       |
 2360|  5.05k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2361|  5.05k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 2362|       |
 2363|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2364|  5.05k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2365|       |
 2366|       |            /* idx = pos >> 5; */
 2367|  5.05k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2368|       |
 2369|       |            /* fract = pos & (31); */
 2370|  5.05k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 2371|       |
 2372|  5.05k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 2373|       |            /*(32 - fract) */
 2374|  5.05k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 2375|       |
 2376|  5.05k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2377|  5.05k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 2378|       |
 2379|  5.05k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2380|  5.05k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 2381|       |
 2382|       |
 2383|  5.05k|            fract8_8x16b = _mm_unpackhi_epi8(fract_4x32b, fract2_8x16b);
 2384|  5.05k|            fract_4x32b = _mm_unpacklo_epi8(fract_4x32b, fract2_8x16b);
 2385|       |
 2386|  5.05k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 2387|  5.05k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 2388|  5.05k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 2389|  5.05k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 2390|       |
 2391|  5.05k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 2392|  5.05k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 2393|  5.05k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 2394|  5.05k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 2395|       |
 2396|  5.05k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 2397|  5.05k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 2398|  5.05k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 2399|  5.05k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 2400|       |
 2401|  5.05k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 2402|  5.05k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 2403|  5.05k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 2404|  5.05k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 2405|       |
 2406|  15.1k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2406:26): [True: 10.0k, False: 5.05k]
  ------------------
 2407|  10.0k|            {
 2408|  10.0k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2409|  10.0k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 2410|       |
 2411|       |
 2412|  10.0k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 2413|  10.0k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 2414|       |
 2415|       |                /* loding 8-bit 16 pixels */
 2416|  10.0k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1 + row)); /* col=0*/
 2417|  10.0k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2 + row)); /* col=1*/
 2418|  10.0k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3 + row)); /* col=2*/
 2419|  10.0k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4 + row)); /* col=3*/
 2420|       |
 2421|  10.0k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 1); /* col=0*/
 2422|  10.0k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 1); /* col=1*/
 2423|  10.0k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 1); /* col=2*/
 2424|  10.0k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 1); /* col=3*/
 2425|       |
 2426|       |                /* loding 8-bit 16 pixels */
 2427|  10.0k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5 + row)); /* col=5*/
 2428|  10.0k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6 + row)); /* col=6*/
 2429|  10.0k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7 + row)); /* col=7*/
 2430|  10.0k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8 + row)); /* col=8*/
 2431|       |
 2432|  10.0k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 2433|  10.0k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 2434|  10.0k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 2435|  10.0k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 2436|       |
 2437|  10.0k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp15_8x16b, sm3); /* col=0*/
 2438|  10.0k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp16_8x16b, sm3); /* col=1*/
 2439|  10.0k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp17_8x16b, sm3); /* col=2*/
 2440|  10.0k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp18_8x16b, sm3); /* col=3*/
 2441|       |
 2442|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2443|  10.0k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2444|  10.0k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2445|  10.0k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2446|  10.0k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2447|       |
 2448|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2449|  10.0k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 2450|  10.0k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 2451|  10.0k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 2452|  10.0k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 2453|       |
 2454|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2455|  10.0k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2456|  10.0k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2457|  10.0k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2458|  10.0k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2459|       |
 2460|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2461|  10.0k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 2462|  10.0k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 2463|  10.0k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 2464|  10.0k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 2465|       |
 2466|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2467|  10.0k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 2468|  10.0k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 2469|  10.0k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 2470|  10.0k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 2471|       |
 2472|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2473|  10.0k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 2474|  10.0k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 2475|  10.0k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 2476|  10.0k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 2477|       |
 2478|       |                /* converting 16 bit to 8 bit */
 2479|  10.0k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2480|  10.0k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2481|       |
 2482|       |                /* converting 16 bit to 8 bit */
 2483|  10.0k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 2484|  10.0k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 2485|       |
 2486|  10.0k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2487|  10.0k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2488|       |
 2489|  10.0k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2490|  10.0k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2491|       |
 2492|  10.0k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2493|  10.0k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2494|       |
 2495|  10.0k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2496|  10.0k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2497|       |
 2498|       |
 2499|  10.0k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2500|  10.0k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2501|       |
 2502|  10.0k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2503|  10.0k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2504|       |
 2505|  10.0k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 2506|  10.0k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 2507|  10.0k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 2508|  10.0k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 2509|       |
 2510|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * row)), src_temp1_8x16b);          /* row=0*/
 2511|       |
 2512|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp5_8x16b);       /* row=1*/
 2513|       |
 2514|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp2_8x16b);       /* row=2*/
 2515|       |
 2516|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp6_8x16b);       /* row=4*/
 2517|       |
 2518|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 4))), src_temp3_8x16b);       /* row=5*/
 2519|       |
 2520|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 5))), src_temp7_8x16b);       /* row=6*/
 2521|       |
 2522|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 6))), src_temp4_8x16b);       /* row=7*/
 2523|       |
 2524|  10.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 7))), src_temp8_8x16b);       /* row=8*/
 2525|       |
 2526|  10.0k|            }
 2527|  5.05k|        }
 2528|  2.52k|    }
 2529|  3.16k|    else
 2530|  3.16k|    {
 2531|       |
 2532|       |
 2533|  3.16k|        __m128i temp1, temp2, temp11, src_values0;
 2534|       |        /* Intermediate reference samples for negative angle modes */
 2535|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 2536|  3.16k|        ref_temp[two_nt - 1] = pu1_ref[nt];
 2537|  3.16k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + 1));
 2538|       |
 2539|       |        /* For negative angled derive the main reference samples from side */
 2540|       |
 2541|  3.16k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1)); /*nt-(nt+15)*/
 2542|  3.16k|        temp2 = _mm_loadu_si128((__m128i *)IHEVCE_SHUFFLEMASKY3);
 2543|  3.16k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode] + 16));
 2544|       |
 2545|  3.16k|        src_values0 = _mm_shuffle_epi8(src_values0, temp2);
 2546|  3.16k|        temp1 = _mm_shuffle_epi8(temp1, temp2);
 2547|  3.16k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 2548|  3.16k|        src_values0 = _mm_srli_si128(src_values0, 8);
 2549|       |
 2550|  3.16k|        _mm_storel_epi64((__m128i *)(ref_temp + nt - 1), temp1);
 2551|  3.16k|        _mm_storel_epi64((__m128i *)(ref_main - nt), src_values0);
 2552|       |
 2553|       |
 2554|  3.16k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2555|  3.16k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 2556|  3.16k|        const_temp2_4x32b = _mm_set1_epi16(31);
 2557|  3.16k|        const_temp4_4x32b = _mm_set1_epi16(8);
 2558|  3.16k|        const_temp3_4x32b = _mm_set1_epi16(32);
 2559|  3.16k|        two_nt_4x32b = _mm_set1_epi16(1);
 2560|       |
 2561|  3.16k|        {
 2562|  3.16k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 2563|  3.16k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 2564|       |            //WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 2565|       |
 2566|  3.16k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 2567|       |
 2568|  3.16k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2569|  3.16k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 2570|       |
 2571|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2572|  3.16k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2573|       |
 2574|       |            /* idx = pos >> 5; */
 2575|  3.16k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2576|       |
 2577|       |            /* fract = pos & (31); */
 2578|  3.16k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 2579|       |
 2580|       |            /*(32 - fract) */
 2581|  3.16k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 2582|       |
 2583|  3.16k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2584|  3.16k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 2585|       |
 2586|  3.16k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2587|  3.16k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 2588|       |
 2589|  3.16k|            fract8_8x16b = _mm_unpackhi_epi8(fract_4x32b, fract2_8x16b);
 2590|  3.16k|            fract_4x32b = _mm_unpacklo_epi8(fract_4x32b, fract2_8x16b);
 2591|       |
 2592|  3.16k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 2593|  3.16k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 2594|  3.16k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 2595|  3.16k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 2596|       |
 2597|  3.16k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 2598|  3.16k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 2599|  3.16k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 2600|  3.16k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 2601|       |
 2602|  3.16k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 2603|  3.16k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 2604|  3.16k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 2605|  3.16k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 2606|       |
 2607|  3.16k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 2608|  3.16k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 2609|  3.16k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 2610|  3.16k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 2611|       |
 2612|  3.16k|            {
 2613|  3.16k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2614|  3.16k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 2615|       |
 2616|  3.16k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 2617|  3.16k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 2618|       |
 2619|       |                /* loding 8-bit 16 pixels */
 2620|  3.16k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1)); /* col=0*/
 2621|  3.16k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2)); /* col=1*/
 2622|  3.16k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3)); /* col=2*/
 2623|  3.16k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4)); /* col=3*/
 2624|       |
 2625|       |                /* loding 8-bit 16 pixels */
 2626|  3.16k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5)); /* col=5*/
 2627|  3.16k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6)); /* col=6*/
 2628|  3.16k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7)); /* col=7*/
 2629|  3.16k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8)); /* col=8*/
 2630|       |
 2631|  3.16k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 2632|  3.16k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 2633|  3.16k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 2634|  3.16k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 2635|       |
 2636|  3.16k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp15_8x16b, sm3); /* col=0*/
 2637|  3.16k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp16_8x16b, sm3); /* col=1*/
 2638|  3.16k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp17_8x16b, sm3); /* col=2*/
 2639|  3.16k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp18_8x16b, sm3); /* col=3*/
 2640|       |
 2641|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2642|  3.16k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2643|  3.16k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2644|  3.16k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2645|  3.16k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2646|       |
 2647|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2648|  3.16k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 2649|  3.16k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 2650|  3.16k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 2651|  3.16k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 2652|       |
 2653|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2654|  3.16k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2655|  3.16k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2656|  3.16k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2657|  3.16k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2658|       |
 2659|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2660|  3.16k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* row=0*/
 2661|  3.16k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* row=1*/
 2662|  3.16k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* row=2*/
 2663|  3.16k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* row=3*/
 2664|       |
 2665|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2666|  3.16k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 2667|  3.16k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 2668|  3.16k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 2669|  3.16k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 2670|       |
 2671|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2672|  3.16k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 2673|  3.16k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 2674|  3.16k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 2675|  3.16k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 2676|       |
 2677|       |                /* converting 16 bit to 8 bit */
 2678|  3.16k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2679|  3.16k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2680|       |
 2681|       |                /* converting 16 bit to 8 bit */
 2682|  3.16k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=4*/
 2683|  3.16k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=5*/
 2684|       |
 2685|  3.16k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2686|  3.16k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2687|       |
 2688|  3.16k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2689|  3.16k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2690|       |
 2691|  3.16k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2692|  3.16k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2693|       |
 2694|  3.16k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2695|  3.16k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2696|       |
 2697|       |
 2698|  3.16k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2699|  3.16k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2700|       |
 2701|  3.16k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2702|  3.16k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2703|       |
 2704|  3.16k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 2705|  3.16k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 2706|  3.16k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 2707|  3.16k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 2708|       |
 2709|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 0)), src_temp1_8x16b);       /* row=0*/
 2710|       |
 2711|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (1))), src_temp5_8x16b);       /* row=1*/
 2712|       |
 2713|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (2))), src_temp2_8x16b);       /* row=2*/
 2714|       |
 2715|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (3))), src_temp6_8x16b);       /* row=3*/
 2716|       |
 2717|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (4))), src_temp3_8x16b);       /* row=4*/
 2718|       |
 2719|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (5))), src_temp7_8x16b);       /* row=5*/
 2720|       |
 2721|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (6))), src_temp4_8x16b);       /* row=6*/
 2722|       |
 2723|  3.16k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (7))), src_temp8_8x16b);       /* row=7*/
 2724|       |
 2725|  3.16k|            }
 2726|  3.16k|        }
 2727|  3.16k|    }
 2728|       |
 2729|  17.8k|}
ihevc_intra_pred_luma_mode_19_to_25_sse42:
 2777|  18.8k|{
 2778|       |
 2779|  18.8k|    WORD32 row, k;
 2780|  18.8k|    WORD32 two_nt, intra_pred_ang;
 2781|  18.8k|    WORD32 inv_ang, inv_ang_sum;
 2782|       |    //WORD32 ref_main_idx, pos, fract, idx;
 2783|  18.8k|    WORD32 ref_idx;
 2784|  18.8k|    UWORD8 ref_tmp[(2 * MAX_CU_SIZE) + 2] = {0};
 2785|  18.8k|    UWORD8 *ref_main, *ref_temp;
 2786|       |
 2787|  18.8k|    __m128i  /*fract_8x16b,*/ const_temp_8x16b, sm3;
 2788|  18.8k|    __m128i temp1, temp2, temp3, temp4;
 2789|  18.8k|    __m128i temp11, temp12, temp13, temp14;
 2790|  18.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  18.8k|#define UNUSED(x) ((void)(x))
  ------------------
 2791|       |
 2792|  18.8k|    two_nt = 2 * nt;
 2793|  18.8k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 2794|  18.8k|    inv_ang = gai4_ihevc_inv_ang_table[mode - 12];
 2795|       |
 2796|       |    /* Intermediate reference samples for negative angle modes */
 2797|       |    /* This have to be removed during optimization*/
 2798|       |    /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 2799|  18.8k|    ref_temp = ref_tmp + 1;
 2800|  18.8k|    ref_main = ref_temp + nt - 1;
 2801|       |
 2802|       |
 2803|  18.8k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 2804|       |
 2805|       |
 2806|       |
 2807|  18.8k|    const_temp_8x16b = _mm_set1_epi16(16);
 2808|       |
 2809|  18.8k|    if(nt == 32)
  ------------------
  |  Branch (2809:8): [True: 956, False: 17.8k]
  ------------------
 2810|    956|    {
 2811|       |
 2812|    956|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 2813|    956|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 2814|    956|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 2815|       |
 2816|    956|        __m128i src_values0, src_values1, src_values2, src_values3;
 2817|    956|        __m128i  src_values4, src_values5, src_values6, src_values7;
 2818|    956|        WORD32 col = 0;
 2819|       |
 2820|       |        /* Intermediate reference samples for negative angle modes */
 2821|       |        /* This have to be removed during optimization*/
 2822|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 2823|    956|        ref_temp[two_nt - 1] = pu1_ref[two_nt + nt];
 2824|    956|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt));
 2825|    956|        temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 16));
 2826|       |
 2827|       |        /* SIMD Optimization can be done using look-up table for the loop */
 2828|       |        /* For negative angled derive the main reference samples from side */
 2829|       |        /*  reference samples refer to section 8.4.4.2.6 */
 2830|    956|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - nt)); /*nt-(nt+15)*/
 2831|    956|        src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 16)); /*(nt+16)-(two_nt-1)*/
 2832|       |
 2833|    956|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19]));
 2834|    956|        temp12 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19] + 16));
 2835|       |
 2836|    956|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 2837|    956|        src_values1 = _mm_shuffle_epi8(src_values1, temp12);
 2838|       |
 2839|    956|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp1);
 2840|    956|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1 + 16), temp3);
 2841|    956|        _mm_storeu_si128((__m128i *)(ref_main - 16), src_values1);
 2842|    956|        _mm_storeu_si128((__m128i *)(ref_main - nt + inv_angle_shuffle[mode - 19][0]), src_values0);
 2843|       |
 2844|    956|        const_temp2_4x32b = _mm_set1_epi16(31);
 2845|    956|        const_temp3_4x32b = _mm_set1_epi16(32);
 2846|    956|        const_temp8_4x32b = _mm_set1_epi16(8);
 2847|       |
 2848|    956|        two_nt_4x32b = _mm_set1_epi16(1);
 2849|       |
 2850|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 2851|    956|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2852|       |
 2853|    956|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 2854|       |
 2855|  4.77k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2855:22): [True: 3.81k, False: 956]
  ------------------
 2856|  3.81k|        {
 2857|       |
 2858|  3.81k|            WORD16 ref_main_idx[9];
 2859|       |
 2860|  3.81k|            __m128i res_temp5_4x32b;
 2861|  3.81k|            __m128i fract1_8x16b, fract2_8x16b;
 2862|       |
 2863|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2864|  3.81k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2865|       |
 2866|       |            /* fract = pos & (31); */
 2867|  3.81k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 2868|       |
 2869|       |            /* idx = pos >> 5; */
 2870|  3.81k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2871|       |
 2872|       |            /*(32 - fract) */
 2873|  3.81k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 2874|       |
 2875|  3.81k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 2876|  3.81k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 2877|       |
 2878|  3.81k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 2879|  3.81k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 2880|       |
 2881|  3.81k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 2882|  3.81k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 2883|       |
 2884|  3.81k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 2885|  3.81k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 2886|  3.81k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 2887|  3.81k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 2888|       |
 2889|  3.81k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 2890|  3.81k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 2891|  3.81k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 2892|  3.81k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 2893|       |
 2894|  3.81k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 2895|  3.81k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 2896|  11.4k|            for(col = 0; col < nt; col += 16)
  ------------------
  |  Branch (2896:26): [True: 7.64k, False: 3.81k]
  ------------------
 2897|  7.64k|            {
 2898|  7.64k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0] + col));
 2899|  7.64k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1] + col));
 2900|  7.64k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2] + col));
 2901|  7.64k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3] + col));
 2902|  7.64k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0] + 8 + col));
 2903|  7.64k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1] + 8 + col));
 2904|  7.64k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2] + 8 + col));
 2905|  7.64k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3] + 8 + col));
 2906|       |
 2907|  7.64k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 2908|  7.64k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 2909|  7.64k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 2910|  7.64k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 2911|  7.64k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 2912|  7.64k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 2913|  7.64k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 2914|  7.64k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 2915|       |
 2916|       |
 2917|  7.64k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 2918|  7.64k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 2919|  7.64k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 2920|  7.64k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 2921|  7.64k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 2922|  7.64k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 2923|  7.64k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 2924|  7.64k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 2925|       |
 2926|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2927|  7.64k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2928|  7.64k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2929|  7.64k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2930|  7.64k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2931|  7.64k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 2932|  7.64k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 2933|  7.64k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 2934|  7.64k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 2935|       |
 2936|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2937|  7.64k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 2938|  7.64k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 2939|  7.64k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 2940|  7.64k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 2941|  7.64k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 2942|  7.64k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 2943|  7.64k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 2944|  7.64k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 2945|       |
 2946|       |                /* converting 16 bit to 8 bit */
 2947|  7.64k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 2948|  7.64k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 2949|  7.64k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 2950|  7.64k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 2951|       |
 2952|       |                /* loading 8-bit 8 pixels values */
 2953|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (0) * dst_strd), src_values0);       /* row=0*/
 2954|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (1) * dst_strd), src_values1);   /* row=1*/
 2955|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (2) * dst_strd), src_values2);   /* row=2*/
 2956|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (3) * dst_strd), src_values3);   /* row=3*/
 2957|       |
 2958|       |
 2959|  7.64k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4] + col));
 2960|  7.64k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5] + col));
 2961|  7.64k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6] + col));
 2962|  7.64k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7] + col));
 2963|  7.64k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4] + 8 + col));
 2964|  7.64k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5] + 8 + col));
 2965|  7.64k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6] + 8 + col));
 2966|  7.64k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7] + 8 + col));
 2967|       |
 2968|  7.64k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 2969|  7.64k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 2970|  7.64k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 2971|  7.64k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 2972|  7.64k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 2973|  7.64k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 2974|  7.64k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 2975|  7.64k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 2976|       |
 2977|       |
 2978|  7.64k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 2979|  7.64k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 2980|  7.64k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 2981|  7.64k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 2982|  7.64k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 2983|  7.64k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 2984|  7.64k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 2985|  7.64k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 2986|       |
 2987|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2988|  7.64k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 2989|  7.64k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 2990|  7.64k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 2991|  7.64k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 2992|  7.64k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 2993|  7.64k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 2994|  7.64k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 2995|  7.64k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 2996|       |
 2997|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2998|  7.64k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 2999|  7.64k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3000|  7.64k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3001|  7.64k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3002|  7.64k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3003|  7.64k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3004|  7.64k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3005|  7.64k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3006|       |
 3007|       |                /* converting 16 bit to 8 bit */
 3008|  7.64k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3009|  7.64k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3010|  7.64k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3011|  7.64k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3012|       |
 3013|       |                /* loading 8-bit 8 pixels values */
 3014|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (4) * dst_strd), src_values0);   /* row=4*/
 3015|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (5) * dst_strd), src_values1);   /* row=5*/
 3016|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (6) * dst_strd), src_values2);   /* row=6*/
 3017|  7.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (7) * dst_strd), src_values3);   /* row=7*/
 3018|       |
 3019|  7.64k|            }
 3020|  3.81k|            pu1_dst += 8 * dst_strd;
 3021|  3.81k|        }
 3022|       |
 3023|    956|    }
 3024|  17.8k|    else if(nt == 16) /* for nt = 16 case */
  ------------------
  |  Branch (3024:13): [True: 2.59k, False: 15.3k]
  ------------------
 3025|  2.59k|    {
 3026|       |
 3027|  2.59k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 3028|  2.59k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3029|  2.59k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3030|  2.59k|        __m128i src_values0, src_values1, src_values2, src_values3;
 3031|  2.59k|        __m128i  src_values4, src_values5, src_values6, src_values7;
 3032|       |
 3033|       |
 3034|       |        /* Intermediate reference samples for negative angle modes */
 3035|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3036|  2.59k|        ref_temp[two_nt - 1] = pu1_ref[two_nt + nt];
 3037|  2.59k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt));
 3038|       |
 3039|  2.59k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - nt)); /*nt-(nt+15)*/
 3040|       |
 3041|  2.59k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19] + 16));
 3042|       |
 3043|  2.59k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 3044|       |
 3045|  2.59k|        _mm_storeu_si128((__m128i *)(ref_main - nt), src_values0);
 3046|  2.59k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp1);
 3047|       |
 3048|  2.59k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3049|  2.59k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3050|  2.59k|        const_temp8_4x32b = _mm_set1_epi16(8);
 3051|       |
 3052|  2.59k|        two_nt_4x32b = _mm_set1_epi16(1);
 3053|       |
 3054|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3055|  2.59k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3056|       |
 3057|  2.59k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3058|       |
 3059|  7.77k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3059:22): [True: 5.18k, False: 2.59k]
  ------------------
 3060|  5.18k|        {
 3061|       |
 3062|  5.18k|            WORD16 ref_main_idx[9];
 3063|       |
 3064|  5.18k|            __m128i res_temp5_4x32b;
 3065|  5.18k|            __m128i fract1_8x16b, fract2_8x16b;
 3066|       |
 3067|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3068|  5.18k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3069|       |
 3070|       |            /* fract = pos & (31); */
 3071|  5.18k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3072|       |
 3073|       |            /* idx = pos >> 5; */
 3074|  5.18k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3075|       |
 3076|       |            /*(32 - fract) */
 3077|  5.18k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 3078|       |
 3079|  5.18k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3080|  5.18k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3081|       |
 3082|  5.18k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3083|  5.18k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3084|       |
 3085|  5.18k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3086|  5.18k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3087|       |
 3088|  5.18k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3089|  5.18k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 3090|  5.18k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3091|  5.18k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 3092|       |
 3093|  5.18k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3094|  5.18k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 3095|  5.18k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 3096|  5.18k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 3097|       |
 3098|  5.18k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 3099|  5.18k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 3100|       |
 3101|  5.18k|            {
 3102|  5.18k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0]));
 3103|  5.18k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1]));
 3104|  5.18k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2]));
 3105|  5.18k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3]));
 3106|  5.18k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0] + 8));
 3107|  5.18k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1] + 8));
 3108|  5.18k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2] + 8));
 3109|  5.18k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3] + 8));
 3110|       |
 3111|  5.18k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3112|  5.18k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3113|  5.18k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3114|  5.18k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3115|  5.18k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3116|  5.18k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3117|  5.18k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3118|  5.18k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3119|       |
 3120|       |
 3121|  5.18k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 3122|  5.18k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 3123|  5.18k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 3124|  5.18k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 3125|  5.18k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 3126|  5.18k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 3127|  5.18k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 3128|  5.18k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 3129|       |
 3130|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3131|  5.18k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3132|  5.18k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3133|  5.18k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3134|  5.18k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3135|  5.18k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3136|  5.18k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3137|  5.18k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3138|  5.18k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3139|       |
 3140|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3141|  5.18k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3142|  5.18k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3143|  5.18k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3144|  5.18k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3145|  5.18k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3146|  5.18k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3147|  5.18k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3148|  5.18k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3149|       |
 3150|       |                /* converting 16 bit to 8 bit */
 3151|  5.18k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3152|  5.18k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3153|  5.18k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3154|  5.18k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3155|       |
 3156|       |                /* loading 8-bit 8 pixels values */
 3157|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (0) * dst_strd), src_values0);       /* row=0*/
 3158|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (1) * dst_strd), src_values1);   /* row=1*/
 3159|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (2) * dst_strd), src_values2);   /* row=2*/
 3160|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (3) * dst_strd), src_values3);   /* row=3*/
 3161|       |
 3162|       |
 3163|  5.18k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4]));
 3164|  5.18k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5]));
 3165|  5.18k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6]));
 3166|  5.18k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7]));
 3167|  5.18k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4] + 8));
 3168|  5.18k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5] + 8));
 3169|  5.18k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6] + 8));
 3170|  5.18k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7] + 8));
 3171|       |
 3172|  5.18k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3173|  5.18k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3174|  5.18k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3175|  5.18k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3176|  5.18k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3177|  5.18k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3178|  5.18k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3179|  5.18k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3180|       |
 3181|       |
 3182|  5.18k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 3183|  5.18k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 3184|  5.18k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 3185|  5.18k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 3186|  5.18k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 3187|  5.18k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 3188|  5.18k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 3189|  5.18k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 3190|       |
 3191|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3192|  5.18k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3193|  5.18k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3194|  5.18k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3195|  5.18k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3196|  5.18k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3197|  5.18k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3198|  5.18k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3199|  5.18k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3200|       |
 3201|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3202|  5.18k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3203|  5.18k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3204|  5.18k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3205|  5.18k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3206|  5.18k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3207|  5.18k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3208|  5.18k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3209|  5.18k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3210|       |
 3211|       |                /* converting 16 bit to 8 bit */
 3212|  5.18k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3213|  5.18k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3214|  5.18k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3215|  5.18k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3216|       |
 3217|       |                /* loading 8-bit 8 pixels values */
 3218|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (4) * dst_strd), src_values0);   /* row=4*/
 3219|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (5) * dst_strd), src_values1);   /* row=5*/
 3220|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (6) * dst_strd), src_values2);   /* row=6*/
 3221|  5.18k|                _mm_storeu_si128((__m128i *)(pu1_dst + (7) * dst_strd), src_values3);   /* row=7*/
 3222|       |
 3223|  5.18k|            }
 3224|  5.18k|            pu1_dst += 8 * dst_strd;
 3225|  5.18k|        }
 3226|  2.59k|    }
 3227|  15.3k|    else if(nt == 8)
  ------------------
  |  Branch (3227:13): [True: 3.87k, False: 11.4k]
  ------------------
 3228|  3.87k|    {
 3229|       |
 3230|       |
 3231|  3.87k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 3232|  3.87k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3233|       |
 3234|  3.87k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3235|  3.87k|        __m128i src_values0, src_values1, src_values2, src_values3;
 3236|  3.87k|        __m128i  src_values4, src_values5, src_values6, src_values7;
 3237|       |
 3238|       |
 3239|       |        /* Intermediate reference samples for negative angle modes */
 3240|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3241|  3.87k|        ref_temp[two_nt - 1] = pu1_ref[two_nt + nt];
 3242|  3.87k|        temp1 = _mm_loadl_epi64((__m128i *)(pu1_ref + two_nt));
 3243|       |
 3244|       |        /* For negative angled derive the main reference samples from side */
 3245|       |
 3246|  3.87k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref)); /*nt-(nt+15)*/
 3247|       |
 3248|  3.87k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19] + 16));
 3249|       |
 3250|  3.87k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 3251|  3.87k|        src_values0 = _mm_srli_si128(src_values0, 8);
 3252|  3.87k|        _mm_storel_epi64((__m128i *)(ref_temp + nt - 1), temp1);
 3253|  3.87k|        _mm_storel_epi64((__m128i *)(ref_main - nt), src_values0);
 3254|       |
 3255|       |
 3256|       |
 3257|  3.87k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3258|  3.87k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3259|       |
 3260|       |
 3261|  3.87k|        two_nt_4x32b = _mm_set1_epi16(1);
 3262|       |
 3263|       |
 3264|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3265|  3.87k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3266|       |
 3267|  3.87k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3268|       |
 3269|  3.87k|        {
 3270|       |
 3271|  3.87k|            WORD16 ref_main_idx[9];
 3272|       |
 3273|  3.87k|            __m128i res_temp5_4x32b;
 3274|  3.87k|            __m128i fract1_8x16b, fract2_8x16b;
 3275|       |
 3276|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3277|  3.87k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3278|       |
 3279|       |            /* fract = pos & (31); */
 3280|  3.87k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3281|       |
 3282|       |            /* idx = pos >> 5; */
 3283|  3.87k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3284|       |
 3285|       |            /*(32 - fract) */
 3286|  3.87k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 3287|       |
 3288|  3.87k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3289|  3.87k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3290|       |
 3291|  3.87k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3292|  3.87k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3293|       |
 3294|  3.87k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3295|  3.87k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3296|       |
 3297|  3.87k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3298|  3.87k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 3299|  3.87k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3300|  3.87k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 3301|       |
 3302|  3.87k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3303|  3.87k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 3304|  3.87k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 3305|  3.87k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 3306|       |
 3307|  3.87k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 3308|       |
 3309|  3.87k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0]));  /* col = 0-7   */
 3310|  3.87k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1]));  /* col = 8-15  */
 3311|  3.87k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2]));  /* col = 16-23 */
 3312|  3.87k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3]));  /* col = 24-31 */
 3313|  3.87k|            src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4]));  /* col = 32-39   */
 3314|  3.87k|            src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5]));  /* col = 40-47  */
 3315|  3.87k|            src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6]));  /* col = 48-55 */
 3316|  3.87k|            src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7]));  /* col = 56-63*/
 3317|       |
 3318|  3.87k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3319|  3.87k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3320|  3.87k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3321|  3.87k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3322|  3.87k|            src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3323|  3.87k|            src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3324|  3.87k|            src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3325|  3.87k|            src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3326|       |
 3327|       |
 3328|  3.87k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 3329|  3.87k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 3330|  3.87k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 3331|  3.87k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 3332|  3.87k|            src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 3333|  3.87k|            src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 3334|  3.87k|            src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 3335|  3.87k|            src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 3336|       |
 3337|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3338|  3.87k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3339|  3.87k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3340|  3.87k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3341|  3.87k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3342|  3.87k|            src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3343|  3.87k|            src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3344|  3.87k|            src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3345|  3.87k|            src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3346|       |
 3347|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3348|  3.87k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 3349|  3.87k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 3350|  3.87k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 3351|  3.87k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 3352|  3.87k|            src_values4 = _mm_srai_epi16(src_values4,  5);
 3353|  3.87k|            src_values5 = _mm_srai_epi16(src_values5,  5);
 3354|  3.87k|            src_values6 = _mm_srai_epi16(src_values6,  5);
 3355|  3.87k|            src_values7 = _mm_srai_epi16(src_values7,  5);
 3356|       |
 3357|       |            /* converting 16 bit to 8 bit */
 3358|  3.87k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 3359|  3.87k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 3360|  3.87k|            src_values1 = _mm_srli_si128(src_values0, 8);
 3361|  3.87k|            src_values3 = _mm_srli_si128(src_values2, 8);
 3362|  3.87k|            src_values4 = _mm_packus_epi16(src_values4, src_values5);
 3363|  3.87k|            src_values6 = _mm_packus_epi16(src_values6, src_values7);
 3364|  3.87k|            src_values5 = _mm_srli_si128(src_values4, 8);
 3365|  3.87k|            src_values7 = _mm_srli_si128(src_values6, 8);
 3366|       |
 3367|       |            /* loading 8-bit 8 pixels values */
 3368|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_values0);       /* row=0*/
 3369|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_values1);   /* row=1*/
 3370|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_values2);   /* row=2*/
 3371|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_values3);   /* row=3*/
 3372|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 4 * dst_strd), src_values4);   /* row=4*/
 3373|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 5 * dst_strd), src_values5);   /* row=5*/
 3374|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 6 * dst_strd), src_values6);   /* row=6*/
 3375|  3.87k|            _mm_storel_epi64((__m128i *)(pu1_dst + 7 * dst_strd), src_values7);   /* row=7*/
 3376|  3.87k|        }
 3377|  3.87k|    }
 3378|  11.4k|    else /* if nt =4*/
 3379|  11.4k|    {
 3380|       |
 3381|  11.4k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 3382|  11.4k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3383|       |
 3384|  11.4k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3385|       |
 3386|       |
 3387|  68.5k|        for(k = 0; k < (nt + 1); k++)
  ------------------
  |  Branch (3387:20): [True: 57.1k, False: 11.4k]
  ------------------
 3388|  57.1k|            ref_temp[k + nt - 1] = pu1_ref[two_nt + k];
 3389|  11.4k|        ref_idx = (nt * intra_pred_ang) >> 5;
 3390|  11.4k|        inv_ang_sum = 128;
 3391|       |
 3392|  25.4k|        for(k = -1; k > ref_idx; k--)
  ------------------
  |  Branch (3392:21): [True: 14.0k, False: 11.4k]
  ------------------
 3393|  14.0k|        {
 3394|  14.0k|            inv_ang_sum += inv_ang;
 3395|  14.0k|            ref_main[k] = pu1_ref[two_nt - (inv_ang_sum >> 8)];
 3396|  14.0k|        }
 3397|       |
 3398|       |
 3399|  11.4k|        const_temp2_4x32b = _mm_set1_epi32(31);
 3400|  11.4k|        const_temp3_4x32b = _mm_set1_epi32(32);
 3401|       |
 3402|  11.4k|        two_nt_4x32b = _mm_set1_epi32(1);
 3403|       |
 3404|       |
 3405|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3406|  11.4k|        intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 3407|       |
 3408|  11.4k|        row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 3409|  11.4k|        {
 3410|  11.4k|            WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 3411|  11.4k|            int temp11, temp21, temp31, temp41;
 3412|       |
 3413|       |
 3414|  11.4k|            __m128i fract1_8x16b, fract2_8x16b,  res_temp5_4x32b;
 3415|  11.4k|            __m128i src_values0, src_values1, src_values2, src_values3;
 3416|  11.4k|            __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 3417|       |
 3418|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3419|  11.4k|            res_temp5_4x32b  = _mm_mullo_epi32(row_4x32b, intra_pred_ang_4x32b);
 3420|       |
 3421|       |            /* fract = pos & (31); */
 3422|  11.4k|            src_values12 = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 3423|       |
 3424|  11.4k|            ref_main_temp0 = _mm_srli_si128(src_values12, 4);  /* next 32 bit values */
 3425|  11.4k|            ref_main_temp1 = _mm_srli_si128(src_values12, 8);  /* next 32 bit values */
 3426|  11.4k|            ref_main_temp2 = _mm_srli_si128(src_values12, 12); /* next 32 bit values */
 3427|  11.4k|            ref_main_idx1  = _mm_cvtsi128_si32(src_values12);    /* row=0*/
 3428|  11.4k|            ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* row=1*/
 3429|  11.4k|            ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* row=2*/
 3430|  11.4k|            ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* row=3*/
 3431|       |
 3432|       |            /* idx = pos >> 5; */
 3433|  11.4k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3434|       |
 3435|       |            /*(32 - fract) */
 3436|  11.4k|            src_values10 = _mm_sub_epi32(const_temp3_4x32b, src_values11);
 3437|       |
 3438|  11.4k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3439|  11.4k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3440|       |
 3441|  11.4k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3442|  11.4k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3443|       |
 3444|  11.4k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3445|  11.4k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3446|       |
 3447|  11.4k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3448|  11.4k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3449|  11.4k|            temp3 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3450|  11.4k|            temp4 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 3451|       |
 3452|  11.4k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1));     /* col = 0-7   */
 3453|  11.4k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx2));   /* col = 8-15  */
 3454|  11.4k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx3));  /* col = 16-23 */
 3455|  11.4k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx4));  /* col = 24-31 */
 3456|       |
 3457|  11.4k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3458|  11.4k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3459|  11.4k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3460|  11.4k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3461|       |
 3462|       |
 3463|  11.4k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 3464|  11.4k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 3465|  11.4k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 3466|  11.4k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 3467|       |
 3468|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3469|  11.4k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3470|  11.4k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3471|  11.4k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3472|  11.4k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3473|       |
 3474|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3475|  11.4k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 3476|  11.4k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 3477|  11.4k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 3478|  11.4k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 3479|       |
 3480|       |            /* converting 16 bit to 8 bit */
 3481|  11.4k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 3482|  11.4k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 3483|  11.4k|            src_values1 = _mm_srli_si128(src_values0, 8);
 3484|  11.4k|            src_values3 = _mm_srli_si128(src_values2, 8);
 3485|       |
 3486|  11.4k|            temp11 = _mm_cvtsi128_si32(src_values0);
 3487|  11.4k|            temp21 = _mm_cvtsi128_si32(src_values1);
 3488|  11.4k|            temp31 = _mm_cvtsi128_si32(src_values2);
 3489|  11.4k|            temp41 = _mm_cvtsi128_si32(src_values3);
 3490|       |
 3491|       |            /* loding 4-bit 8 pixels values */
 3492|  11.4k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 3493|  11.4k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 3494|  11.4k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 3495|  11.4k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 3496|       |
 3497|  11.4k|        }
 3498|  11.4k|    }
 3499|  18.8k|}
ihevc_intra_pred_luma_mode_27_to_33_sse42:
 3546|  19.9k|{
 3547|  19.9k|    WORD32 row;
 3548|  19.9k|    WORD32 two_nt;
 3549|  19.9k|    WORD32 intra_pred_ang;
 3550|       |
 3551|  19.9k|    __m128i temp11, temp12, temp13, temp14;
 3552|       |
 3553|  19.9k|    __m128i     const_temp_8x16b;
 3554|  19.9k|    __m128i temp1, temp2, temp3, temp4, sm3;
 3555|  19.9k|    UNUSED(src_strd);
  ------------------
  |  |   38|  19.9k|#define UNUSED(x) ((void)(x))
  ------------------
 3556|       |
 3557|  19.9k|    two_nt = 2 * nt;
 3558|  19.9k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 3559|       |
 3560|  19.9k|    const_temp_8x16b = _mm_set1_epi16(16);
 3561|  19.9k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 3562|  19.9k|    if(nt == 32)
  ------------------
  |  Branch (3562:8): [True: 1.02k, False: 18.8k]
  ------------------
 3563|  1.02k|    {
 3564|       |
 3565|  1.02k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 3566|  1.02k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3567|  1.02k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3568|  1.02k|        int col = 0;
 3569|       |
 3570|  1.02k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3571|  1.02k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3572|  1.02k|        const_temp8_4x32b = _mm_set1_epi16(8);
 3573|       |
 3574|  1.02k|        two_nt_4x32b = _mm_set1_epi16(two_nt + 1);
 3575|       |
 3576|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3577|  1.02k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3578|       |
 3579|  1.02k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3580|       |
 3581|  5.12k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3581:22): [True: 4.10k, False: 1.02k]
  ------------------
 3582|  4.10k|        {
 3583|       |
 3584|  4.10k|            WORD16 ref_main_idx[9];
 3585|       |
 3586|  4.10k|            __m128i res_temp5_4x32b;
 3587|  4.10k|            __m128i fract1_8x16b, fract2_8x16b;
 3588|  4.10k|            __m128i src_values0, src_values1, src_values2, src_values3;
 3589|  4.10k|            __m128i  src_values4, src_values5, src_values6, src_values7;
 3590|       |
 3591|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3592|  4.10k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3593|       |
 3594|       |            /* fract = pos & (31); */
 3595|  4.10k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3596|       |
 3597|       |            /* idx = pos >> 5; */
 3598|  4.10k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3599|       |
 3600|       |            /*(32 - fract) */
 3601|  4.10k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 3602|       |
 3603|  4.10k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3604|  4.10k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3605|       |
 3606|  4.10k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3607|  4.10k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3608|       |
 3609|  4.10k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3610|  4.10k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3611|       |
 3612|  4.10k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3613|  4.10k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 3614|  4.10k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3615|  4.10k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 3616|       |
 3617|  4.10k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3618|  4.10k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 3619|  4.10k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 3620|  4.10k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 3621|       |
 3622|  4.10k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 3623|  4.10k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 3624|  12.3k|            for(col = 0; col < nt; col += 16)
  ------------------
  |  Branch (3624:26): [True: 8.20k, False: 4.10k]
  ------------------
 3625|  8.20k|            {
 3626|  8.20k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0] + col));
 3627|  8.20k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1] + col));
 3628|  8.20k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2] + col));
 3629|  8.20k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3] + col));
 3630|  8.20k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0] + 8 + col));
 3631|  8.20k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1] + 8 + col));
 3632|  8.20k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2] + 8 + col));
 3633|  8.20k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3] + 8 + col));
 3634|       |
 3635|  8.20k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3636|  8.20k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3637|  8.20k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3638|  8.20k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3639|  8.20k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3640|  8.20k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3641|  8.20k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3642|  8.20k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3643|       |
 3644|       |
 3645|  8.20k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 3646|  8.20k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 3647|  8.20k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 3648|  8.20k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 3649|  8.20k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 3650|  8.20k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 3651|  8.20k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 3652|  8.20k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 3653|       |
 3654|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3655|  8.20k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3656|  8.20k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3657|  8.20k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3658|  8.20k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3659|  8.20k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3660|  8.20k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3661|  8.20k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3662|  8.20k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3663|       |
 3664|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3665|  8.20k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3666|  8.20k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3667|  8.20k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3668|  8.20k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3669|  8.20k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3670|  8.20k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3671|  8.20k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3672|  8.20k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3673|       |
 3674|       |                /* converting 16 bit to 8 bit */
 3675|  8.20k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3676|  8.20k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3677|  8.20k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3678|  8.20k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3679|       |
 3680|       |                /* loading 8-bit 8 pixels values */
 3681|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (0) * dst_strd), src_values0);       /* row=0*/
 3682|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (1) * dst_strd), src_values1);   /* row=1*/
 3683|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (2) * dst_strd), src_values2);   /* row=2*/
 3684|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (3) * dst_strd), src_values3);   /* row=3*/
 3685|       |
 3686|       |
 3687|  8.20k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4] + col));
 3688|  8.20k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5] + col));
 3689|  8.20k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6] + col));
 3690|  8.20k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7] + col));
 3691|  8.20k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4] + 8 + col));
 3692|  8.20k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5] + 8 + col));
 3693|  8.20k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6] + 8 + col));
 3694|  8.20k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7] + 8 + col));
 3695|       |
 3696|  8.20k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3697|  8.20k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3698|  8.20k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3699|  8.20k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3700|  8.20k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3701|  8.20k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3702|  8.20k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3703|  8.20k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3704|       |
 3705|       |
 3706|  8.20k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 3707|  8.20k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 3708|  8.20k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 3709|  8.20k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 3710|  8.20k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 3711|  8.20k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 3712|  8.20k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 3713|  8.20k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 3714|       |
 3715|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3716|  8.20k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3717|  8.20k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3718|  8.20k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3719|  8.20k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3720|  8.20k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3721|  8.20k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3722|  8.20k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3723|  8.20k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3724|       |
 3725|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3726|  8.20k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3727|  8.20k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3728|  8.20k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3729|  8.20k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3730|  8.20k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3731|  8.20k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3732|  8.20k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3733|  8.20k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3734|       |
 3735|       |                /* converting 16 bit to 8 bit */
 3736|  8.20k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3737|  8.20k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3738|  8.20k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3739|  8.20k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3740|       |
 3741|       |                /* loading 8-bit 8 pixels values */
 3742|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (4) * dst_strd), src_values0);   /* row=4*/
 3743|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (5) * dst_strd), src_values1);   /* row=5*/
 3744|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (6) * dst_strd), src_values2);   /* row=6*/
 3745|  8.20k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (7) * dst_strd), src_values3);   /* row=7*/
 3746|       |
 3747|  8.20k|            }
 3748|  4.10k|            pu1_dst += 8 * dst_strd;
 3749|  4.10k|        }
 3750|       |
 3751|  1.02k|    }
 3752|  18.8k|    else if(nt == 16) /* for nt = 16 case */
  ------------------
  |  Branch (3752:13): [True: 3.33k, False: 15.5k]
  ------------------
 3753|  3.33k|    {
 3754|       |
 3755|  3.33k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 3756|  3.33k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3757|  3.33k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3758|       |
 3759|       |
 3760|  3.33k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3761|  3.33k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3762|  3.33k|        const_temp8_4x32b = _mm_set1_epi16(8);
 3763|       |
 3764|  3.33k|        two_nt_4x32b = _mm_set1_epi16(two_nt + 1);
 3765|       |
 3766|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3767|  3.33k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3768|       |
 3769|  3.33k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3770|       |
 3771|  10.0k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3771:22): [True: 6.67k, False: 3.33k]
  ------------------
 3772|  6.67k|        {
 3773|       |
 3774|  6.67k|            WORD16 ref_main_idx[9];
 3775|       |
 3776|  6.67k|            __m128i res_temp5_4x32b;
 3777|  6.67k|            __m128i fract1_8x16b, fract2_8x16b;
 3778|  6.67k|            __m128i src_values0, src_values1, src_values2, src_values3;
 3779|  6.67k|            __m128i  src_values4, src_values5, src_values6, src_values7;
 3780|       |
 3781|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3782|  6.67k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3783|       |
 3784|       |            /* fract = pos & (31); */
 3785|  6.67k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3786|       |
 3787|       |            /* idx = pos >> 5; */
 3788|  6.67k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3789|       |
 3790|       |            /*(32 - fract) */
 3791|  6.67k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 3792|       |
 3793|  6.67k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3794|  6.67k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3795|       |
 3796|  6.67k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3797|  6.67k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3798|       |
 3799|  6.67k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3800|  6.67k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3801|       |
 3802|  6.67k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3803|  6.67k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 3804|  6.67k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3805|  6.67k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 3806|       |
 3807|  6.67k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3808|  6.67k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 3809|  6.67k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 3810|  6.67k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 3811|       |
 3812|  6.67k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 3813|  6.67k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 3814|       |
 3815|  6.67k|            {
 3816|  6.67k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0]));
 3817|  6.67k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1]));
 3818|  6.67k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2]));
 3819|  6.67k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3]));
 3820|  6.67k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0] + 8));
 3821|  6.67k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1] + 8));
 3822|  6.67k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2] + 8));
 3823|  6.67k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3] + 8));
 3824|       |
 3825|  6.67k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3826|  6.67k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3827|  6.67k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3828|  6.67k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3829|  6.67k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3830|  6.67k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3831|  6.67k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3832|  6.67k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3833|       |
 3834|       |
 3835|  6.67k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 3836|  6.67k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 3837|  6.67k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 3838|  6.67k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 3839|  6.67k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 3840|  6.67k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 3841|  6.67k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 3842|  6.67k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 3843|       |
 3844|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3845|  6.67k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3846|  6.67k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3847|  6.67k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3848|  6.67k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3849|  6.67k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3850|  6.67k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3851|  6.67k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3852|  6.67k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3853|       |
 3854|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3855|  6.67k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3856|  6.67k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3857|  6.67k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3858|  6.67k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3859|  6.67k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3860|  6.67k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3861|  6.67k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3862|  6.67k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3863|       |
 3864|       |                /* converting 16 bit to 8 bit */
 3865|  6.67k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3866|  6.67k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3867|  6.67k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3868|  6.67k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3869|       |
 3870|       |                /* loading 8-bit 8 pixels values */
 3871|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (0) * dst_strd), src_values0);       /* row=0*/
 3872|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (1) * dst_strd), src_values1);   /* row=1*/
 3873|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (2) * dst_strd), src_values2);   /* row=2*/
 3874|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (3) * dst_strd), src_values3);   /* row=3*/
 3875|       |
 3876|       |
 3877|  6.67k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4]));
 3878|  6.67k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5]));
 3879|  6.67k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6]));
 3880|  6.67k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7]));
 3881|  6.67k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4] + 8));
 3882|  6.67k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5] + 8));
 3883|  6.67k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6] + 8));
 3884|  6.67k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7] + 8));
 3885|       |
 3886|  6.67k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3887|  6.67k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3888|  6.67k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3889|  6.67k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3890|  6.67k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3891|  6.67k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3892|  6.67k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3893|  6.67k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3894|       |
 3895|       |
 3896|  6.67k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 3897|  6.67k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 3898|  6.67k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 3899|  6.67k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 3900|  6.67k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 3901|  6.67k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 3902|  6.67k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 3903|  6.67k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 3904|       |
 3905|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3906|  6.67k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3907|  6.67k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3908|  6.67k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3909|  6.67k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3910|  6.67k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3911|  6.67k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3912|  6.67k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3913|  6.67k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3914|       |
 3915|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3916|  6.67k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3917|  6.67k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3918|  6.67k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3919|  6.67k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3920|  6.67k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3921|  6.67k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3922|  6.67k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3923|  6.67k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3924|       |
 3925|       |                /* converting 16 bit to 8 bit */
 3926|  6.67k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3927|  6.67k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3928|  6.67k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3929|  6.67k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3930|       |
 3931|       |                /* loading 8-bit 8 pixels values */
 3932|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (4) * dst_strd), src_values0);   /* row=4*/
 3933|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (5) * dst_strd), src_values1);   /* row=5*/
 3934|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (6) * dst_strd), src_values2);   /* row=6*/
 3935|  6.67k|                _mm_storeu_si128((__m128i *)(pu1_dst + (7) * dst_strd), src_values3);   /* row=7*/
 3936|       |
 3937|  6.67k|            }
 3938|  6.67k|            pu1_dst += 8 * dst_strd;
 3939|  6.67k|        }
 3940|       |
 3941|  3.33k|    }
 3942|  15.5k|    else if(nt == 8)
  ------------------
  |  Branch (3942:13): [True: 4.27k, False: 11.2k]
  ------------------
 3943|  4.27k|    {
 3944|       |
 3945|  4.27k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 3946|  4.27k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3947|  4.27k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3948|       |
 3949|       |
 3950|  4.27k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3951|  4.27k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3952|       |
 3953|  4.27k|        two_nt_4x32b = _mm_set1_epi16(two_nt + 1);
 3954|       |
 3955|       |
 3956|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3957|  4.27k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3958|       |
 3959|  4.27k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3960|       |
 3961|       |        //for(row = 0; row < nt; row +=4)
 3962|  4.27k|        {
 3963|       |
 3964|  4.27k|            WORD16 ref_main_idx[9];
 3965|       |
 3966|  4.27k|            __m128i res_temp5_4x32b;
 3967|  4.27k|            __m128i fract1_8x16b, fract2_8x16b;
 3968|  4.27k|            __m128i src_values0, src_values1, src_values2, src_values3;
 3969|  4.27k|            __m128i  src_values4, src_values5, src_values6, src_values7;
 3970|       |
 3971|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3972|  4.27k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3973|       |
 3974|       |            /* fract = pos & (31); */
 3975|  4.27k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3976|       |
 3977|       |            /* idx = pos >> 5; */
 3978|  4.27k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3979|       |
 3980|       |            /*(32 - fract) */
 3981|  4.27k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 3982|       |
 3983|  4.27k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3984|  4.27k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3985|       |
 3986|  4.27k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3987|  4.27k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3988|       |
 3989|  4.27k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3990|  4.27k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3991|       |
 3992|  4.27k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3993|  4.27k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 3994|  4.27k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3995|  4.27k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 3996|       |
 3997|  4.27k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3998|  4.27k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 3999|  4.27k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4000|  4.27k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 4001|       |
 4002|  4.27k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 4003|       |
 4004|  4.27k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0]));  /* col = 0-7   */
 4005|  4.27k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1]));  /* col = 8-15  */
 4006|  4.27k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2]));  /* col = 16-23 */
 4007|  4.27k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3]));  /* col = 24-31 */
 4008|  4.27k|            src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4]));  /* col = 32-39   */
 4009|  4.27k|            src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5]));  /* col = 40-47  */
 4010|  4.27k|            src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6]));  /* col = 48-55 */
 4011|  4.27k|            src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7]));  /* col = 56-63*/
 4012|       |
 4013|  4.27k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4014|  4.27k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4015|  4.27k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4016|  4.27k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4017|  4.27k|            src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4018|  4.27k|            src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4019|  4.27k|            src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4020|  4.27k|            src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4021|       |
 4022|       |
 4023|  4.27k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4024|  4.27k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4025|  4.27k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4026|  4.27k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4027|  4.27k|            src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 4028|  4.27k|            src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 4029|  4.27k|            src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 4030|  4.27k|            src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 4031|       |
 4032|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4033|  4.27k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4034|  4.27k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4035|  4.27k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4036|  4.27k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4037|  4.27k|            src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4038|  4.27k|            src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4039|  4.27k|            src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4040|  4.27k|            src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4041|       |
 4042|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4043|  4.27k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 4044|  4.27k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 4045|  4.27k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 4046|  4.27k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 4047|  4.27k|            src_values4 = _mm_srai_epi16(src_values4,  5);
 4048|  4.27k|            src_values5 = _mm_srai_epi16(src_values5,  5);
 4049|  4.27k|            src_values6 = _mm_srai_epi16(src_values6,  5);
 4050|  4.27k|            src_values7 = _mm_srai_epi16(src_values7,  5);
 4051|       |
 4052|       |            /* converting 16 bit to 8 bit */
 4053|  4.27k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 4054|  4.27k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 4055|  4.27k|            src_values1 = _mm_srli_si128(src_values0, 8);
 4056|  4.27k|            src_values3 = _mm_srli_si128(src_values2, 8);
 4057|  4.27k|            src_values4 = _mm_packus_epi16(src_values4, src_values5);
 4058|  4.27k|            src_values6 = _mm_packus_epi16(src_values6, src_values7);
 4059|  4.27k|            src_values5 = _mm_srli_si128(src_values4, 8);
 4060|  4.27k|            src_values7 = _mm_srli_si128(src_values6, 8);
 4061|       |
 4062|       |            /* loading 8-bit 8 pixels values */
 4063|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_values0);       /* row=0*/
 4064|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_values1);   /* row=1*/
 4065|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_values2);   /* row=2*/
 4066|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_values3);   /* row=3*/
 4067|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 4 * dst_strd), src_values4);   /* row=4*/
 4068|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 5 * dst_strd), src_values5);   /* row=5*/
 4069|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 6 * dst_strd), src_values6);   /* row=6*/
 4070|  4.27k|            _mm_storel_epi64((__m128i *)(pu1_dst + 7 * dst_strd), src_values7);   /* row=7*/
 4071|  4.27k|        }
 4072|       |
 4073|  4.27k|    }
 4074|  11.2k|    else /* if nt =4*/
 4075|  11.2k|    {
 4076|       |
 4077|  11.2k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 4078|  11.2k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 4079|       |
 4080|  11.2k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 4081|       |
 4082|       |
 4083|  11.2k|        const_temp2_4x32b = _mm_set1_epi32(31);
 4084|  11.2k|        const_temp3_4x32b = _mm_set1_epi32(32);
 4085|       |
 4086|  11.2k|        two_nt_4x32b = _mm_set1_epi32(two_nt + 1);
 4087|       |
 4088|       |
 4089|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 4090|  11.2k|        intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 4091|       |
 4092|  11.2k|        row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 4093|  11.2k|        {
 4094|  11.2k|            int temp11, temp21, temp31, temp41;
 4095|       |
 4096|  11.2k|            WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 4097|       |
 4098|  11.2k|            __m128i fract1_8x16b, fract2_8x16b, res_temp5_4x32b;
 4099|  11.2k|            __m128i src_values0, src_values1, src_values2, src_values3;
 4100|  11.2k|            __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 4101|       |
 4102|       |            /* pos = ((row + 1) * intra_pred_ang); */
 4103|  11.2k|            res_temp5_4x32b  = _mm_mullo_epi32(row_4x32b, intra_pred_ang_4x32b);
 4104|       |
 4105|       |            /* fract = pos & (31); */
 4106|  11.2k|            src_values12 = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 4107|       |
 4108|  11.2k|            ref_main_temp0 = _mm_srli_si128(src_values12, 4);  /* next 32 bit values */
 4109|  11.2k|            ref_main_temp1 = _mm_srli_si128(src_values12, 8);  /* next 32 bit values */
 4110|  11.2k|            ref_main_temp2 = _mm_srli_si128(src_values12, 12); /* next 32 bit values */
 4111|  11.2k|            ref_main_idx1  = _mm_cvtsi128_si32(src_values12);    /* row=0*/
 4112|  11.2k|            ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* row=1*/
 4113|  11.2k|            ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* row=2*/
 4114|  11.2k|            ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* row=3*/
 4115|       |
 4116|       |            /* idx = pos >> 5; */
 4117|  11.2k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 4118|       |
 4119|       |            /*(32 - fract) */
 4120|  11.2k|            src_values10 = _mm_sub_epi32(const_temp3_4x32b, src_values11);
 4121|       |
 4122|  11.2k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4123|  11.2k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4124|       |
 4125|  11.2k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4126|  11.2k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4127|       |
 4128|  11.2k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4129|  11.2k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4130|       |
 4131|  11.2k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4132|  11.2k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4133|  11.2k|            temp3 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4134|  11.2k|            temp4 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4135|       |
 4136|  11.2k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1));     /* col = 0-7   */
 4137|  11.2k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx2));   /* col = 8-15  */
 4138|  11.2k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx3));  /* col = 16-23 */
 4139|  11.2k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx4));  /* col = 24-31 */
 4140|       |
 4141|  11.2k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4142|  11.2k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4143|  11.2k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4144|  11.2k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4145|       |
 4146|  11.2k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4147|  11.2k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4148|  11.2k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4149|  11.2k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4150|       |
 4151|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4152|  11.2k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4153|  11.2k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4154|  11.2k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4155|  11.2k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4156|       |
 4157|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4158|  11.2k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 4159|  11.2k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 4160|  11.2k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 4161|  11.2k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 4162|       |
 4163|       |            /* converting 16 bit to 8 bit */
 4164|  11.2k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 4165|  11.2k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 4166|  11.2k|            src_values1 = _mm_srli_si128(src_values0, 8);
 4167|  11.2k|            src_values3 = _mm_srli_si128(src_values2, 8);
 4168|       |
 4169|  11.2k|            temp11 = _mm_cvtsi128_si32(src_values0);
 4170|  11.2k|            temp21 = _mm_cvtsi128_si32(src_values1);
 4171|  11.2k|            temp31 = _mm_cvtsi128_si32(src_values2);
 4172|  11.2k|            temp41 = _mm_cvtsi128_si32(src_values3);
 4173|       |
 4174|       |            /* loding 4-bit 8 pixels values */
 4175|  11.2k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 4176|  11.2k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 4177|  11.2k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 4178|  11.2k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 4179|       |
 4180|  11.2k|        }
 4181|  11.2k|    }
 4182|  19.9k|}

ihevc_intra_pred_ref_filtering_ssse3:
  393|   329k|{
  394|   329k|    WORD32 filter_flag;
  395|   329k|    WORD32 i; /* Generic indexing variable */
  396|   329k|    WORD32 four_nt = 4 * nt;
  397|   329k|    UWORD8 au1_flt[(4 * MAX_CU_SIZE) + 1];
  398|   329k|    WORD32 bi_linear_int_flag = 0;
  399|   329k|    WORD32 abs_cond_left_flag = 0;
  400|   329k|    WORD32 abs_cond_top_flag = 0;
  401|   329k|    WORD32 dc_val = 1 << (BIT_DEPTH - 5);
  ------------------
  |  |   70|   329k|#define BIT_DEPTH 8
  ------------------
  402|   329k|    __m128i src_temp1, src_temp2, src_temp3, src_temp7;
  403|   329k|    __m128i src_temp4, src_temp5, src_temp6, src_temp8;
  404|       |
  405|       |    //WORD32 strong_intra_smoothing_enable_flag  = 1;
  406|       |
  407|   329k|    filter_flag = gau1_intra_pred_ref_filter[mode] & (1 << (CTZ(nt) - 2));
  408|   329k|    if(0 == filter_flag)
  ------------------
  |  Branch (408:8): [True: 191k, False: 138k]
  ------------------
  409|   191k|    {
  410|   191k|        if(pu1_src == pu1_dst)
  ------------------
  |  Branch (410:12): [True: 191k, False: 18.4E]
  ------------------
  411|   191k|        {
  412|   191k|            return;
  413|   191k|        }
  414|  18.4E|        else
  415|  18.4E|        {
  416|  18.4E|            if(nt == 4)
  ------------------
  |  Branch (416:16): [True: 0, False: 18.4E]
  ------------------
  417|      0|            {
  418|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  419|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  420|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  421|       |
  422|      0|            }
  423|       |
  424|  18.4E|            else if(nt == 8)
  ------------------
  |  Branch (424:21): [True: 0, False: 18.4E]
  ------------------
  425|      0|            {
  426|       |
  427|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  428|      0|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_src + 16));
  429|       |
  430|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  431|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  432|       |
  433|       |
  434|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  435|      0|            }
  436|  18.4E|            else if(nt == 16)
  ------------------
  |  Branch (436:21): [True: 0, False: 18.4E]
  ------------------
  437|      0|            {
  438|       |
  439|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  440|      0|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_src + 16));
  441|      0|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_src + 32));
  442|      0|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_src + 48));
  443|       |
  444|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  445|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  446|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  447|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  448|       |
  449|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  450|      0|            }
  451|  18.4E|            else if(nt == 32)
  ------------------
  |  Branch (451:21): [True: 0, False: 18.4E]
  ------------------
  452|      0|            {
  453|       |
  454|      0|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src));
  455|      0|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_src + 16));
  456|      0|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_src + 32));
  457|      0|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_src + 48));
  458|       |
  459|      0|                src_temp5 = _mm_loadu_si128((__m128i *)(pu1_src + 64));
  460|      0|                src_temp6 = _mm_loadu_si128((__m128i *)(pu1_src + 80));
  461|      0|                src_temp7 = _mm_loadu_si128((__m128i *)(pu1_src + 96));
  462|      0|                src_temp8 = _mm_loadu_si128((__m128i *)(pu1_src + 112));
  463|       |
  464|      0|                _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  465|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  466|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  467|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  468|       |
  469|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 64), src_temp5);
  470|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 80), src_temp6);
  471|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 96), src_temp7);
  472|      0|                _mm_storeu_si128((__m128i *)(pu1_dst + 112), src_temp8);
  473|       |
  474|      0|                pu1_dst[four_nt] = pu1_src[four_nt];
  475|      0|            }
  476|       |
  477|  18.4E|        }
  478|   191k|    }
  479|       |
  480|   138k|    else
  481|   138k|    {
  482|       |        /* If strong intra smoothin is enabled and transform size is 32 */
  483|   138k|        if((1 == strong_intra_smoothing_enable_flag) && (32 == nt))
  ------------------
  |  Branch (483:12): [True: 4.40k, False: 134k]
  |  Branch (483:57): [True: 814, False: 3.59k]
  ------------------
  484|    814|        {
  485|       |            /* Strong Intra Filtering */
  486|    814|            abs_cond_top_flag = (abs(pu1_src[2 * nt] + pu1_src[4 * nt]
  487|    814|                            - (2 * pu1_src[3 * nt]))) < dc_val;
  488|    814|            abs_cond_left_flag = (abs(pu1_src[2 * nt] + pu1_src[0]
  489|    814|                            - (2 * pu1_src[nt]))) < dc_val;
  490|       |
  491|    814|            bi_linear_int_flag = ((1 == abs_cond_left_flag)
  ------------------
  |  Branch (491:35): [True: 477, False: 337]
  ------------------
  492|    814|                            && (1 == abs_cond_top_flag));
  ------------------
  |  Branch (492:32): [True: 380, False: 97]
  ------------------
  493|    814|        }
  494|       |        /* Extremities Untouched*/
  495|   138k|        au1_flt[0] = pu1_src[0];
  496|   138k|        au1_flt[4 * nt] = pu1_src[4 * nt];
  497|       |
  498|       |        /* Strong filtering of reference samples */
  499|   138k|        if(1 == bi_linear_int_flag)
  ------------------
  |  Branch (499:12): [True: 380, False: 138k]
  ------------------
  500|    380|        {
  501|    380|            au1_flt[2 * nt] = pu1_src[2 * nt];
  502|       |
  503|  24.3k|            for(i = 1; i < (2 * nt); i++)
  ------------------
  |  Branch (503:24): [True: 23.9k, False: 380]
  ------------------
  504|  23.9k|                au1_flt[i] = (((2 * nt) - i) * pu1_src[0] + i * pu1_src[2 * nt] + 32) >> 6;
  505|       |
  506|  24.3k|            for(i = 1; i < (2 * nt); i++)
  ------------------
  |  Branch (506:24): [True: 23.9k, False: 380]
  ------------------
  507|  23.9k|                au1_flt[i + (2 * nt)] = (((2 * nt) - i) * pu1_src[2 * nt] + i * pu1_src[4 * nt] + 32) >> 6;
  508|    380|        }
  509|   138k|        else
  510|   138k|        {
  511|   138k|            __m128i const_value_8x16, zero_8x16b;
  512|       |
  513|   138k|            const_value_8x16 = _mm_set1_epi16(2);
  514|       |
  515|   138k|            au1_flt[0] = pu1_src[0];
  516|   138k|            au1_flt[4 * nt] = pu1_src[4 * nt];
  517|       |
  518|   138k|            zero_8x16b = _mm_setzero_si128();
  519|       |
  520|       |            /* Perform bilinear filtering of Reference Samples */
  521|   826k|            for(i = 0; i < (four_nt); i += 16)
  ------------------
  |  Branch (521:24): [True: 688k, False: 138k]
  ------------------
  522|   688k|            {
  523|   688k|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_src + i));
  524|   688k|                src_temp2 = _mm_srli_si128(src_temp1, 1);
  525|   688k|                src_temp3 = _mm_srli_si128(src_temp2, 1);
  526|       |
  527|   688k|                src_temp1 = _mm_unpacklo_epi8(src_temp1, zero_8x16b);
  528|   688k|                src_temp2 = _mm_unpacklo_epi8(src_temp2, zero_8x16b);
  529|   688k|                src_temp3 = _mm_unpacklo_epi8(src_temp3, zero_8x16b);
  530|       |
  531|   688k|                src_temp2 = _mm_slli_epi16(src_temp2,  1);
  532|       |
  533|   688k|                src_temp1 = _mm_add_epi16(src_temp1, src_temp2);
  534|   688k|                src_temp1 = _mm_add_epi16(src_temp1, src_temp3);
  535|   688k|                src_temp1 = _mm_add_epi16(src_temp1, const_value_8x16);
  536|       |
  537|   688k|                src_temp1 = _mm_srai_epi16(src_temp1,  2);
  538|       |
  539|   688k|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_src + 8 + i));
  540|   688k|                src_temp5 = _mm_srli_si128(src_temp4, 1);
  541|   688k|                src_temp6 = _mm_srli_si128(src_temp5, 1);
  542|       |
  543|   688k|                src_temp4 = _mm_unpacklo_epi8(src_temp4, zero_8x16b);
  544|   688k|                src_temp5 = _mm_unpacklo_epi8(src_temp5, zero_8x16b);
  545|   688k|                src_temp6 = _mm_unpacklo_epi8(src_temp6, zero_8x16b);
  546|       |
  547|   688k|                src_temp5 = _mm_slli_epi16(src_temp5,  1);
  548|       |
  549|   688k|                src_temp4 = _mm_add_epi16(src_temp4, src_temp5);
  550|   688k|                src_temp4 = _mm_add_epi16(src_temp4, src_temp6);
  551|   688k|                src_temp4 = _mm_add_epi16(src_temp4, const_value_8x16);
  552|       |
  553|   688k|                src_temp4 = _mm_srai_epi16(src_temp4,  2);
  554|       |
  555|       |                /* converting 16 bit to 8 bit */
  556|   688k|                src_temp1 = _mm_packus_epi16(src_temp1, src_temp4);
  557|       |
  558|   688k|                _mm_storeu_si128((__m128i *)(au1_flt + 1 + i), src_temp1);
  559|   688k|            }
  560|   138k|            au1_flt[4 * nt] = pu1_src[4 * nt];
  561|   138k|        }
  562|       |
  563|   138k|        if(nt == 4)
  ------------------
  |  Branch (563:12): [True: 0, False: 138k]
  ------------------
  564|      0|        {
  565|      0|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  566|      0|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  567|      0|            pu1_dst[four_nt] = au1_flt[four_nt];
  568|      0|        }
  569|   138k|        else if(nt == 8)
  ------------------
  |  Branch (569:17): [True: 21.8k, False: 116k]
  ------------------
  570|  21.8k|        {
  571|       |
  572|  21.8k|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  573|  21.8k|            src_temp2 = _mm_loadu_si128((__m128i *)(au1_flt + 16));
  574|       |
  575|  21.8k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  576|  21.8k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  577|       |
  578|  21.8k|            pu1_dst[four_nt] = au1_flt[four_nt];
  579|  21.8k|        }
  580|   116k|        else if(nt == 16)
  ------------------
  |  Branch (580:17): [True: 75.3k, False: 41.4k]
  ------------------
  581|  75.3k|        {
  582|       |
  583|  75.3k|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  584|  75.3k|            src_temp2 = _mm_loadu_si128((__m128i *)(au1_flt + 16));
  585|  75.3k|            src_temp3 = _mm_loadu_si128((__m128i *)(au1_flt + 32));
  586|  75.3k|            src_temp4 = _mm_loadu_si128((__m128i *)(au1_flt + 48));
  587|       |
  588|  75.3k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  589|  75.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  590|  75.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  591|  75.3k|            _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  592|       |
  593|  75.3k|            pu1_dst[four_nt] = au1_flt[four_nt];
  594|  75.3k|        }
  595|       |
  596|  41.4k|        else if(nt == 32)
  ------------------
  |  Branch (596:17): [True: 43.6k, False: 18.4E]
  ------------------
  597|  43.6k|        {
  598|       |
  599|  43.6k|            src_temp1 = _mm_loadu_si128((__m128i *)(au1_flt));
  600|  43.6k|            src_temp2 = _mm_loadu_si128((__m128i *)(au1_flt + 16));
  601|  43.6k|            src_temp3 = _mm_loadu_si128((__m128i *)(au1_flt + 32));
  602|  43.6k|            src_temp4 = _mm_loadu_si128((__m128i *)(au1_flt + 48));
  603|       |
  604|  43.6k|            src_temp5 = _mm_loadu_si128((__m128i *)(au1_flt + 64));
  605|  43.6k|            src_temp6 = _mm_loadu_si128((__m128i *)(au1_flt + 80));
  606|  43.6k|            src_temp7 = _mm_loadu_si128((__m128i *)(au1_flt + 96));
  607|  43.6k|            src_temp8 = _mm_loadu_si128((__m128i *)(au1_flt + 112));
  608|       |
  609|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp1);
  610|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), src_temp2);
  611|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 32), src_temp3);
  612|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 48), src_temp4);
  613|       |
  614|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 64), src_temp5);
  615|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 80), src_temp6);
  616|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 96), src_temp7);
  617|  43.6k|            _mm_storeu_si128((__m128i *)(pu1_dst + 112), src_temp8);
  618|       |
  619|  43.6k|            pu1_dst[four_nt] = au1_flt[four_nt];
  620|  43.6k|        }
  621|       |
  622|   138k|    }
  623|   329k|}
ihevc_intra_pred_luma_planar_ssse3:
  669|   155k|{
  670|       |
  671|       |
  672|   155k|    WORD32 row, col;
  673|   155k|    WORD32 two_nt, three_nt;
  674|   155k|    UWORD16 temp;
  675|       |
  676|   155k|    __m128i pu1_ref_16x8b, const_temp_4x32b, const_temp1_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
  677|   155k|    __m128i col_8x16b, const_temp5_4x32b, const_temp6_4x32b, zero_8x16b, const_temp7_4x32b, const_temp8_4x32b;
  678|   155k|    __m128i nt_row_16x8b, nt_row1_16x8b, nt_row2_16x8b, nt_row3_16x8b; //nt-1-row
  679|   155k|    __m128i row_16x8b, row1_16x8b, row2_16x8b, row3_16x8b; //row+1
  680|   155k|    UNUSED(src_strd);
  ------------------
  |  |   38|   155k|#define UNUSED(x) ((void)(x))
  ------------------
  681|   155k|    UNUSED(mode);
  ------------------
  |  |   38|   155k|#define UNUSED(x) ((void)(x))
  ------------------
  682|       |
  683|   155k|    two_nt = 2 * nt;
  684|   155k|    three_nt = 3 * nt;
  685|       |
  686|       |    /* Planar filtering */
  687|   155k|    temp = pu1_ref[nt - 1];
  688|   155k|    temp = (temp << 8) | ((UWORD16)pu1_ref[three_nt + 1]);
  689|       |    /* setting vallues in  registera*/
  690|   155k|    pu1_ref_16x8b  = _mm_set1_epi16(temp);
  691|   155k|    const_temp6_4x32b = _mm_set1_epi16(nt);
  692|       |
  693|       |
  694|       |
  695|   155k|    if(nt == 32) /* for nt multiple of 8*/
  ------------------
  |  Branch (695:8): [True: 26.4k, False: 129k]
  ------------------
  696|  26.4k|    {
  697|       |
  698|       |
  699|  26.4k|        const_temp4_4x32b = _mm_set1_epi16(0x0400);
  700|  26.4k|        const_temp1_4x32b = _mm_set1_epi16(0x0100);
  701|  26.4k|        const_temp8_4x32b = _mm_set1_epi16(0x0008);
  702|       |        //(nt-1-y) (nt-1-x) ; x= 0..15 , y = row
  703|       |        //const_temp5_4x32b = _mm_set_epi8(nt_row, 0,nt_row, 1,nt_row, 2,nt_row, 3,nt_row, 4,nt_row, 5,nt_row, 6,nt_row, 7);
  704|  26.4k|        nt_row_16x8b = _mm_set_epi16(0x1f18, 0x1f19, 0x1f1a, 0x1f1b, 0x1f1c, 0x1f1d, 0x1f1e, 0x1f1f);
  705|       |        //(y+1) (x+1) ; x= 0..15 , y = row
  706|       |        //const_temp3_4x32b = _mm_set_epi16(row1,8,row1, 7,row1, 6, row1, 5,row1, 4, row1, 3, row1, 2, row1, 1);
  707|  26.4k|        row_16x8b = _mm_set_epi16(0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101);
  708|       |
  709|   854k|        for(row = 0; row < nt; row += 1)
  ------------------
  |  Branch (709:22): [True: 827k, False: 26.4k]
  ------------------
  710|   827k|        {
  711|   827k|            __m128i res_temp_8x16b, res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b;
  712|   827k|            __m128i res_temp4_8x16b, res_temp5_8x16b, res_temp6_8x16b, res_temp7_8x16b;
  713|       |
  714|   827k|            __m128i src_temp_8x16b, src_temp1_8x16b;
  715|       |
  716|       |
  717|   827k|            res_temp1_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 1 - row]);
  718|       |
  719|   827k|            nt_row1_16x8b = _mm_sub_epi16(nt_row_16x8b,  const_temp8_4x32b);
  720|   827k|            row1_16x8b    = _mm_add_epi16(row_16x8b,     const_temp8_4x32b);
  721|   827k|            nt_row2_16x8b = _mm_sub_epi16(nt_row1_16x8b, const_temp8_4x32b);
  722|   827k|            row2_16x8b    = _mm_add_epi16(row1_16x8b,    const_temp8_4x32b);
  723|   827k|            nt_row3_16x8b = _mm_sub_epi16(nt_row2_16x8b, const_temp8_4x32b);
  724|   827k|            row3_16x8b    = _mm_add_epi16(row2_16x8b,    const_temp8_4x32b);
  725|       |            /* loding 8bit 16 pixles*/
  726|   827k|            src_temp_8x16b  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  727|   827k|            src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 17));
  728|       |
  729|   827k|            res_temp4_8x16b =  _mm_unpacklo_epi8(res_temp1_8x16b, src_temp_8x16b); /* row=0*/
  730|   827k|            res_temp5_8x16b =  _mm_unpackhi_epi8(res_temp1_8x16b, src_temp_8x16b); /* row=1*/
  731|   827k|            res_temp6_8x16b =  _mm_unpacklo_epi8(res_temp1_8x16b, src_temp1_8x16b); /* row=2*/
  732|   827k|            res_temp7_8x16b =  _mm_unpackhi_epi8(res_temp1_8x16b, src_temp1_8x16b); /* row=3*/
  733|       |
  734|       |            /*(row + 1) * pu1_ref[nt - 1] + (col + 1) * pu1_ref[three_nt + 1] */
  735|   827k|            res_temp_8x16b  = _mm_maddubs_epi16(pu1_ref_16x8b, row_16x8b);
  736|   827k|            res_temp1_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row1_16x8b);
  737|   827k|            res_temp2_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row2_16x8b);
  738|   827k|            res_temp3_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row3_16x8b);
  739|       |            /* (nt - 1 - row) * pu1_ref[two_nt + 1 + col] + (nt - 1 - col)* pu1_ref[two_nt - 1 - row] */
  740|   827k|            res_temp4_8x16b = _mm_maddubs_epi16(res_temp4_8x16b, nt_row_16x8b);
  741|   827k|            res_temp5_8x16b = _mm_maddubs_epi16(res_temp5_8x16b, nt_row1_16x8b);
  742|   827k|            res_temp6_8x16b = _mm_maddubs_epi16(res_temp6_8x16b, nt_row2_16x8b);
  743|   827k|            res_temp7_8x16b = _mm_maddubs_epi16(res_temp7_8x16b, nt_row3_16x8b);
  744|       |
  745|   827k|            res_temp_8x16b  = _mm_add_epi16(res_temp_8x16b, res_temp4_8x16b);
  746|   827k|            res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp5_8x16b);
  747|   827k|            res_temp2_8x16b = _mm_add_epi16(res_temp2_8x16b, res_temp6_8x16b);
  748|   827k|            res_temp3_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp7_8x16b);
  749|       |            /*res_temp + nt)*/
  750|   827k|            res_temp_8x16b  = _mm_add_epi16(res_temp_8x16b, const_temp6_4x32b);
  751|   827k|            res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, const_temp6_4x32b);
  752|   827k|            res_temp2_8x16b = _mm_add_epi16(res_temp2_8x16b, const_temp6_4x32b);
  753|   827k|            res_temp3_8x16b = _mm_add_epi16(res_temp3_8x16b, const_temp6_4x32b);
  754|       |
  755|   827k|            res_temp_8x16b  = _mm_srli_epi16(res_temp_8x16b, 6); //log2(32)+1
  756|   827k|            res_temp1_8x16b = _mm_srli_epi16(res_temp1_8x16b, 6);
  757|   827k|            res_temp2_8x16b = _mm_srli_epi16(res_temp2_8x16b, 6);
  758|   827k|            res_temp3_8x16b = _mm_srli_epi16(res_temp3_8x16b, 6);
  759|       |
  760|   827k|            res_temp_8x16b  = _mm_packus_epi16(res_temp_8x16b, res_temp1_8x16b);
  761|   827k|            res_temp1_8x16b = _mm_packus_epi16(res_temp2_8x16b, res_temp3_8x16b);
  762|       |
  763|       |
  764|   827k|            _mm_storeu_si128((__m128i *)(pu1_dst + (row * dst_strd)), res_temp_8x16b);
  765|   827k|            _mm_storeu_si128((__m128i *)(pu1_dst + (row * dst_strd) + 16), res_temp1_8x16b);
  766|       |
  767|       |
  768|   827k|            nt_row_16x8b = _mm_sub_epi16(nt_row_16x8b, const_temp1_4x32b);
  769|   827k|            row_16x8b    = _mm_add_epi16(row_16x8b,    const_temp1_4x32b);
  770|   827k|        }
  771|  26.4k|    }
  772|   129k|    else if(nt == 16) /* for nt multiple of 8*/
  ------------------
  |  Branch (772:13): [True: 47.1k, False: 82.1k]
  ------------------
  773|  47.1k|    {
  774|       |
  775|  47.1k|        const_temp4_4x32b = _mm_set1_epi16(0x0400);
  776|  47.1k|        const_temp1_4x32b = _mm_set1_epi16(0x0100);
  777|  47.1k|        const_temp8_4x32b = _mm_set1_epi16(0x0008);
  778|       |        //(nt-1-y) (nt-1-x) ; x= 0..15 , y = row
  779|       |        //const_temp5_4x32b = _mm_set_epi8(nt_row, 0,nt_row, 1,nt_row, 2,nt_row, 3,nt_row, 4,nt_row, 5,nt_row, 6,nt_row, 7);
  780|  47.1k|        nt_row_16x8b = _mm_set_epi16(0x0f08, 0x0f09, 0x0f0a, 0x0f0b, 0x0f0c, 0x0f0d, 0x0f0e, 0x0f0f);
  781|       |        //(y+1) (x+1) ; x= 0..15 , y = row
  782|       |        //const_temp3_4x32b = _mm_set_epi16(row1,8,row1, 7,row1, 6, row1, 5,row1, 4, row1, 3, row1, 2, row1, 1);
  783|  47.1k|        row_16x8b = _mm_set_epi16(0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101);
  784|       |
  785|   407k|        for(row = 0; row < nt; row += 2)
  ------------------
  |  Branch (785:22): [True: 360k, False: 47.1k]
  ------------------
  786|   360k|        {
  787|   360k|            __m128i res_temp_8x16b, res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b;
  788|   360k|            __m128i res_temp4_8x16b, res_temp5_8x16b, res_temp6_8x16b, res_temp7_8x16b;
  789|       |
  790|   360k|            __m128i src_temp_8x16b;
  791|       |
  792|       |
  793|   360k|            res_temp1_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 1 - row]);
  794|   360k|            res_temp2_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 2 - row]);
  795|       |
  796|       |
  797|   360k|            nt_row1_16x8b = _mm_sub_epi16(nt_row_16x8b,  const_temp1_4x32b);
  798|   360k|            row1_16x8b    = _mm_add_epi16(row_16x8b,     const_temp1_4x32b);
  799|   360k|            nt_row2_16x8b = _mm_sub_epi16(nt_row_16x8b,  const_temp8_4x32b);
  800|   360k|            row2_16x8b    = _mm_add_epi16(row_16x8b,     const_temp8_4x32b);
  801|   360k|            nt_row3_16x8b = _mm_sub_epi16(nt_row1_16x8b, const_temp8_4x32b);
  802|   360k|            row3_16x8b    = _mm_add_epi16(row1_16x8b,    const_temp8_4x32b);
  803|       |            /* loding 8bit 16 pixles*/
  804|   360k|            src_temp_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  805|       |
  806|       |
  807|   360k|            res_temp4_8x16b =  _mm_unpacklo_epi8(res_temp1_8x16b, src_temp_8x16b); /* row=0*/
  808|   360k|            res_temp5_8x16b =  _mm_unpacklo_epi8(res_temp2_8x16b, src_temp_8x16b); /* row=1*/
  809|   360k|            res_temp6_8x16b =  _mm_unpackhi_epi8(res_temp1_8x16b, src_temp_8x16b); /* row=2*/
  810|   360k|            res_temp7_8x16b =  _mm_unpackhi_epi8(res_temp2_8x16b, src_temp_8x16b); /* row=3*/
  811|       |
  812|       |            /*(row + 1) * pu1_ref[nt - 1] + (col + 1) * pu1_ref[three_nt + 1] */
  813|   360k|            res_temp_8x16b  = _mm_maddubs_epi16(pu1_ref_16x8b, row_16x8b);
  814|   360k|            res_temp1_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row1_16x8b);
  815|   360k|            res_temp2_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row2_16x8b);
  816|   360k|            res_temp3_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row3_16x8b);
  817|       |            /* (nt - 1 - row) * pu1_ref[two_nt + 1 + col] + (nt - 1 - col)* pu1_ref[two_nt - 1 - row] */
  818|   360k|            res_temp4_8x16b = _mm_maddubs_epi16(res_temp4_8x16b, nt_row_16x8b);
  819|   360k|            res_temp5_8x16b = _mm_maddubs_epi16(res_temp5_8x16b, nt_row1_16x8b);
  820|   360k|            res_temp6_8x16b = _mm_maddubs_epi16(res_temp6_8x16b, nt_row2_16x8b);
  821|   360k|            res_temp7_8x16b = _mm_maddubs_epi16(res_temp7_8x16b, nt_row3_16x8b);
  822|       |
  823|   360k|            res_temp_8x16b  = _mm_add_epi16(res_temp_8x16b, res_temp4_8x16b);
  824|   360k|            res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp5_8x16b);
  825|   360k|            res_temp2_8x16b = _mm_add_epi16(res_temp2_8x16b, res_temp6_8x16b);
  826|   360k|            res_temp3_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp7_8x16b);
  827|       |            /*res_temp + nt)*/
  828|   360k|            res_temp_8x16b  = _mm_add_epi16(res_temp_8x16b, const_temp6_4x32b);
  829|   360k|            res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, const_temp6_4x32b);
  830|   360k|            res_temp2_8x16b = _mm_add_epi16(res_temp2_8x16b, const_temp6_4x32b);
  831|   360k|            res_temp3_8x16b = _mm_add_epi16(res_temp3_8x16b, const_temp6_4x32b);
  832|       |
  833|   360k|            res_temp_8x16b  = _mm_srli_epi16(res_temp_8x16b, 5); //log2(16)+1
  834|   360k|            res_temp1_8x16b = _mm_srli_epi16(res_temp1_8x16b, 5);
  835|   360k|            res_temp2_8x16b = _mm_srli_epi16(res_temp2_8x16b, 5);
  836|   360k|            res_temp3_8x16b = _mm_srli_epi16(res_temp3_8x16b, 5);
  837|       |
  838|   360k|            res_temp_8x16b  = _mm_packus_epi16(res_temp_8x16b, res_temp2_8x16b);
  839|   360k|            res_temp1_8x16b = _mm_packus_epi16(res_temp1_8x16b, res_temp3_8x16b);
  840|       |
  841|   360k|            _mm_storeu_si128((__m128i *)(pu1_dst + (row * dst_strd)), res_temp_8x16b);
  842|   360k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), res_temp1_8x16b);
  843|       |
  844|   360k|            nt_row_16x8b = _mm_sub_epi16(nt_row1_16x8b, const_temp1_4x32b);
  845|   360k|            row_16x8b    = _mm_add_epi16(row1_16x8b,    const_temp1_4x32b);
  846|   360k|        }
  847|  47.1k|    }
  848|  82.1k|    else if(nt == 8)
  ------------------
  |  Branch (848:13): [True: 41.4k, False: 40.6k]
  ------------------
  849|  41.4k|    {
  850|       |
  851|       |
  852|  41.4k|        const_temp4_4x32b = _mm_set1_epi16(0x0400);
  853|  41.4k|        const_temp1_4x32b = _mm_set1_epi16(0x0100);
  854|  41.4k|        zero_8x16b = _mm_set1_epi32(0);
  855|       |
  856|       |        //(nt-1-y) (nt-1-x) ; x= 0..7 , y = row
  857|       |        //const_temp5_4x32b = _mm_set_epi8(nt_row, 0,nt_row, 1,nt_row, 2,nt_row, 3,nt_row, 4,nt_row, 5,nt_row, 6,nt_row, 7);
  858|  41.4k|        nt_row_16x8b = _mm_set_epi16(0x0700, 0x0701, 0x0702, 0x0703, 0x0704, 0x0705, 0x0706, 0x0707);
  859|       |        //(y+1) (x+1) ; x= 0..7 , y = row
  860|       |        //const_temp3_4x32b = _mm_set_epi16(row1,8,row1, 7,row1, 6, row1, 5,row1, 4, row1, 3, row1, 2, row1, 1);
  861|  41.4k|        row_16x8b = _mm_set_epi16(0x0108, 0x0107, 0x0106, 0x0105, 0x0104, 0x0103, 0x0102, 0x0101);
  862|       |
  863|   124k|        for(row = 0; row < nt; row += 4)
  ------------------
  |  Branch (863:22): [True: 82.6k, False: 41.4k]
  ------------------
  864|  82.6k|        {
  865|  82.6k|            __m128i res_temp_8x16b, res_temp1_8x16b, res_temp2_8x16b, res_temp3_8x16b;
  866|  82.6k|            __m128i res_temp4_8x16b, res_temp5_8x16b, res_temp6_8x16b, res_temp7_8x16b;
  867|       |
  868|  82.6k|            __m128i src_temp_8x16b;
  869|       |
  870|       |
  871|  82.6k|            res_temp4_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 1 - row]);
  872|  82.6k|            res_temp5_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 2 - row]);
  873|  82.6k|            res_temp6_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 3 - row]);
  874|  82.6k|            res_temp7_8x16b  = _mm_set1_epi8(pu1_ref[two_nt - 4 - row]);
  875|       |
  876|  82.6k|            nt_row1_16x8b = _mm_sub_epi16(nt_row_16x8b,  const_temp1_4x32b);
  877|  82.6k|            row1_16x8b    = _mm_add_epi16(row_16x8b,     const_temp1_4x32b);
  878|  82.6k|            nt_row2_16x8b = _mm_sub_epi16(nt_row1_16x8b, const_temp1_4x32b);
  879|  82.6k|            row2_16x8b    = _mm_add_epi16(row1_16x8b,    const_temp1_4x32b);
  880|  82.6k|            nt_row3_16x8b = _mm_sub_epi16(nt_row2_16x8b, const_temp1_4x32b);
  881|  82.6k|            row3_16x8b    = _mm_add_epi16(row2_16x8b,    const_temp1_4x32b);
  882|       |            /* loding 8bit 16 pixles*/
  883|  82.6k|            src_temp_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
  884|       |
  885|  82.6k|            res_temp4_8x16b =  _mm_unpacklo_epi8(res_temp4_8x16b, src_temp_8x16b); /* row=0*/
  886|  82.6k|            res_temp5_8x16b =  _mm_unpacklo_epi8(res_temp5_8x16b, src_temp_8x16b); /* row=1*/
  887|  82.6k|            res_temp6_8x16b =  _mm_unpacklo_epi8(res_temp6_8x16b, src_temp_8x16b); /* row=2*/
  888|  82.6k|            res_temp7_8x16b =  _mm_unpacklo_epi8(res_temp7_8x16b, src_temp_8x16b); /* row=3*/
  889|       |
  890|       |            /*(row + 1) * pu1_ref[nt - 1] + (col + 1) * pu1_ref[three_nt + 1] */
  891|  82.6k|            res_temp_8x16b  = _mm_maddubs_epi16(pu1_ref_16x8b, row_16x8b);
  892|  82.6k|            res_temp1_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row1_16x8b);
  893|  82.6k|            res_temp2_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row2_16x8b);
  894|  82.6k|            res_temp3_8x16b = _mm_maddubs_epi16(pu1_ref_16x8b, row3_16x8b);
  895|       |            /* (nt - 1 - row) * pu1_ref[two_nt + 1 + col] + (nt - 1 - col)* pu1_ref[two_nt - 1 - row] */
  896|  82.6k|            res_temp4_8x16b = _mm_maddubs_epi16(res_temp4_8x16b, nt_row_16x8b);
  897|  82.6k|            res_temp5_8x16b = _mm_maddubs_epi16(res_temp5_8x16b, nt_row1_16x8b);
  898|  82.6k|            res_temp6_8x16b = _mm_maddubs_epi16(res_temp6_8x16b, nt_row2_16x8b);
  899|  82.6k|            res_temp7_8x16b = _mm_maddubs_epi16(res_temp7_8x16b, nt_row3_16x8b);
  900|       |
  901|  82.6k|            res_temp_8x16b  = _mm_add_epi16(res_temp_8x16b, res_temp4_8x16b);
  902|  82.6k|            res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp5_8x16b);
  903|  82.6k|            res_temp2_8x16b = _mm_add_epi16(res_temp2_8x16b, res_temp6_8x16b);
  904|  82.6k|            res_temp3_8x16b = _mm_add_epi16(res_temp3_8x16b, res_temp7_8x16b);
  905|       |            /*res_temp + nt)*/
  906|  82.6k|            res_temp_8x16b  = _mm_add_epi16(res_temp_8x16b, const_temp6_4x32b);
  907|  82.6k|            res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, const_temp6_4x32b);
  908|  82.6k|            res_temp2_8x16b = _mm_add_epi16(res_temp2_8x16b, const_temp6_4x32b);
  909|  82.6k|            res_temp3_8x16b = _mm_add_epi16(res_temp3_8x16b, const_temp6_4x32b);
  910|       |
  911|  82.6k|            res_temp_8x16b  = _mm_srli_epi16(res_temp_8x16b, 4); //log2(16)+1
  912|  82.6k|            res_temp1_8x16b = _mm_srli_epi16(res_temp1_8x16b, 4);
  913|  82.6k|            res_temp2_8x16b = _mm_srli_epi16(res_temp2_8x16b, 4);
  914|  82.6k|            res_temp3_8x16b = _mm_srli_epi16(res_temp3_8x16b, 4);
  915|       |
  916|  82.6k|            res_temp_8x16b  = _mm_packus_epi16(res_temp_8x16b, zero_8x16b);
  917|  82.6k|            res_temp1_8x16b = _mm_packus_epi16(res_temp1_8x16b, zero_8x16b);
  918|  82.6k|            res_temp2_8x16b = _mm_packus_epi16(res_temp2_8x16b, zero_8x16b);
  919|  82.6k|            res_temp3_8x16b = _mm_packus_epi16(res_temp3_8x16b, zero_8x16b);
  920|       |
  921|  82.6k|            _mm_storel_epi64((__m128i *)(pu1_dst + (row * dst_strd)), res_temp_8x16b);
  922|  82.6k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), res_temp1_8x16b);
  923|  82.6k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), res_temp2_8x16b);
  924|  82.6k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), res_temp3_8x16b);
  925|       |
  926|  82.6k|            nt_row_16x8b = _mm_sub_epi16(nt_row3_16x8b, const_temp1_4x32b);
  927|  82.6k|            row_16x8b    = _mm_add_epi16(row3_16x8b,    const_temp1_4x32b);
  928|  82.6k|        }
  929|  41.4k|    }
  930|  40.6k|    else
  931|  40.6k|    {
  932|       |
  933|       |        /* for nt multiple of 4*/
  934|  40.6k|        const_temp7_4x32b = _mm_set1_epi16(4);
  935|  40.6k|        const_temp4_4x32b = _mm_set1_epi16(nt - 1);
  936|  40.6k|        const_temp_4x32b  = _mm_set1_epi16(pu1_ref[three_nt + 1]);
  937|  40.6k|        const_temp1_4x32b = _mm_set1_epi16(pu1_ref[nt - 1]);
  938|  40.6k|        zero_8x16b = _mm_set1_epi32(0);
  939|       |
  940|   203k|        for(row = 0; row < nt; row++)
  ------------------
  |  Branch (940:22): [True: 162k, False: 40.6k]
  ------------------
  941|   162k|        {
  942|   162k|            __m128i res_temp_8x16b, row_8x16b, res_temp1_8x16b, res_temp2_8x16b;
  943|   162k|            __m128i res_temp3_8x16b;
  944|       |
  945|   162k|            const_temp2_4x32b  = _mm_set1_epi16(pu1_ref[two_nt - 1 - row]);
  946|   162k|            const_temp3_4x32b  = _mm_set1_epi16((row + 1));
  947|       |
  948|       |
  949|   162k|            row_8x16b = _mm_set1_epi16((nt - 1 - row));
  950|       |
  951|   162k|            const_temp5_4x32b = _mm_set_epi16(7, 6, 5, 4, 3, 2, 1, 0);
  952|   162k|            col_8x16b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
  953|       |
  954|   162k|            const_temp5_4x32b = _mm_sub_epi16(const_temp4_4x32b, const_temp5_4x32b);
  955|       |
  956|       |            /*(row + 1) * pu1_ref[nt - 1]*/
  957|   162k|            res_temp_8x16b  = _mm_mullo_epi16(const_temp3_4x32b,  const_temp1_4x32b);
  958|       |
  959|       |            /*(row + 1) * pu1_ref[nt - 1] + nt)*/
  960|   162k|            res_temp_8x16b = _mm_add_epi16(res_temp_8x16b, const_temp6_4x32b);
  961|       |
  962|   325k|            for(col = 0; col < nt; col += 4)
  ------------------
  |  Branch (962:26): [True: 162k, False: 162k]
  ------------------
  963|   162k|            {
  964|   162k|                __m128i src_temp_8x16b;
  965|   162k|                int temp1;
  966|       |
  967|       |                /* loding 8bit 16 pixles*/
  968|   162k|                src_temp_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + col));
  969|       |
  970|   162k|                src_temp_8x16b =  _mm_unpacklo_epi8(src_temp_8x16b, zero_8x16b); /* row=0*/
  971|       |
  972|       |                /* (nt - 1 - row) * pu1_ref[two_nt + 1 + col] */
  973|   162k|                res_temp1_8x16b  = _mm_mullo_epi16(src_temp_8x16b,  row_8x16b);
  974|       |
  975|       |                /*(col + 1) * pu1_ref[three_nt + 1]*/
  976|   162k|                res_temp2_8x16b  = _mm_mullo_epi16(const_temp_4x32b,  col_8x16b);
  977|       |
  978|       |                /*(nt - 1 - col)* pu1_ref[two_nt - 1 - row]*/
  979|   162k|                res_temp3_8x16b  = _mm_mullo_epi16(const_temp2_4x32b,  const_temp5_4x32b);
  980|       |
  981|   162k|                res_temp1_8x16b = _mm_add_epi16(res_temp_8x16b, res_temp1_8x16b);
  982|   162k|                res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp2_8x16b);
  983|   162k|                res_temp1_8x16b = _mm_add_epi16(res_temp1_8x16b, res_temp3_8x16b);
  984|       |
  985|   162k|                res_temp1_8x16b = _mm_srli_epi16(res_temp1_8x16b, 3); //log2(16)+1
  986|   162k|                res_temp1_8x16b = _mm_packus_epi16(res_temp1_8x16b, zero_8x16b);
  987|       |
  988|   162k|                temp1 = _mm_cvtsi128_si32(res_temp1_8x16b);
  989|       |
  990|   162k|                *(WORD32 *)(&pu1_dst[(row * dst_strd) + col]) = temp1;
  991|       |
  992|   162k|                const_temp5_4x32b = _mm_sub_epi16(const_temp5_4x32b, const_temp7_4x32b);
  993|   162k|                col_8x16b = _mm_add_epi16(col_8x16b, const_temp7_4x32b);
  994|   162k|            } /* inner loop ends here */
  995|   162k|        }
  996|  40.6k|    }
  997|       |
  998|       |
  999|   155k|}
ihevc_intra_pred_luma_dc_ssse3:
 1044|  38.2k|{
 1045|       |
 1046|  38.2k|    WORD32 acc_dc;
 1047|  38.2k|    WORD32 dc_val, two_dc_val, three_dc_val;
 1048|  38.2k|    WORD32 row;
 1049|  38.2k|    WORD32 log2nt = 5;
 1050|  38.2k|    WORD32 two_nt, three_nt;
 1051|  38.2k|    __m128i src_temp1, src_temp7, src_temp3, src_temp4, src_temp5, src_temp6;
 1052|  38.2k|    __m128i src_temp8, src_temp10, src_temp2;
 1053|  38.2k|    __m128i m_zero = _mm_setzero_si128();
 1054|  38.2k|    __m128i sm = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASK5[0]);
 1055|  38.2k|    UNUSED(src_strd);
  ------------------
  |  |   38|  38.2k|#define UNUSED(x) ((void)(x))
  ------------------
 1056|  38.2k|    UNUSED(mode);
  ------------------
  |  |   38|  38.2k|#define UNUSED(x) ((void)(x))
  ------------------
 1057|       |
 1058|       |
 1059|  38.2k|    switch(nt)
 1060|  38.2k|    {
 1061|  8.00k|        case 32:
  ------------------
  |  Branch (1061:9): [True: 8.00k, False: 30.2k]
  ------------------
 1062|  8.00k|            log2nt = 5;
 1063|  8.00k|            break;
 1064|  10.8k|        case 16:
  ------------------
  |  Branch (1064:9): [True: 10.8k, False: 27.4k]
  ------------------
 1065|  10.8k|            log2nt = 4;
 1066|  10.8k|            break;
 1067|  11.1k|        case 8:
  ------------------
  |  Branch (1067:9): [True: 11.1k, False: 27.1k]
  ------------------
 1068|  11.1k|            log2nt = 3;
 1069|  11.1k|            break;
 1070|  8.32k|        case 4:
  ------------------
  |  Branch (1070:9): [True: 8.32k, False: 29.9k]
  ------------------
 1071|  8.32k|            log2nt = 2;
 1072|  8.32k|            break;
 1073|      0|        default:
  ------------------
  |  Branch (1073:9): [True: 0, False: 38.2k]
  ------------------
 1074|      0|            break;
 1075|  38.2k|    }
 1076|  38.2k|    two_nt = 2 * nt;
 1077|  38.2k|    three_nt = 3 * nt;
 1078|       |
 1079|  38.2k|    acc_dc = 0;
 1080|       |    /* Calculate DC value for the transform block */
 1081|       |
 1082|       |
 1083|       |
 1084|  38.2k|    if(nt == 32)
  ------------------
  |  Branch (1084:8): [True: 8.00k, False: 30.2k]
  ------------------
 1085|  8.00k|    {
 1086|  8.00k|        __m128i temp;
 1087|  8.00k|        WORD32 itr_count;
 1088|       |
 1089|  8.00k|        src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
 1090|  8.00k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 16));
 1091|  8.00k|        src_temp7 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 32));
 1092|  8.00k|        src_temp8 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 48));
 1093|       |
 1094|  8.00k|        src_temp3 = _mm_sad_epu8(src_temp3, m_zero);
 1095|  8.00k|        src_temp4 = _mm_sad_epu8(src_temp4, m_zero);
 1096|  8.00k|        src_temp7 = _mm_sad_epu8(src_temp7, m_zero);
 1097|  8.00k|        src_temp8 = _mm_sad_epu8(src_temp8, m_zero);
 1098|       |
 1099|  8.00k|        src_temp4 = _mm_add_epi16(src_temp3, src_temp4);
 1100|  8.00k|        src_temp8 = _mm_add_epi16(src_temp7, src_temp8);
 1101|  8.00k|        src_temp4 = _mm_add_epi16(src_temp4, src_temp8);
 1102|       |
 1103|  8.00k|        src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
 1104|  8.00k|        src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
 1105|       |
 1106|  8.00k|        acc_dc = _mm_cvtsi128_si32(src_temp4);
 1107|       |
 1108|  8.00k|        acc_dc += pu1_ref[three_nt];
 1109|  8.00k|        acc_dc -= pu1_ref[two_nt];
 1110|       |
 1111|       |        /* computing acc_dc value */
 1112|  8.00k|        dc_val = (acc_dc + nt) >> (log2nt + 1);
 1113|       |
 1114|  8.00k|        two_dc_val = 2 * dc_val;
 1115|  8.00k|        three_dc_val = 3 * dc_val;
 1116|       |
 1117|  8.00k|        temp = _mm_set1_epi8(dc_val);
 1118|       |
 1119|  24.0k|        for(itr_count = 0; itr_count < 2; itr_count++)
  ------------------
  |  Branch (1119:28): [True: 16.0k, False: 8.00k]
  ------------------
 1120|  16.0k|        {
 1121|       |            /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
 1122|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((0) * dst_strd)), temp);
 1123|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), temp);
 1124|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), temp);
 1125|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), temp);
 1126|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), temp);
 1127|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), temp);
 1128|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), temp);
 1129|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), temp);
 1130|       |
 1131|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), temp);
 1132|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), temp);
 1133|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), temp);
 1134|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), temp);
 1135|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), temp);
 1136|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), temp);
 1137|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), temp);
 1138|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), temp);
 1139|       |
 1140|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((0) * dst_strd)), temp);
 1141|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((1) * dst_strd)), temp);
 1142|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((2) * dst_strd)), temp);
 1143|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((3) * dst_strd)), temp);
 1144|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((4) * dst_strd)), temp);
 1145|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((5) * dst_strd)), temp);
 1146|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((6) * dst_strd)), temp);
 1147|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((7) * dst_strd)), temp);
 1148|       |
 1149|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((8) * dst_strd)), temp);
 1150|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((9) * dst_strd)), temp);
 1151|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((10) * dst_strd)), temp);
 1152|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((11) * dst_strd)), temp);
 1153|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((12) * dst_strd)), temp);
 1154|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((13) * dst_strd)), temp);
 1155|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((14) * dst_strd)), temp);
 1156|  16.0k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((15) * dst_strd)), temp);
 1157|       |
 1158|  16.0k|            pu1_dst += 16 * dst_strd;
 1159|  16.0k|        }
 1160|  8.00k|    }
 1161|  30.2k|    else
 1162|       |
 1163|  30.2k|    {
 1164|  30.2k|        __m128i sm1 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASK4[0]);
 1165|       |
 1166|       |        /* DC filtering for the first top row and first left column */
 1167|       |
 1168|       |
 1169|       |
 1170|  30.2k|        if(nt == 4) /* nt multiple of 4*/
  ------------------
  |  Branch (1170:12): [True: 8.32k, False: 21.9k]
  ------------------
 1171|  8.32k|        {
 1172|  8.32k|            WORD32 temp1, temp2, temp3;
 1173|       |
 1174|  8.32k|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
 1175|  8.32k|            src_temp2 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1176|       |
 1177|  8.32k|            src_temp4 =  _mm_unpacklo_epi8(src_temp3, m_zero);
 1178|  8.32k|            src_temp2 =  _mm_unpacklo_epi8(src_temp2, m_zero);
 1179|       |
 1180|  8.32k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
 1181|  8.32k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
 1182|  8.32k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
 1183|       |
 1184|  8.32k|            acc_dc = _mm_cvtsi128_si32(src_temp4);
 1185|  8.32k|            acc_dc += pu1_ref[three_nt];
 1186|  8.32k|            acc_dc -= pu1_ref[two_nt];
 1187|       |
 1188|       |/* computing acc_dc value */
 1189|       |
 1190|  8.32k|            dc_val = (acc_dc + nt) >> (log2nt + 1);
 1191|       |
 1192|  8.32k|            three_dc_val = 3 * dc_val;
 1193|       |
 1194|       |            /* loding 8-bit 16 pixel */
 1195|  8.32k|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
 1196|  8.32k|            two_dc_val = 2 * dc_val;
 1197|       |
 1198|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
 1199|  8.32k|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
 1200|       |
 1201|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2) >> 2 */
 1202|  8.32k|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
 1203|       |
 1204|  8.32k|            src_temp2 = _mm_packus_epi16(src_temp2, m_zero);
 1205|       |
 1206|  8.32k|            temp1 = _mm_cvtsi128_si32(src_temp2);
 1207|       |
 1208|  8.32k|            *(WORD32 *)(&pu1_dst[0]) = temp1;
 1209|       |
 1210|  8.32k|            src_temp2 = _mm_insert_epi16(src_temp2, dc_val, 0);
 1211|       |
 1212|  8.32k|            src_temp2 =  _mm_shuffle_epi8(src_temp2, sm1);
 1213|  8.32k|            src_temp3 =  _mm_shuffle_epi8(src_temp2, sm1);
 1214|  8.32k|            src_temp4 =  _mm_shuffle_epi8(src_temp2, sm1);
 1215|       |
 1216|  8.32k|            temp1 = _mm_cvtsi128_si32(src_temp2);
 1217|  8.32k|            temp2 = _mm_cvtsi128_si32(src_temp3);
 1218|  8.32k|            temp3 = _mm_cvtsi128_si32(src_temp4);
 1219|       |
 1220|  8.32k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp1;
 1221|  8.32k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp2;
 1222|  8.32k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp3;
 1223|       |
 1224|       |            /*  retore  first value*/
 1225|  8.32k|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
 1226|  8.32k|                            >> 2);
 1227|       |
 1228|  33.3k|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (1228:26): [True: 24.9k, False: 8.32k]
  ------------------
 1229|  24.9k|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
 1230|  24.9k|                                >> 2;
 1231|       |
 1232|  8.32k|        }
 1233|  21.9k|        else if(nt == 8) /* if nt%8==0*/
  ------------------
  |  Branch (1233:17): [True: 11.1k, False: 10.7k]
  ------------------
 1234|  11.1k|        {
 1235|       |
 1236|  11.1k|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
 1237|       |
 1238|  11.1k|            src_temp4 = _mm_sad_epu8(src_temp3, m_zero);
 1239|  11.1k|            src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
 1240|  11.1k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
 1241|       |
 1242|  11.1k|            acc_dc = _mm_cvtsi128_si32(src_temp4);
 1243|       |
 1244|  11.1k|            acc_dc += pu1_ref[three_nt];
 1245|  11.1k|            acc_dc -= pu1_ref[two_nt];
 1246|       |
 1247|       |            /* computing acc_dc value */
 1248|       |
 1249|  11.1k|            dc_val = (acc_dc + nt) >> (log2nt + 1);
 1250|       |
 1251|  11.1k|            three_dc_val = 3 * dc_val;
 1252|  11.1k|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
 1253|  11.1k|            two_dc_val = 2 * dc_val;
 1254|       |
 1255|       |            /* loding 8-bit 16 pixel */
 1256|  11.1k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1257|  11.1k|            src_temp2 =  _mm_unpacklo_epi8(src_temp2, m_zero);
 1258|       |
 1259|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
 1260|  11.1k|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
 1261|       |
 1262|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2)>>2 */
 1263|  11.1k|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
 1264|  11.1k|            src_temp2 = _mm_packus_epi16(src_temp2, m_zero);
 1265|       |
 1266|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_temp2);
 1267|       |
 1268|       |            /* Fill the remaining rows with DC value*/
 1269|       |
 1270|  11.1k|            src_temp1 = _mm_set1_epi8(dc_val);
 1271|  11.1k|            src_temp2 = _mm_set1_epi8(dc_val);
 1272|  11.1k|            src_temp3 = _mm_set1_epi8(dc_val);
 1273|  11.1k|            src_temp4 = _mm_set1_epi8(dc_val);
 1274|  11.1k|            src_temp5 = _mm_set1_epi8(dc_val);
 1275|  11.1k|            src_temp6 = _mm_set1_epi8(dc_val);
 1276|  11.1k|            src_temp7 = _mm_set1_epi8(dc_val);
 1277|       |
 1278|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
 1279|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
 1280|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
 1281|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
 1282|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
 1283|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
 1284|  11.1k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
 1285|       |
 1286|       |            /*  retore  first value*/
 1287|  11.1k|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
 1288|  11.1k|                            >> 2);
 1289|       |
 1290|  89.0k|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (1290:26): [True: 77.9k, False: 11.1k]
  ------------------
 1291|  77.9k|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
 1292|  77.9k|                                >> 2;
 1293|       |
 1294|  11.1k|        }
 1295|  10.7k|        else /* if nt == 16*/
 1296|  10.7k|        {
 1297|       |
 1298|  10.7k|            src_temp3 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt));
 1299|  10.7k|            src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + nt + 16));
 1300|       |
 1301|  10.7k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1302|  10.7k|            src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 8));
 1303|       |
 1304|  10.7k|            src_temp3 = _mm_sad_epu8(src_temp3, m_zero);
 1305|  10.7k|            src_temp4 = _mm_sad_epu8(src_temp4, m_zero);
 1306|       |
 1307|  10.7k|            src_temp2  =  _mm_unpacklo_epi8(src_temp2, m_zero);
 1308|  10.7k|            src_temp10 =  _mm_unpacklo_epi8(src_temp10, m_zero);
 1309|       |
 1310|  10.7k|            src_temp4 = _mm_add_epi16(src_temp3, src_temp4);
 1311|  10.7k|            src_temp4 = _mm_shuffle_epi8(src_temp4, sm);
 1312|  10.7k|            src_temp4 = _mm_hadd_epi16(src_temp4, m_zero);
 1313|       |
 1314|  10.7k|            acc_dc = _mm_cvtsi128_si32(src_temp4);
 1315|       |
 1316|  10.7k|            acc_dc += pu1_ref[three_nt];
 1317|  10.7k|            acc_dc -= pu1_ref[two_nt];
 1318|       |
 1319|       |            /* computing acc_dc value */
 1320|       |
 1321|  10.7k|            dc_val = (acc_dc + nt) >> (log2nt + 1);
 1322|       |
 1323|  10.7k|            three_dc_val = 3 * dc_val;
 1324|  10.7k|            src_temp1 = _mm_set1_epi16(three_dc_val + 2);
 1325|  10.7k|            two_dc_val = 2 * dc_val;
 1326|       |
 1327|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2 */
 1328|  10.7k|            src_temp2 = _mm_add_epi16(src_temp2, src_temp1);
 1329|  10.7k|            src_temp10 = _mm_add_epi16(src_temp10, src_temp1);
 1330|       |            /*(pu1_ref[two_nt + 1 + col] + three_dc_val + 2)>>2 */
 1331|  10.7k|            src_temp2 = _mm_srli_epi16(src_temp2, 2);
 1332|  10.7k|            src_temp10 = _mm_srli_epi16(src_temp10, 2);
 1333|       |
 1334|  10.7k|            src_temp2 = _mm_packus_epi16(src_temp2, src_temp10);
 1335|       |
 1336|  10.7k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp2);
 1337|       |
 1338|       |            /* Fill the remaining rows with DC value*/
 1339|  10.7k|            src_temp1 =  _mm_set1_epi8(dc_val);
 1340|  10.7k|            src_temp2 =  _mm_set1_epi8(dc_val);
 1341|  10.7k|            src_temp3 =  _mm_set1_epi8(dc_val);
 1342|  10.7k|            src_temp4 =  _mm_set1_epi8(dc_val);
 1343|  10.7k|            src_temp5 =  _mm_set1_epi8(dc_val);
 1344|  10.7k|            src_temp6 =  _mm_set1_epi8(dc_val);
 1345|  10.7k|            src_temp7 =  _mm_set1_epi8(dc_val);
 1346|       |
 1347|  32.3k|            for(row = 1; row < nt; row += 8)
  ------------------
  |  Branch (1347:26): [True: 21.5k, False: 10.7k]
  ------------------
 1348|  21.5k|            {
 1349|       |
 1350|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
 1351|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
 1352|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
 1353|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
 1354|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
 1355|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
 1356|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
 1357|       |
 1358|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), src_temp1);
 1359|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), src_temp2);
 1360|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), src_temp3);
 1361|       |
 1362|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), src_temp4);
 1363|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), src_temp5);
 1364|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), src_temp6);
 1365|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), src_temp7);
 1366|       |
 1367|  21.5k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), src_temp1);
 1368|       |
 1369|  21.5k|            }
 1370|       |
 1371|       |            /*  retore  first value*/
 1372|  10.7k|            pu1_dst[0] = ((pu1_ref[two_nt - 1] + two_dc_val + pu1_ref[two_nt + 1] + 2)
 1373|  10.7k|                            >> 2);
 1374|       |
 1375|   172k|            for(row = 1; row < nt; row++)
  ------------------
  |  Branch (1375:26): [True: 161k, False: 10.7k]
  ------------------
 1376|   161k|                pu1_dst[row * dst_strd] = (pu1_ref[two_nt - 1 - row] + three_dc_val + 2)
 1377|   161k|                                >> 2;
 1378|       |
 1379|  10.7k|        }
 1380|  30.2k|    }
 1381|  38.2k|}
ihevc_intra_pred_luma_horz_ssse3:
 1426|  4.62k|{
 1427|       |
 1428|  4.62k|    WORD32 row;
 1429|  4.62k|    WORD32 two_nt;
 1430|  4.62k|    UNUSED(src_strd);
  ------------------
  |  |   38|  4.62k|#define UNUSED(x) ((void)(x))
  ------------------
 1431|  4.62k|    UNUSED(mode);
  ------------------
  |  |   38|  4.62k|#define UNUSED(x) ((void)(x))
  ------------------
 1432|       |
 1433|  4.62k|    two_nt = 2 * nt;
 1434|       |
 1435|       |
 1436|  4.62k|    if(nt == 32)
  ------------------
  |  Branch (1436:8): [True: 708, False: 3.92k]
  ------------------
 1437|    708|    {
 1438|    708|        __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7, src_temp8;
 1439|    708|        __m128i src_temp9, src_temp10, src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16;
 1440|    708|        __m128i sm = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASK4[0]);
 1441|       |
 1442|  2.12k|        for(row = 0; row < nt; row += 16)
  ------------------
  |  Branch (1442:22): [True: 1.41k, False: 708]
  ------------------
 1443|  1.41k|        {
 1444|  1.41k|            {
 1445|  1.41k|                src_temp1 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 1 - row - 15));
 1446|       |
 1447|  1.41k|                src_temp2 =  _mm_srli_si128(src_temp1, 1);
 1448|  1.41k|                src_temp3 =  _mm_srli_si128(src_temp1, 2);
 1449|  1.41k|                src_temp4 =  _mm_srli_si128(src_temp1, 3);
 1450|  1.41k|                src_temp5 =  _mm_srli_si128(src_temp1, 4);
 1451|  1.41k|                src_temp6 =  _mm_srli_si128(src_temp1, 5);
 1452|  1.41k|                src_temp7 =  _mm_srli_si128(src_temp1, 6);
 1453|  1.41k|                src_temp8 =  _mm_srli_si128(src_temp1, 7);
 1454|       |
 1455|  1.41k|                src_temp9 =  _mm_srli_si128(src_temp1, 8);
 1456|  1.41k|                src_temp10 =  _mm_srli_si128(src_temp1, 9);
 1457|  1.41k|                src_temp11 =  _mm_srli_si128(src_temp1, 10);
 1458|  1.41k|                src_temp12 =  _mm_srli_si128(src_temp1, 11);
 1459|  1.41k|                src_temp13 =  _mm_srli_si128(src_temp1, 12);
 1460|  1.41k|                src_temp14 =  _mm_srli_si128(src_temp1, 13);
 1461|  1.41k|                src_temp15 =  _mm_srli_si128(src_temp1, 14);
 1462|  1.41k|                src_temp16 =  _mm_srli_si128(src_temp1, 15);
 1463|       |
 1464|  1.41k|                src_temp8 =  _mm_shuffle_epi8(src_temp8, sm);
 1465|  1.41k|                src_temp7 =  _mm_shuffle_epi8(src_temp7, sm);
 1466|  1.41k|                src_temp6 =  _mm_shuffle_epi8(src_temp6, sm);
 1467|  1.41k|                src_temp5 =  _mm_shuffle_epi8(src_temp5, sm);
 1468|  1.41k|                src_temp4 =  _mm_shuffle_epi8(src_temp4, sm);
 1469|  1.41k|                src_temp3 =  _mm_shuffle_epi8(src_temp3, sm);
 1470|  1.41k|                src_temp2 =  _mm_shuffle_epi8(src_temp2, sm);
 1471|  1.41k|                src_temp1 =  _mm_shuffle_epi8(src_temp1, sm);
 1472|       |
 1473|  1.41k|                src_temp16 =  _mm_shuffle_epi8(src_temp16, sm);
 1474|  1.41k|                src_temp15 =  _mm_shuffle_epi8(src_temp15, sm);
 1475|  1.41k|                src_temp14 =  _mm_shuffle_epi8(src_temp14, sm);
 1476|  1.41k|                src_temp13 =  _mm_shuffle_epi8(src_temp13, sm);
 1477|  1.41k|                src_temp12 =  _mm_shuffle_epi8(src_temp12, sm);
 1478|  1.41k|                src_temp11 =  _mm_shuffle_epi8(src_temp11, sm);
 1479|  1.41k|                src_temp10 =  _mm_shuffle_epi8(src_temp10, sm);
 1480|  1.41k|                src_temp9 =  _mm_shuffle_epi8(src_temp9, sm);
 1481|       |
 1482|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), src_temp16);
 1483|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp15);
 1484|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp14);
 1485|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp13);
 1486|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp12);
 1487|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp11);
 1488|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp10);
 1489|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 7) * dst_strd)), src_temp9);
 1490|       |
 1491|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 8) * dst_strd)), src_temp8);
 1492|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 9) * dst_strd)), src_temp7);
 1493|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 10) * dst_strd)), src_temp6);
 1494|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 11) * dst_strd)), src_temp5);
 1495|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 12) * dst_strd)), src_temp4);
 1496|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 13) * dst_strd)), src_temp3);
 1497|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 14) * dst_strd)), src_temp2);
 1498|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 15) * dst_strd)), src_temp1);
 1499|       |
 1500|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 0) * dst_strd)), src_temp16);
 1501|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 1) * dst_strd)), src_temp15);
 1502|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 2) * dst_strd)), src_temp14);
 1503|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 3) * dst_strd)), src_temp13);
 1504|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 4) * dst_strd)), src_temp12);
 1505|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 5) * dst_strd)), src_temp11);
 1506|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 6) * dst_strd)), src_temp10);
 1507|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 7) * dst_strd)), src_temp9);
 1508|       |
 1509|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 8) * dst_strd)), src_temp8);
 1510|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 9) * dst_strd)), src_temp7);
 1511|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 10) * dst_strd)), src_temp6);
 1512|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 11) * dst_strd)), src_temp5);
 1513|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 12) * dst_strd)), src_temp4);
 1514|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 13) * dst_strd)), src_temp3);
 1515|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 14) * dst_strd)), src_temp2);
 1516|  1.41k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((row + 15) * dst_strd)), src_temp1);
 1517|       |
 1518|  1.41k|            }
 1519|       |
 1520|  1.41k|        }
 1521|       |
 1522|    708|    }
 1523|  3.92k|    else
 1524|       |
 1525|  3.92k|    {
 1526|  3.92k|        __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6;
 1527|  3.92k|        __m128i src_temp10, zero_8x16b, src_temp7;
 1528|       |
 1529|       |        /* DC filtering for the first top row and first left column */
 1530|       |
 1531|  3.92k|        zero_8x16b = _mm_set1_epi16(0);
 1532|       |
 1533|       |        /*Filtering done for the 1st row */
 1534|       |
 1535|  3.92k|        src_temp2 =  _mm_set1_epi16(pu1_ref[two_nt - 1]);
 1536|  3.92k|        src_temp10 =  _mm_set1_epi16(pu1_ref[two_nt]);
 1537|       |
 1538|       |        /*  loding 8-bit 16 pixels */
 1539|  3.92k|        src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1540|       |
 1541|  3.92k|        src_temp4 =  _mm_unpacklo_epi8(src_temp4, zero_8x16b);
 1542|       |
 1543|       |        /*(pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt])*/
 1544|  3.92k|        src_temp3 = _mm_sub_epi16(src_temp4, src_temp10);
 1545|       |
 1546|       |        /* ((pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt]) >> 1)*/
 1547|  3.92k|        src_temp3 = _mm_srai_epi16(src_temp3, 1);
 1548|       |
 1549|       |        /* pu1_ref[two_nt - 1]+((pu1_ref[two_nt + 1 + col] - pu1_ref[two_nt]) >> 1)*/
 1550|  3.92k|        src_temp3 = _mm_add_epi16(src_temp2, src_temp3);
 1551|       |
 1552|  3.92k|        if(nt == 4)
  ------------------
  |  Branch (1552:12): [True: 1.16k, False: 2.75k]
  ------------------
 1553|  1.16k|        {
 1554|  1.16k|            int temp1, temp2, temp3;
 1555|  1.16k|            src_temp3 = _mm_packus_epi16(src_temp3, zero_8x16b);
 1556|  1.16k|            temp1 = _mm_cvtsi128_si32(src_temp3);
 1557|       |
 1558|  1.16k|            *(WORD32 *)(&pu1_dst[0]) = temp1;
 1559|       |
 1560|  1.16k|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 2]);
 1561|  1.16k|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 3]);
 1562|  1.16k|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 4]);
 1563|       |
 1564|  1.16k|            temp1 = _mm_cvtsi128_si32(src_temp2);
 1565|  1.16k|            temp2 = _mm_cvtsi128_si32(src_temp3);
 1566|  1.16k|            temp3 = _mm_cvtsi128_si32(src_temp4);
 1567|       |
 1568|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1569|  1.16k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp1;
 1570|  1.16k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp2;
 1571|  1.16k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp3;
 1572|       |
 1573|  1.16k|        }
 1574|  2.75k|        else if(nt == 8)
  ------------------
  |  Branch (1574:17): [True: 1.57k, False: 1.18k]
  ------------------
 1575|  1.57k|        {
 1576|  1.57k|            src_temp10 = _mm_packus_epi16(src_temp3, zero_8x16b);
 1577|       |
 1578|       |
 1579|  1.57k|            src_temp1 =  _mm_set1_epi8(pu1_ref[two_nt - 2]);
 1580|  1.57k|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 3]);
 1581|  1.57k|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 4]);
 1582|  1.57k|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 5]);
 1583|  1.57k|            src_temp5 =  _mm_set1_epi8(pu1_ref[two_nt - 6]);
 1584|  1.57k|            src_temp6 =  _mm_set1_epi8(pu1_ref[two_nt - 7]);
 1585|  1.57k|            src_temp7 =  _mm_set1_epi8(pu1_ref[two_nt - 8]);
 1586|       |
 1587|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst), src_temp10);
 1588|       |
 1589|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1590|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp1);
 1591|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp2);
 1592|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp3);
 1593|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp4);
 1594|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp5);
 1595|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp6);
 1596|  1.57k|            _mm_storel_epi64((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp7);
 1597|       |
 1598|  1.57k|        }
 1599|  1.18k|        else if(nt == 16)
  ------------------
  |  Branch (1599:17): [True: 1.18k, False: 18.4E]
  ------------------
 1600|  1.18k|        {
 1601|  1.18k|            src_temp4 =  _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 8));
 1602|  1.18k|            src_temp4 =  _mm_unpacklo_epi8(src_temp4, zero_8x16b);
 1603|       |            //src_temp4 =  _mm_cvtepu8_epi16 (src_temp4);
 1604|       |
 1605|  1.18k|            src_temp10 = _mm_sub_epi16(src_temp4, src_temp10);
 1606|  1.18k|            src_temp10 = _mm_srai_epi16(src_temp10, 1);
 1607|  1.18k|            src_temp10 = _mm_add_epi16(src_temp2, src_temp10);
 1608|       |
 1609|  1.18k|            src_temp3 = _mm_packus_epi16(src_temp3, src_temp10);
 1610|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst), src_temp3);
 1611|       |
 1612|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1613|  1.18k|            src_temp1 =  _mm_set1_epi8(pu1_ref[two_nt - 2]);
 1614|  1.18k|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 3]);
 1615|  1.18k|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 4]);
 1616|  1.18k|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 5]);
 1617|  1.18k|            src_temp5 =  _mm_set1_epi8(pu1_ref[two_nt - 6]);
 1618|  1.18k|            src_temp6 =  _mm_set1_epi8(pu1_ref[two_nt - 7]);
 1619|  1.18k|            src_temp7 =  _mm_set1_epi8(pu1_ref[two_nt - 8]);
 1620|  1.18k|            src_temp10 =  _mm_set1_epi8(pu1_ref[two_nt - 9]);
 1621|       |
 1622|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp1);
 1623|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp2);
 1624|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp3);
 1625|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp4);
 1626|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp5);
 1627|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp6);
 1628|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp7);
 1629|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), src_temp10);
 1630|       |
 1631|  1.18k|            src_temp1 =  _mm_set1_epi8(pu1_ref[two_nt - 10]);
 1632|  1.18k|            src_temp2 =  _mm_set1_epi8(pu1_ref[two_nt - 11]);
 1633|  1.18k|            src_temp3 =  _mm_set1_epi8(pu1_ref[two_nt - 12]);
 1634|  1.18k|            src_temp4 =  _mm_set1_epi8(pu1_ref[two_nt - 13]);
 1635|  1.18k|            src_temp5 =  _mm_set1_epi8(pu1_ref[two_nt - 14]);
 1636|  1.18k|            src_temp6 =  _mm_set1_epi8(pu1_ref[two_nt - 15]);
 1637|  1.18k|            src_temp7 =  _mm_set1_epi8(pu1_ref[two_nt - 16]);
 1638|       |
 1639|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), src_temp1);
 1640|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), src_temp2);
 1641|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), src_temp3);
 1642|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), src_temp4);
 1643|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), src_temp5);
 1644|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), src_temp6);
 1645|  1.18k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), src_temp7);
 1646|       |
 1647|  1.18k|        }
 1648|  3.92k|    }
 1649|  4.62k|}
ihevc_intra_pred_luma_ver_ssse3:
 1696|  30.0k|{
 1697|  30.0k|    WORD32 row;
 1698|  30.0k|    WORD16 s2_predpixel;
 1699|  30.0k|    WORD32 two_nt = 2 * nt;
 1700|  30.0k|    __m128i src_temp0, src_temp2;
 1701|  30.0k|    UNUSED(src_strd);
  ------------------
  |  |   38|  30.0k|#define UNUSED(x) ((void)(x))
  ------------------
 1702|  30.0k|    UNUSED(mode);
  ------------------
  |  |   38|  30.0k|#define UNUSED(x) ((void)(x))
  ------------------
 1703|       |
 1704|       |
 1705|  30.0k|    if(nt == 32)
  ------------------
  |  Branch (1705:8): [True: 9.22k, False: 20.7k]
  ------------------
 1706|  9.22k|    {
 1707|  9.22k|        __m128i temp1, temp2;
 1708|  9.22k|        WORD32 itr_count;
 1709|       |
 1710|  9.22k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1711|  9.22k|        temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1 + 16));
 1712|       |
 1713|  27.6k|        for(itr_count = 0; itr_count < 2; itr_count++)
  ------------------
  |  Branch (1713:28): [True: 18.4k, False: 9.22k]
  ------------------
 1714|  18.4k|        {
 1715|       |            /*  pu1_dst[(row * dst_strd) + col] = dc_val;*/
 1716|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((0) * dst_strd)), temp1);
 1717|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((1) * dst_strd)), temp1);
 1718|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((2) * dst_strd)), temp1);
 1719|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((3) * dst_strd)), temp1);
 1720|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((4) * dst_strd)), temp1);
 1721|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((5) * dst_strd)), temp1);
 1722|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((6) * dst_strd)), temp1);
 1723|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((7) * dst_strd)), temp1);
 1724|       |
 1725|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((0) * dst_strd)), temp2);
 1726|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((1) * dst_strd)), temp2);
 1727|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((2) * dst_strd)), temp2);
 1728|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((3) * dst_strd)), temp2);
 1729|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((4) * dst_strd)), temp2);
 1730|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((5) * dst_strd)), temp2);
 1731|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((6) * dst_strd)), temp2);
 1732|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((7) * dst_strd)), temp2);
 1733|       |
 1734|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((8) * dst_strd)), temp1);
 1735|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((9) * dst_strd)), temp1);
 1736|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((10) * dst_strd)), temp1);
 1737|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((11) * dst_strd)), temp1);
 1738|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((12) * dst_strd)), temp1);
 1739|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((13) * dst_strd)), temp1);
 1740|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((14) * dst_strd)), temp1);
 1741|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + ((15) * dst_strd)), temp1);
 1742|       |
 1743|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((8) * dst_strd)), temp2);
 1744|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((9) * dst_strd)), temp2);
 1745|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((10) * dst_strd)), temp2);
 1746|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((11) * dst_strd)), temp2);
 1747|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((12) * dst_strd)), temp2);
 1748|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((13) * dst_strd)), temp2);
 1749|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((14) * dst_strd)), temp2);
 1750|  18.4k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16 + ((15) * dst_strd)), temp2);
 1751|       |
 1752|  18.4k|            pu1_dst += 16 * dst_strd;
 1753|  18.4k|        }
 1754|  9.22k|    }
 1755|  20.7k|    else
 1756|  20.7k|    {
 1757|       |        /* Replication to next columns*/
 1758|       |
 1759|  20.7k|        if(nt == 4)
  ------------------
  |  Branch (1759:12): [True: 2.82k, False: 17.9k]
  ------------------
 1760|  2.82k|        {
 1761|  2.82k|            int temp1;
 1762|       |
 1763|  2.82k|            src_temp2 =   _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1764|       |
 1765|  2.82k|            temp1 = _mm_cvtsi128_si32(src_temp2);
 1766|       |
 1767|       |            /* loding 4-bit 8 pixels values */
 1768|  2.82k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp1;
 1769|  2.82k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp1;
 1770|  2.82k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp1;
 1771|  2.82k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp1;
 1772|       |
 1773|  2.82k|        }
 1774|  17.9k|        else if(nt == 8)
  ------------------
  |  Branch (1774:17): [True: 9.59k, False: 8.35k]
  ------------------
 1775|  9.59k|        {
 1776|       |
 1777|  9.59k|            src_temp0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1778|       |
 1779|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((0) * dst_strd)), src_temp0);
 1780|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((1) * dst_strd)), src_temp0);
 1781|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((2) * dst_strd)), src_temp0);
 1782|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((3) * dst_strd)), src_temp0);
 1783|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((4) * dst_strd)), src_temp0);
 1784|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((5) * dst_strd)), src_temp0);
 1785|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((6) * dst_strd)), src_temp0);
 1786|  9.59k|            _mm_storel_epi64((__m128i *)(pu1_dst + ((7) * dst_strd)), src_temp0);
 1787|       |
 1788|       |
 1789|  9.59k|        }
 1790|  8.35k|        else if(nt == 16)
  ------------------
  |  Branch (1790:17): [True: 8.38k, False: 18.4E]
  ------------------
 1791|  8.38k|        {
 1792|  25.1k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (1792:26): [True: 16.7k, False: 8.38k]
  ------------------
 1793|  16.7k|            {
 1794|       |
 1795|  16.7k|                src_temp0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1));
 1796|       |
 1797|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), src_temp0);
 1798|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp0);
 1799|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp0);
 1800|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp0);
 1801|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp0);
 1802|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp0);
 1803|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp0);
 1804|  16.7k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 7) * dst_strd)), src_temp0);
 1805|       |
 1806|  16.7k|            }
 1807|       |
 1808|  8.38k|        }
 1809|       |
 1810|       |        /*Filtering done for the 1st column */
 1811|   242k|        for(row = nt - 1; row >= 0; row--)
  ------------------
  |  Branch (1811:27): [True: 221k, False: 20.7k]
  ------------------
 1812|   221k|        {
 1813|   221k|            s2_predpixel = pu1_ref[two_nt + 1]
 1814|   221k|                            + ((pu1_ref[two_nt - 1 - row] - pu1_ref[two_nt]) >> 1);
 1815|   221k|            pu1_dst[row * dst_strd] = CLIP_U8(s2_predpixel);
  ------------------
  |  |   40|   221k|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   221k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 6.91k, False: 214k]
  |  |  |  |  |  Branch (40:53): [True: 7.04k, False: 207k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1816|   221k|        }
 1817|       |
 1818|       |
 1819|  20.7k|    }
 1820|  30.0k|}
ihevc_intra_pred_luma_mode2_ssse3:
 1865|  40.4k|{
 1866|  40.4k|    WORD32 row, col;
 1867|  40.4k|    WORD32 two_nt = 2 * nt;
 1868|       |
 1869|  40.4k|    __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7, src_temp8;
 1870|  40.4k|    __m128i   sm1, sm2, sm3;
 1871|  40.4k|    UNUSED(src_strd);
  ------------------
  |  |   38|  40.4k|#define UNUSED(x) ((void)(x))
  ------------------
 1872|  40.4k|    UNUSED(mode);
  ------------------
  |  |   38|  40.4k|#define UNUSED(x) ((void)(x))
  ------------------
 1873|       |
 1874|       |
 1875|  40.4k|    sm1 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY1[0]);
 1876|  40.4k|    sm2 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY2[0]);
 1877|  40.4k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY3[0]);
 1878|       |
 1879|       |    /* For the angle 45, replication is done from the corresponding angle */
 1880|       |    /* intra_pred_ang = tan(angle) in q5 format */
 1881|       |
 1882|  40.4k|    if(nt == 4)
  ------------------
  |  Branch (1882:8): [True: 23.1k, False: 17.3k]
  ------------------
 1883|  23.1k|    {
 1884|  23.1k|        int temp1, temp2, temp3, temp4;
 1885|       |
 1886|       |        /*pu1_ref[two_nt - row - (col+1) - 1]*/
 1887|  23.1k|        src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 8));
 1888|  23.1k|        src_temp2 = _mm_srli_si128(src_temp1, 1);
 1889|  23.1k|        src_temp3 = _mm_srli_si128(src_temp1, 2);
 1890|  23.1k|        src_temp4 = _mm_srli_si128(src_temp1, 3);
 1891|       |
 1892|  23.1k|        src_temp4 = _mm_shuffle_epi8(src_temp4, sm1);
 1893|  23.1k|        src_temp3 = _mm_shuffle_epi8(src_temp3, sm1);
 1894|  23.1k|        src_temp2 = _mm_shuffle_epi8(src_temp2, sm1);
 1895|  23.1k|        src_temp1 = _mm_shuffle_epi8(src_temp1, sm1);
 1896|       |
 1897|  23.1k|        temp1 = _mm_cvtsi128_si32(src_temp4);
 1898|  23.1k|        temp2 = _mm_cvtsi128_si32(src_temp3);
 1899|  23.1k|        temp3 = _mm_cvtsi128_si32(src_temp2);
 1900|  23.1k|        temp4 = _mm_cvtsi128_si32(src_temp1);
 1901|       |
 1902|       |        /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 1903|  23.1k|        *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp1;
 1904|  23.1k|        *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp2;
 1905|  23.1k|        *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp3;
 1906|  23.1k|        *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp4;
 1907|       |
 1908|       |
 1909|  23.1k|    }
 1910|  17.3k|    else if(nt == 8)
  ------------------
  |  Branch (1910:13): [True: 3.56k, False: 13.7k]
  ------------------
 1911|  3.56k|    {
 1912|       |        /*pu1_ref[two_nt - row - (col+1) - 1]*/
 1913|  3.56k|        src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 16));
 1914|  3.56k|        src_temp2 = _mm_srli_si128(src_temp1, 1);
 1915|  3.56k|        src_temp3 = _mm_srli_si128(src_temp1, 2);
 1916|  3.56k|        src_temp4 = _mm_srli_si128(src_temp1, 3);
 1917|  3.56k|        src_temp5 = _mm_srli_si128(src_temp1, 4);
 1918|  3.56k|        src_temp6 = _mm_srli_si128(src_temp1, 5);
 1919|  3.56k|        src_temp7 = _mm_srli_si128(src_temp1, 6);
 1920|  3.56k|        src_temp8 = _mm_srli_si128(src_temp1, 7);
 1921|       |
 1922|  3.56k|        src_temp1 = _mm_shuffle_epi8(src_temp1, sm2);
 1923|  3.56k|        src_temp2 = _mm_shuffle_epi8(src_temp2, sm2);
 1924|  3.56k|        src_temp3 = _mm_shuffle_epi8(src_temp3, sm2);
 1925|  3.56k|        src_temp4 = _mm_shuffle_epi8(src_temp4, sm2);
 1926|  3.56k|        src_temp5 = _mm_shuffle_epi8(src_temp5, sm2);
 1927|  3.56k|        src_temp6 = _mm_shuffle_epi8(src_temp6, sm2);
 1928|  3.56k|        src_temp7 = _mm_shuffle_epi8(src_temp7, sm2);
 1929|  3.56k|        src_temp8 = _mm_shuffle_epi8(src_temp8, sm2);
 1930|       |
 1931|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp8);
 1932|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp7);
 1933|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp6);
 1934|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp5);
 1935|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp4);
 1936|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp3);
 1937|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp2);
 1938|  3.56k|        _mm_storel_epi64((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp1);
 1939|       |
 1940|  3.56k|    }
 1941|  13.7k|    else
 1942|  13.7k|    {
 1943|  48.7k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (1943:22): [True: 34.9k, False: 13.7k]
  ------------------
 1944|  34.9k|        {
 1945|  85.1k|            for(col = 0; col < nt; col += 16)
  ------------------
  |  Branch (1945:26): [True: 50.1k, False: 34.9k]
  ------------------
 1946|  50.1k|            {   /*pu1_ref[two_nt - row - (col+1) - 1]*/
 1947|       |
 1948|  50.1k|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 0) - (col + 16) - 1));
 1949|  50.1k|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 1) - (col + 16) - 1));
 1950|  50.1k|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 2) - (col + 16) - 1));
 1951|  50.1k|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 3) - (col + 16) - 1));
 1952|  50.1k|                src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 4) - (col + 16) - 1));
 1953|  50.1k|                src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 5) - (col + 16) - 1));
 1954|  50.1k|                src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 6) - (col + 16) - 1));
 1955|  50.1k|                src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 7) - (col + 16) - 1));
 1956|       |
 1957|  50.1k|                src_temp1 = _mm_shuffle_epi8(src_temp1, sm3);
 1958|  50.1k|                src_temp2 = _mm_shuffle_epi8(src_temp2, sm3);
 1959|  50.1k|                src_temp3 = _mm_shuffle_epi8(src_temp3, sm3);
 1960|  50.1k|                src_temp4 = _mm_shuffle_epi8(src_temp4, sm3);
 1961|  50.1k|                src_temp5 = _mm_shuffle_epi8(src_temp5, sm3);
 1962|  50.1k|                src_temp6 = _mm_shuffle_epi8(src_temp6, sm3);
 1963|  50.1k|                src_temp7 = _mm_shuffle_epi8(src_temp7, sm3);
 1964|  50.1k|                src_temp8 = _mm_shuffle_epi8(src_temp8, sm3);
 1965|       |
 1966|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 0) * dst_strd)), src_temp1);
 1967|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 1) * dst_strd)), src_temp2);
 1968|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 2) * dst_strd)), src_temp3);
 1969|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 3) * dst_strd)), src_temp4);
 1970|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 4) * dst_strd)), src_temp5);
 1971|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 5) * dst_strd)), src_temp6);
 1972|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 6) * dst_strd)), src_temp7);
 1973|  50.1k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + ((row + 7) * dst_strd)), src_temp8);
 1974|  50.1k|            }
 1975|  34.9k|        }
 1976|  13.7k|    }
 1977|       |
 1978|  40.4k|}
ihevc_intra_pred_luma_mode_18_34_ssse3:
 2023|  14.6k|{
 2024|  14.6k|    WORD32 row;
 2025|  14.6k|    WORD32 two_nt = 2 * nt;
 2026|  14.6k|    __m128i src_temp1, src_temp2, src_temp3, src_temp4, src_temp5, src_temp6, src_temp7, src_temp8;
 2027|  14.6k|    UNUSED(src_strd);
  ------------------
  |  |   38|  14.6k|#define UNUSED(x) ((void)(x))
  ------------------
 2028|  14.6k|    if(mode == 34)
  ------------------
  |  Branch (2028:8): [True: 6.40k, False: 8.26k]
  ------------------
 2029|  6.40k|    {
 2030|  6.40k|        if(nt == 4)
  ------------------
  |  Branch (2030:12): [True: 2.54k, False: 3.85k]
  ------------------
 2031|  2.54k|        {
 2032|       |
 2033|  2.54k|            int temp1, temp2, temp3, temp4;
 2034|       |
 2035|       |            /*pu1_ref[two_nt + col + idx + 1]*/
 2036|  2.54k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 2));
 2037|  2.54k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 3));
 2038|  2.54k|            src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 4));
 2039|  2.54k|            src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 5));
 2040|       |
 2041|  2.54k|            temp1 = _mm_cvtsi128_si32(src_temp1);
 2042|  2.54k|            temp2 = _mm_cvtsi128_si32(src_temp2);
 2043|  2.54k|            temp3 = _mm_cvtsi128_si32(src_temp3);
 2044|  2.54k|            temp4 = _mm_cvtsi128_si32(src_temp4);
 2045|       |
 2046|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 2047|  2.54k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp1;
 2048|  2.54k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp2;
 2049|  2.54k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp3;
 2050|  2.54k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp4;
 2051|       |
 2052|  2.54k|        }
 2053|  3.85k|        else if(nt == 8)
  ------------------
  |  Branch (2053:17): [True: 1.94k, False: 1.91k]
  ------------------
 2054|  1.94k|        {
 2055|       |            /*pu1_ref[two_nt + col + idx + 1]*/
 2056|  1.94k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 2));
 2057|  1.94k|            src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 3));
 2058|  1.94k|            src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 4));
 2059|  1.94k|            src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 5));
 2060|  1.94k|            src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 6));
 2061|  1.94k|            src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 7));
 2062|  1.94k|            src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 8));
 2063|  1.94k|            src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 9));
 2064|       |
 2065|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp1);
 2066|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp2);
 2067|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp3);
 2068|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp4);
 2069|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp5);
 2070|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp6);
 2071|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp7);
 2072|  1.94k|            _mm_storel_epi64((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp8);
 2073|       |
 2074|  1.94k|        }
 2075|  1.91k|        else if(nt == 16)
  ------------------
  |  Branch (2075:17): [True: 1.26k, False: 649]
  ------------------
 2076|  1.26k|        {
 2077|  3.78k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2077:26): [True: 2.52k, False: 1.26k]
  ------------------
 2078|  2.52k|            {
 2079|       |                /*pu1_ref[two_nt + col + idx + 1]*/
 2080|  2.52k|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 0) + 2));
 2081|  2.52k|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 1) + 2));
 2082|  2.52k|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 2) + 2));
 2083|  2.52k|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 3) + 2));
 2084|  2.52k|                src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 4) + 2));
 2085|  2.52k|                src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 5) + 2));
 2086|  2.52k|                src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 6) + 2));
 2087|  2.52k|                src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (row + 7) + 2));
 2088|       |
 2089|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), src_temp1);
 2090|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp2);
 2091|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp3);
 2092|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp4);
 2093|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp5);
 2094|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp6);
 2095|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp7);
 2096|  2.52k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 7) * dst_strd)), src_temp8);
 2097|       |
 2098|       |
 2099|  2.52k|            }
 2100|  1.26k|        }
 2101|    649|        else
 2102|    649|        {
 2103|    649|            __m128i src_temp9, src_temp10, src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16;
 2104|  3.24k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2104:26): [True: 2.59k, False: 649]
  ------------------
 2105|  2.59k|            {
 2106|       |                /*pu1_ref[two_nt + col + idx + 1]*/
 2107|  2.59k|                src_temp1  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (0 + 0) + 2));
 2108|  2.59k|                src_temp9  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (0 + 16) + 2));
 2109|  2.59k|                src_temp2  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (1 + 0) + 2));
 2110|  2.59k|                src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (1 + 16) + 2));
 2111|  2.59k|                src_temp3  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (2 + 0) + 2));
 2112|  2.59k|                src_temp11 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (2 + 16) + 2));
 2113|  2.59k|                src_temp4  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (3 + 0) + 2));
 2114|  2.59k|                src_temp12 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (3 + 16) + 2));
 2115|       |
 2116|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (0 * dst_strd)), src_temp1);
 2117|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (0 * dst_strd)), src_temp9);
 2118|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (1 * dst_strd)), src_temp2);
 2119|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (1 * dst_strd)), src_temp10);
 2120|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (2 * dst_strd)), src_temp3);
 2121|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (2 * dst_strd)), src_temp11);
 2122|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (3 * dst_strd)), src_temp4);
 2123|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (3 * dst_strd)), src_temp12);
 2124|       |
 2125|  2.59k|                src_temp5  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (4 + 0) + 2));
 2126|  2.59k|                src_temp13 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (4 + 16) + 2));
 2127|  2.59k|                src_temp6  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (5 + 0) + 2));
 2128|  2.59k|                src_temp14 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (5 + 16) + 2));
 2129|  2.59k|                src_temp7  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (6 + 0) + 2));
 2130|  2.59k|                src_temp15 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (6 + 16) + 2));
 2131|  2.59k|                src_temp8  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (7 + 0) + 2));
 2132|  2.59k|                src_temp16 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + (7 + 16) + 2));
 2133|       |
 2134|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (4 * dst_strd)), src_temp5);
 2135|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (4 * dst_strd)), src_temp13);
 2136|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (5 * dst_strd)), src_temp6);
 2137|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (5 * dst_strd)), src_temp14);
 2138|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (6 * dst_strd)), src_temp7);
 2139|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (6 * dst_strd)), src_temp15);
 2140|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (7 * dst_strd)), src_temp8);
 2141|  2.59k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (7 * dst_strd)), src_temp16);
 2142|       |
 2143|  2.59k|                pu1_ref += 8;
 2144|  2.59k|                pu1_dst += 8 * dst_strd;
 2145|  2.59k|            }
 2146|    649|        }
 2147|  6.40k|    }
 2148|  8.26k|    else
 2149|  8.26k|    {
 2150|  8.26k|        if(nt == 4)
  ------------------
  |  Branch (2150:12): [True: 2.12k, False: 6.14k]
  ------------------
 2151|  2.12k|        {
 2152|  2.12k|            int temp1, temp2, temp3, temp4;
 2153|       |
 2154|       |            /*pu1_ref[two_nt + col + idx + 1]*/
 2155|  2.12k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 3));
 2156|  2.12k|            src_temp2 = _mm_srli_si128(src_temp1, 1);
 2157|  2.12k|            src_temp3 = _mm_srli_si128(src_temp1, 2);
 2158|  2.12k|            src_temp4 = _mm_srli_si128(src_temp1, 3);
 2159|       |
 2160|  2.12k|            temp1 = _mm_cvtsi128_si32(src_temp4);
 2161|  2.12k|            temp2 = _mm_cvtsi128_si32(src_temp3);
 2162|  2.12k|            temp3 = _mm_cvtsi128_si32(src_temp2);
 2163|  2.12k|            temp4 = _mm_cvtsi128_si32(src_temp1);
 2164|       |
 2165|       |            /*pu1_dst[(row * dst_strd) + col] = pu1_ref[two_nt - 1 - row];*/
 2166|  2.12k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp1;
 2167|  2.12k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp2;
 2168|  2.12k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp3;
 2169|  2.12k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp4;
 2170|       |
 2171|  2.12k|        }
 2172|  6.14k|        else if(nt == 8)
  ------------------
  |  Branch (2172:17): [True: 2.05k, False: 4.09k]
  ------------------
 2173|  2.05k|        {
 2174|       |            /*pu1_ref[two_nt + col + idx + 1]*/
 2175|  2.05k|            src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 7));
 2176|  2.05k|            src_temp2 = _mm_srli_si128(src_temp1, 1);
 2177|  2.05k|            src_temp3 = _mm_srli_si128(src_temp1, 2);
 2178|  2.05k|            src_temp4 = _mm_srli_si128(src_temp1, 3);
 2179|  2.05k|            src_temp5 = _mm_srli_si128(src_temp1, 4);
 2180|  2.05k|            src_temp6 = _mm_srli_si128(src_temp1, 5);
 2181|  2.05k|            src_temp7 = _mm_srli_si128(src_temp1, 6);
 2182|  2.05k|            src_temp8 = _mm_srli_si128(src_temp1, 7);
 2183|       |
 2184|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (0 * dst_strd)), src_temp8);
 2185|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (1 * dst_strd)), src_temp7);
 2186|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (2 * dst_strd)), src_temp6);
 2187|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (3 * dst_strd)), src_temp5);
 2188|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (4 * dst_strd)), src_temp4);
 2189|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (5 * dst_strd)), src_temp3);
 2190|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (6 * dst_strd)), src_temp2);
 2191|  2.05k|            _mm_storel_epi64((__m128i *)(pu1_dst + (7 * dst_strd)), src_temp1);
 2192|       |
 2193|       |
 2194|  2.05k|        }
 2195|  4.09k|        else if(nt == 16)
  ------------------
  |  Branch (2195:17): [True: 3.32k, False: 769]
  ------------------
 2196|  3.32k|        {
 2197|  9.96k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2197:26): [True: 6.64k, False: 3.32k]
  ------------------
 2198|  6.64k|            {
 2199|       |                /*pu1_ref[two_nt + col + idx + 1]*/
 2200|  6.64k|                src_temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 0)));
 2201|  6.64k|                src_temp2 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 1)));
 2202|  6.64k|                src_temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 2)));
 2203|  6.64k|                src_temp4 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 3)));
 2204|  6.64k|                src_temp5 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 4)));
 2205|  6.64k|                src_temp6 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 5)));
 2206|  6.64k|                src_temp7 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 6)));
 2207|  6.64k|                src_temp8 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - (row + 7)));
 2208|       |
 2209|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 0) * dst_strd)), src_temp1);
 2210|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 1) * dst_strd)), src_temp2);
 2211|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 2) * dst_strd)), src_temp3);
 2212|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 3) * dst_strd)), src_temp4);
 2213|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 4) * dst_strd)), src_temp5);
 2214|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 5) * dst_strd)), src_temp6);
 2215|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 6) * dst_strd)), src_temp7);
 2216|  6.64k|                _mm_storeu_si128((__m128i *)(pu1_dst + ((row + 7) * dst_strd)), src_temp8);
 2217|       |
 2218|  6.64k|            }
 2219|       |
 2220|  3.32k|        }
 2221|    769|        else
 2222|    769|        {
 2223|    769|            __m128i src_temp9, src_temp10, src_temp11, src_temp12, src_temp13, src_temp14, src_temp15, src_temp16;
 2224|  3.85k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2224:26): [True: 3.08k, False: 769]
  ------------------
 2225|  3.08k|            {
 2226|       |                /*pu1_ref[two_nt + col + idx + 1]*/
 2227|  3.08k|                src_temp1  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 0 + 0));
 2228|  3.08k|                src_temp9  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 0 + 16));
 2229|  3.08k|                src_temp2  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 1 + 0));
 2230|  3.08k|                src_temp10 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 1 + 16));
 2231|  3.08k|                src_temp3  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 2 + 0));
 2232|  3.08k|                src_temp11 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 2 + 16));
 2233|  3.08k|                src_temp4  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 3 + 0));
 2234|  3.08k|                src_temp12 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 3 + 16));
 2235|       |
 2236|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (0 * dst_strd)), src_temp1);
 2237|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (0 * dst_strd)), src_temp9);
 2238|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (1 * dst_strd)), src_temp2);
 2239|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (1 * dst_strd)), src_temp10);
 2240|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (2 * dst_strd)), src_temp3);
 2241|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (2 * dst_strd)), src_temp11);
 2242|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (3 * dst_strd)), src_temp4);
 2243|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (3 * dst_strd)), src_temp12);
 2244|       |
 2245|  3.08k|                src_temp5  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 4 + 0));
 2246|  3.08k|                src_temp13 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 4 + 16));
 2247|  3.08k|                src_temp6  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 5 + 0));
 2248|  3.08k|                src_temp14 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 5 + 16));
 2249|  3.08k|                src_temp7  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 6 + 0));
 2250|  3.08k|                src_temp15 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 6 + 16));
 2251|  3.08k|                src_temp8  = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 7 + 0));
 2252|  3.08k|                src_temp16 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 7 + 16));
 2253|       |
 2254|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (4 * dst_strd)), src_temp5);
 2255|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (4 * dst_strd)), src_temp13);
 2256|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (5 * dst_strd)), src_temp6);
 2257|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (5 * dst_strd)), src_temp14);
 2258|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (6 * dst_strd)), src_temp7);
 2259|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (6 * dst_strd)), src_temp15);
 2260|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst +  0 + (7 * dst_strd)), src_temp8);
 2261|  3.08k|                _mm_storeu_si128((__m128i *)(pu1_dst + 16 + (7 * dst_strd)), src_temp16);
 2262|       |
 2263|  3.08k|                pu1_ref -= 8;
 2264|  3.08k|                pu1_dst += 8 * dst_strd;
 2265|  3.08k|            }
 2266|    769|        }
 2267|  8.26k|    }
 2268|  14.6k|}
ihevc_intra_pred_luma_mode_3_to_9_ssse3:
 2314|  40.5k|{
 2315|  40.5k|    WORD32 row, col;
 2316|  40.5k|    WORD32 two_nt = 2 * nt;
 2317|  40.5k|    WORD32 intra_pred_ang;
 2318|       |
 2319|       |
 2320|  40.5k|    __m128i const_temp_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b, zero_8x16b;
 2321|  40.5k|    __m128i fract_4x32b, intra_pred_ang_4x32b;
 2322|  40.5k|    __m128i row_4x32b, two_nt_4x32b, ref_main_idx_4x32b, res_temp5_4x32b, sm3;
 2323|  40.5k|    UNUSED(src_strd);
  ------------------
  |  |   38|  40.5k|#define UNUSED(x) ((void)(x))
  ------------------
 2324|       |
 2325|       |    /* Intra Pred Angle according to the mode */
 2326|  40.5k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 2327|       |
 2328|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 2329|       |    /* samples dependent on distance to obtain destination sample */
 2330|       |
 2331|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 2332|       |    /* samples dependent on distance to obtain destination sample */
 2333|       |
 2334|  40.5k|    const_temp_4x32b  = _mm_set1_epi16(16);
 2335|  40.5k|    const_temp2_4x32b = _mm_set1_epi32(31);
 2336|  40.5k|    const_temp3_4x32b = _mm_set1_epi32(32);
 2337|  40.5k|    const_temp4_4x32b = _mm_set1_epi32(4);
 2338|       |
 2339|  40.5k|    two_nt_4x32b = _mm_set1_epi32(two_nt - nt);
 2340|       |
 2341|       |
 2342|  40.5k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 2343|       |
 2344|       |    /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 2345|  40.5k|    intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 2346|       |
 2347|  40.5k|    row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 2348|       |
 2349|  40.5k|    if(nt == 4)
  ------------------
  |  Branch (2349:8): [True: 10.3k, False: 30.1k]
  ------------------
 2350|  10.3k|    {
 2351|       |
 2352|  10.3k|        WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 2353|  10.3k|        int temp11, temp21, temp31, temp41;
 2354|       |        // WORD8  ai1_fract_temp_val[16], ai1_row_temp_val[16];
 2355|       |
 2356|  10.3k|        __m128i fract1_8x16b, fract2_8x16b, sign_8x16b;
 2357|  10.3k|        __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2358|       |
 2359|  10.3k|        __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2360|  10.3k|        __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b; //, src_temp8_8x16b;
 2361|  10.3k|        __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 2362|       |
 2363|  10.3k|        row_4x32b = _mm_set_epi16(4, 3, 2, 1, 4, 3, 2, 1);
 2364|  10.3k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2365|       |
 2366|       |        /* pos = ((row + 1) * intra_pred_ang); */
 2367|  10.3k|        res_temp5_4x32b = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2368|  10.3k|        zero_8x16b      = _mm_setzero_si128();
 2369|  10.3k|        sign_8x16b      = _mm_cmpgt_epi16(zero_8x16b, res_temp5_4x32b);
 2370|  10.3k|        res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, sign_8x16b);
 2371|       |
 2372|       |        /* idx = pos >> 5; */
 2373|  10.3k|        fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2374|       |
 2375|       |        /* fract = pos & (31); */
 2376|  10.3k|        ref_main_idx_4x32b = _mm_sub_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 2377|       |
 2378|       |        /*(32 - fract) */
 2379|  10.3k|        row_4x32b = _mm_sub_epi32(const_temp3_4x32b, fract_4x32b);
 2380|       |
 2381|  10.3k|        fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2382|  10.3k|        fract2_8x16b = _mm_slli_epi16(row_4x32b, 8);
 2383|       |
 2384|  10.3k|        fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2385|  10.3k|        row_4x32b = _mm_or_si128(row_4x32b, fract2_8x16b); /*(32 - fract) */
 2386|       |
 2387|  10.3k|        fract2_8x16b = _mm_unpackhi_epi8(row_4x32b, fract_4x32b);
 2388|  10.3k|        fract1_8x16b = _mm_unpacklo_epi8(row_4x32b, fract_4x32b);
 2389|       |
 2390|  10.3k|        temp1_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 2391|  10.3k|        temp2_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 2392|  10.3k|        temp3_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 2393|  10.3k|        temp4_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 2394|       |
 2395|  10.3k|        ref_main_temp0 = _mm_srli_si128(ref_main_idx_4x32b, 4);  /* next 32 bit values */
 2396|  10.3k|        ref_main_temp1 = _mm_srli_si128(ref_main_idx_4x32b, 8);  /* next 32 bit values */
 2397|  10.3k|        ref_main_temp2 = _mm_srli_si128(ref_main_idx_4x32b, 12); /* next 32 bit values */
 2398|  10.3k|        ref_main_idx1  = _mm_cvtsi128_si32(ref_main_idx_4x32b);    /* col=0*/
 2399|  10.3k|        ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* col=1*/
 2400|  10.3k|        ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* col=2*/
 2401|  10.3k|        ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* col=3*/
 2402|       |
 2403|       |        /* loding 8-bit 16 pixels */
 2404|  10.3k|        src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1 - 1)); /* col=0*/
 2405|  10.3k|        src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx2 - 1)); /* col=1*/
 2406|  10.3k|        src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx3 - 1)); /* col=2*/
 2407|  10.3k|        src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx4 - 1)); /* col=3*/
 2408|       |
 2409|  10.3k|        src_temp1_8x16b =  _mm_shuffle_epi8(src_temp1_8x16b, sm3); /* col=0*/
 2410|  10.3k|        src_temp2_8x16b =  _mm_shuffle_epi8(src_temp2_8x16b, sm3); /* col=1*/
 2411|  10.3k|        src_temp3_8x16b =  _mm_shuffle_epi8(src_temp3_8x16b, sm3); /* col=2*/
 2412|  10.3k|        src_temp4_8x16b =  _mm_shuffle_epi8(src_temp4_8x16b, sm3); /* col=3*/
 2413|       |
 2414|       |        /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2415|  10.3k|        src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2416|  10.3k|        src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2417|  10.3k|        src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2418|  10.3k|        src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2419|       |
 2420|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2421|  10.3k|        src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2422|  10.3k|        src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2423|  10.3k|        src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2424|  10.3k|        src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2425|       |
 2426|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2427|  10.3k|        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 2428|  10.3k|        src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 2429|  10.3k|        src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 2430|  10.3k|        src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 2431|       |
 2432|       |        /* converting 16 bit to 8 bit */
 2433|  10.3k|        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2434|  10.3k|        src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2435|       |
 2436|       |
 2437|  10.3k|        src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2438|  10.3k|        src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2439|       |
 2440|  10.3k|        src_temp3_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2441|  10.3k|        src_temp2_8x16b = _mm_srli_si128(src_temp3_8x16b, 4);
 2442|  10.3k|        src_temp1_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 2443|  10.3k|        src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 12);
 2444|       |
 2445|  10.3k|        temp11 = _mm_cvtsi128_si32(src_temp7_8x16b);
 2446|  10.3k|        temp21 = _mm_cvtsi128_si32(src_temp1_8x16b);
 2447|  10.3k|        temp31 = _mm_cvtsi128_si32(src_temp2_8x16b);
 2448|  10.3k|        temp41 = _mm_cvtsi128_si32(src_temp3_8x16b);
 2449|       |
 2450|       |        /* loding 4-bit 8 pixels values */
 2451|  10.3k|        *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 2452|  10.3k|        *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 2453|  10.3k|        *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 2454|  10.3k|        *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 2455|       |
 2456|  10.3k|    }
 2457|       |
 2458|  30.1k|    else if(nt == 16 || nt == 32)
  ------------------
  |  Branch (2458:13): [True: 11.1k, False: 18.9k]
  |  Branch (2458:25): [True: 7.10k, False: 11.8k]
  ------------------
 2459|  18.2k|    {
 2460|  18.2k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2461|  18.2k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 2462|  18.2k|        const_temp2_4x32b = _mm_set1_epi16(31);
 2463|  18.2k|        const_temp4_4x32b = _mm_set1_epi16(8);
 2464|  18.2k|        const_temp3_4x32b = _mm_set1_epi16(32);
 2465|  18.2k|        two_nt_4x32b = _mm_set1_epi16(two_nt);
 2466|       |
 2467|  68.8k|        for(col = 0; col < nt; col += 8)
  ------------------
  |  Branch (2467:22): [True: 50.5k, False: 18.2k]
  ------------------
 2468|  50.5k|        {
 2469|  50.5k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 2470|  50.5k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 2471|       |            //WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 2472|       |
 2473|  50.5k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 2474|       |
 2475|  50.5k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2476|  50.5k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 2477|       |
 2478|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2479|  50.5k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2480|       |
 2481|       |            /* idx = pos >> 5; */
 2482|  50.5k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2483|       |
 2484|       |            /*(32 - fract) */
 2485|  50.5k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 2486|       |
 2487|  50.5k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2488|  50.5k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 2489|       |
 2490|  50.5k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2491|  50.5k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 2492|       |
 2493|       |
 2494|  50.5k|            fract8_8x16b = _mm_unpackhi_epi8(fract2_8x16b, fract_4x32b);
 2495|  50.5k|            fract_4x32b = _mm_unpacklo_epi8(fract2_8x16b, fract_4x32b);
 2496|       |
 2497|  50.5k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 2498|  50.5k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 2499|  50.5k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 2500|  50.5k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 2501|       |
 2502|  50.5k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 2503|  50.5k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 2504|  50.5k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 2505|  50.5k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 2506|       |
 2507|       |            /* fract = pos & (31); */
 2508|  50.5k|            ref_main_idx_4x32b = _mm_sub_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 2509|       |
 2510|  50.5k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 2511|       |
 2512|  50.5k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 2513|  50.5k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 2514|  50.5k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 2515|  50.5k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 2516|       |
 2517|  50.5k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 2518|  50.5k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 2519|  50.5k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 2520|  50.5k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 2521|       |
 2522|   206k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (2522:26): [True: 156k, False: 50.5k]
  ------------------
 2523|   156k|            {
 2524|   156k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2525|   156k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 2526|       |
 2527|       |
 2528|   156k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 2529|   156k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 2530|       |
 2531|       |                /* loding 8-bit 16 pixels */
 2532|   156k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx1 - 1 - (8 + row))); /* col=0*/
 2533|   156k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx2 - 1 - (8 + row))); /* col=1*/
 2534|   156k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx3 - 1 - (8 + row))); /* col=2*/
 2535|   156k|                src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx4 - 1 - (8 + row))); /* col=3*/
 2536|       |
 2537|       |                /* loding 8-bit 16 pixels */
 2538|   156k|                src_temp11_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx5 - 1 - (8 + row))); /* col=5*/
 2539|   156k|                src_temp12_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx6 - 1 - (8 + row))); /* col=6*/
 2540|   156k|                src_temp13_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx7 - 1 - (8 + row))); /* col=7*/
 2541|   156k|                src_temp14_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx8 - 1 - (8 + row))); /* col=8*/
 2542|       |
 2543|   156k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp1_8x16b, sm3); /* col=0*/
 2544|   156k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp2_8x16b, sm3); /* col=1*/
 2545|   156k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp3_8x16b, sm3); /* col=2*/
 2546|   156k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp4_8x16b, sm3); /* col=3*/
 2547|       |
 2548|   156k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp11_8x16b, sm3); /* col=0*/
 2549|   156k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp12_8x16b, sm3); /* col=1*/
 2550|   156k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp13_8x16b, sm3); /* col=2*/
 2551|   156k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp14_8x16b, sm3); /* col=3*/
 2552|       |
 2553|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2554|   156k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2555|   156k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2556|   156k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2557|   156k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2558|       |
 2559|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2560|   156k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 2561|   156k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 2562|   156k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 2563|   156k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 2564|       |
 2565|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2566|   156k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2567|   156k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2568|   156k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2569|   156k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2570|       |
 2571|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2572|   156k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 2573|   156k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 2574|   156k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 2575|   156k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 2576|       |
 2577|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2578|   156k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 2579|   156k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 2580|   156k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 2581|   156k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 2582|       |
 2583|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2584|   156k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 2585|   156k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 2586|   156k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 2587|   156k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 2588|       |
 2589|       |                /* converting 16 bit to 8 bit */
 2590|   156k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2591|   156k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2592|       |
 2593|       |                /* converting 16 bit to 8 bit */
 2594|   156k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 2595|   156k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 2596|       |
 2597|   156k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2598|   156k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2599|       |
 2600|   156k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2601|   156k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2602|       |
 2603|   156k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2604|   156k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2605|       |
 2606|   156k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2607|   156k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2608|       |
 2609|   156k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2610|   156k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2611|       |
 2612|   156k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 2613|   156k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 2614|       |
 2615|   156k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2616|   156k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2617|       |
 2618|   156k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 2619|   156k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 2620|       |
 2621|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 7))), src_temp1_8x16b);       /* row=7*/
 2622|       |
 2623|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 6))), src_temp5_8x16b);       /* row=6*/
 2624|       |
 2625|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 5))), src_temp2_8x16b);       /* row=5*/
 2626|       |
 2627|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 4))), src_temp6_8x16b);       /* row=4*/
 2628|       |
 2629|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp3_8x16b);       /* row=3*/
 2630|       |
 2631|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp7_8x16b);       /* row=2*/
 2632|       |
 2633|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp4_8x16b);       /* row=1*/
 2634|       |
 2635|   156k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 0))), src_temp8_8x16b);       /* row=0*/
 2636|       |
 2637|   156k|            }
 2638|  50.5k|        }
 2639|  18.2k|    }
 2640|  11.8k|    else
 2641|  11.8k|    {
 2642|  11.8k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2643|  11.8k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 2644|  11.8k|        const_temp2_4x32b = _mm_set1_epi16(31);
 2645|  11.8k|        const_temp4_4x32b = _mm_set1_epi16(8);
 2646|  11.8k|        const_temp3_4x32b = _mm_set1_epi16(32);
 2647|  11.8k|        two_nt_4x32b = _mm_set1_epi16(two_nt - nt);
 2648|  11.8k|        {
 2649|  11.8k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 2650|  11.8k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 2651|       |
 2652|  11.8k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 2653|       |
 2654|  11.8k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2655|  11.8k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 2656|       |
 2657|       |            /* pos = ((row + 1) * intra_pred_ang); */
 2658|  11.8k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2659|       |
 2660|       |            /* idx = pos >> 5; */
 2661|  11.8k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2662|       |
 2663|       |            /* fract = pos & (31); */
 2664|  11.8k|            ref_main_idx_4x32b = _mm_sub_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 2665|       |
 2666|       |            /*(32 - fract) */
 2667|  11.8k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 2668|       |
 2669|  11.8k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2670|  11.8k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 2671|       |
 2672|  11.8k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2673|  11.8k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 2674|       |
 2675|       |
 2676|  11.8k|            fract8_8x16b = _mm_unpackhi_epi8(fract2_8x16b, fract_4x32b);
 2677|  11.8k|            fract_4x32b = _mm_unpacklo_epi8(fract2_8x16b, fract_4x32b);
 2678|       |
 2679|  11.8k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 2680|  11.8k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 2681|  11.8k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 2682|  11.8k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 2683|       |
 2684|  11.8k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 2685|  11.8k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 2686|  11.8k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 2687|  11.8k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 2688|       |
 2689|  11.8k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 2690|  11.8k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 2691|  11.8k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 2692|  11.8k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 2693|       |
 2694|  11.8k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 2695|  11.8k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 2696|  11.8k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 2697|  11.8k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 2698|       |
 2699|  11.8k|            {
 2700|  11.8k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2701|  11.8k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 2702|       |
 2703|  11.8k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 2704|  11.8k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 2705|       |
 2706|       |                /* loding 8-bit 16 pixels */
 2707|  11.8k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx1 - 1)); /* col=0*/
 2708|  11.8k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx2 - 1)); /* col=1*/
 2709|  11.8k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx3 - 1)); /* col=2*/
 2710|  11.8k|                src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx4 - 1)); /* col=3*/
 2711|       |
 2712|       |                /* loding 8-bit 16 pixels */
 2713|  11.8k|                src_temp11_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx5 - 1)); /* col=5*/
 2714|  11.8k|                src_temp12_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx6 - 1)); /* col=6*/
 2715|  11.8k|                src_temp13_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx7 - 1)); /* col=7*/
 2716|  11.8k|                src_temp14_8x16b = _mm_loadu_si128((__m128i *)(pu1_ref + pi2_ref_main_idx8 - 1)); /* col=8*/
 2717|       |
 2718|  11.8k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp1_8x16b, sm3); /* col=0*/
 2719|  11.8k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp2_8x16b, sm3); /* col=1*/
 2720|  11.8k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp3_8x16b, sm3); /* col=2*/
 2721|  11.8k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp4_8x16b, sm3); /* col=3*/
 2722|       |
 2723|  11.8k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp11_8x16b, sm3); /* col=0*/
 2724|  11.8k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp12_8x16b, sm3); /* col=1*/
 2725|  11.8k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp13_8x16b, sm3); /* col=2*/
 2726|  11.8k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp14_8x16b, sm3); /* col=3*/
 2727|       |
 2728|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2729|  11.8k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2730|  11.8k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2731|  11.8k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2732|  11.8k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2733|       |
 2734|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2735|  11.8k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 2736|  11.8k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 2737|  11.8k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 2738|  11.8k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 2739|       |
 2740|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2741|  11.8k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2742|  11.8k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2743|  11.8k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2744|  11.8k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2745|       |
 2746|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2747|  11.8k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 2748|  11.8k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 2749|  11.8k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 2750|  11.8k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 2751|       |
 2752|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2753|  11.8k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 2754|  11.8k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 2755|  11.8k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 2756|  11.8k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 2757|       |
 2758|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 2759|  11.8k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 2760|  11.8k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 2761|  11.8k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 2762|  11.8k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 2763|       |
 2764|       |                /* converting 16 bit to 8 bit */
 2765|  11.8k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 2766|  11.8k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 2767|       |
 2768|       |                /* converting 16 bit to 8 bit */
 2769|  11.8k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 2770|  11.8k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 2771|       |
 2772|  11.8k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2773|  11.8k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 2774|       |
 2775|  11.8k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2776|  11.8k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 2777|       |
 2778|  11.8k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2779|  11.8k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2780|       |
 2781|  11.8k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2782|  11.8k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 2783|       |
 2784|  11.8k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2785|  11.8k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 2786|       |
 2787|  11.8k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 2788|  11.8k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 2789|       |
 2790|  11.8k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2791|  11.8k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 2792|       |
 2793|  11.8k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 2794|  11.8k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 2795|       |
 2796|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst), src_temp8_8x16b);       /* row=0*/
 2797|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 1)), src_temp4_8x16b);       /* row=1*/
 2798|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 2)), src_temp7_8x16b);       /* row=2*/
 2799|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 3)), src_temp3_8x16b);       /* row=3*/
 2800|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 4)), src_temp6_8x16b);       /* row=4*/
 2801|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 5)), src_temp2_8x16b);       /* row=5*/
 2802|       |
 2803|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 6)), src_temp5_8x16b);       /* row=6*/
 2804|  11.8k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 7)), src_temp1_8x16b);       /* row=7*/
 2805|       |
 2806|  11.8k|            }
 2807|  11.8k|        }
 2808|  11.8k|    }
 2809|       |
 2810|  40.5k|}
ihevc_intra_pred_luma_mode_11_to_17_ssse3:
 2858|  30.9k|{
 2859|       |
 2860|       |    /* This function and ihevc_intra_pred_luma_mode_19_to_25 are same except*/
 2861|       |    /* for ref main & side samples assignment,can be combined for */
 2862|       |    /* optimzation*/
 2863|       |
 2864|  30.9k|    WORD32 row, col, k;
 2865|  30.9k|    WORD32 two_nt;
 2866|  30.9k|    WORD32 intra_pred_ang, inv_ang, inv_ang_sum;
 2867|  30.9k|    WORD32 ref_idx;
 2868|       |
 2869|  30.9k|    __m128i const_temp_4x32b, const_temp2_4x32b, const_temp3_4x32b, const_temp4_4x32b;
 2870|  30.9k|    __m128i fract_4x32b,  intra_pred_ang_4x32b;
 2871|  30.9k|    __m128i row_4x32b, two_nt_4x32b, ref_main_idx_4x32b, res_temp5_4x32b, sm3;
 2872|       |
 2873|       |
 2874|  30.9k|    UWORD8 ref_tmp[2 * MAX_CU_SIZE + 2] = {0};
 2875|  30.9k|    UWORD8 *ref_main;
 2876|  30.9k|    UWORD8 *ref_temp;
 2877|  30.9k|    UNUSED(src_strd);
  ------------------
  |  |   38|  30.9k|#define UNUSED(x) ((void)(x))
  ------------------
 2878|  30.9k|    inv_ang_sum = 128;
 2879|  30.9k|    two_nt    = 2 * nt;
 2880|  30.9k|    ref_temp = ref_tmp + 1;
 2881|  30.9k|    ref_main = ref_temp + nt - 1;
 2882|  30.9k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 2883|       |
 2884|       |    /* For the angles other then 45 degree, interpolation btw 2 neighboring */
 2885|       |    /* samples dependent on distance to obtain destination sample */
 2886|  30.9k|    const_temp_4x32b  = _mm_set1_epi16(16);
 2887|  30.9k|    const_temp2_4x32b = _mm_set1_epi32(31);
 2888|  30.9k|    const_temp3_4x32b = _mm_set1_epi32(32);
 2889|  30.9k|    const_temp4_4x32b = _mm_set1_epi32(4);
 2890|       |
 2891|  30.9k|    two_nt_4x32b = _mm_set1_epi32(1);
 2892|       |
 2893|       |
 2894|  30.9k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 2895|       |
 2896|       |    /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 2897|  30.9k|    intra_pred_ang_4x32b = _mm_set1_epi32(intra_pred_ang);
 2898|       |
 2899|  30.9k|    row_4x32b = _mm_set_epi32(4, 3, 2, 1);
 2900|       |
 2901|  30.9k|    if(nt == 4)
  ------------------
  |  Branch (2901:8): [True: 6.19k, False: 24.7k]
  ------------------
 2902|  6.19k|    {
 2903|       |
 2904|  6.19k|        WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 2905|  6.19k|        int temp11, temp21, temp31, temp41;
 2906|       |//        WORD8  ai1_fract_temp_val[16], ai1_row_temp_val[16];
 2907|       |
 2908|  6.19k|        __m128i fract1_8x16b, fract2_8x16b;
 2909|  6.19k|        __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 2910|       |
 2911|  6.19k|        __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 2912|  6.19k|        __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 2913|  6.19k|        __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2, zero_8x16b, sign_8x16b;
 2914|       |
 2915|       |        /* Intermediate reference samples for negative angle modes */
 2916|       |        /* This have to be removed during optimization*/
 2917|       |        /* For horizontal modes, (ref main = ref left) (ref side = ref above) */
 2918|  6.19k|        inv_ang = gai4_ihevc_inv_ang_table[mode - 11];
 2919|       |
 2920|  6.19k|        ref_main = ref_temp + nt - 1;
 2921|  37.1k|        for(k = 0; k < nt + 1; k++)
  ------------------
  |  Branch (2921:20): [True: 30.9k, False: 6.19k]
  ------------------
 2922|  30.9k|            ref_temp[k + nt - 1] = pu1_ref[two_nt - k];
 2923|       |
 2924|  6.19k|        ref_main = ref_temp + nt - 1;
 2925|  6.19k|        ref_idx = (nt * intra_pred_ang) >> 5;
 2926|  6.19k|        zero_8x16b = _mm_setzero_si128();
 2927|       |
 2928|  6.19k|        row_4x32b = _mm_set_epi16(4, 3, 2, 1, 4, 3, 2, 1);
 2929|  6.19k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 2930|       |        /* SIMD Optimization can be done using look-up table for the loop */
 2931|       |        /* For negative angled derive the main reference samples from side */
 2932|       |        /*  reference samples refer to section 8.4.4.2.6 */
 2933|  13.8k|        for(k = -1; k > ref_idx; k--)
  ------------------
  |  Branch (2933:21): [True: 7.66k, False: 6.19k]
  ------------------
 2934|  7.66k|        {
 2935|  7.66k|            inv_ang_sum += inv_ang;
 2936|  7.66k|            ref_main[k] = pu1_ref[two_nt + (inv_ang_sum >> 8)];
 2937|  7.66k|        }
 2938|       |
 2939|       |
 2940|       |        /* pos = ((row + 1) * intra_pred_ang); */
 2941|  6.19k|        res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 2942|       |
 2943|  6.19k|        sign_8x16b      = _mm_cmpgt_epi16(zero_8x16b, res_temp5_4x32b);
 2944|  6.19k|        res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, sign_8x16b);
 2945|       |
 2946|       |        /* idx = pos >> 5; */
 2947|  6.19k|        fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 2948|       |
 2949|       |        /* fract = pos & (31); */
 2950|  6.19k|        ref_main_idx_4x32b = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 2951|       |
 2952|       |        /*(32 - fract) */
 2953|  6.19k|        row_4x32b = _mm_sub_epi32(const_temp3_4x32b, fract_4x32b);
 2954|       |
 2955|  6.19k|        fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 2956|  6.19k|        fract2_8x16b = _mm_slli_epi16(row_4x32b, 8);
 2957|       |
 2958|  6.19k|        fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 2959|  6.19k|        row_4x32b = _mm_or_si128(row_4x32b, fract2_8x16b); /*(32 - fract) */
 2960|       |
 2961|  6.19k|        fract2_8x16b = _mm_unpackhi_epi8(fract_4x32b, row_4x32b);
 2962|  6.19k|        fract1_8x16b = _mm_unpacklo_epi8(fract_4x32b, row_4x32b);
 2963|       |
 2964|  6.19k|        temp1_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 2965|  6.19k|        temp2_8x16b =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 2966|  6.19k|        temp3_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 2967|  6.19k|        temp4_8x16b =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 2968|       |
 2969|  6.19k|        ref_main_temp0 = _mm_srli_si128(ref_main_idx_4x32b, 4);  /* next 32 bit values */
 2970|  6.19k|        ref_main_temp1 = _mm_srli_si128(ref_main_idx_4x32b, 8);  /* next 32 bit values */
 2971|  6.19k|        ref_main_temp2 = _mm_srli_si128(ref_main_idx_4x32b, 12); /* next 32 bit values */
 2972|  6.19k|        ref_main_idx1  = _mm_cvtsi128_si32(ref_main_idx_4x32b);    /* col=0*/
 2973|  6.19k|        ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* col=1*/
 2974|  6.19k|        ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* col=2*/
 2975|  6.19k|        ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* col=3*/
 2976|       |
 2977|       |        /* loding 8-bit 16 pixels */
 2978|  6.19k|        src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1)); /* col=0*/
 2979|  6.19k|        src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx2)); /* col=1*/
 2980|  6.19k|        src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx3)); /* col=2*/
 2981|  6.19k|        src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx4)); /* col=3*/
 2982|       |
 2983|  6.19k|        src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 2984|  6.19k|        src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 2985|  6.19k|        src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 2986|  6.19k|        src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 2987|       |
 2988|       |        /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 2989|  6.19k|        src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 2990|  6.19k|        src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 2991|  6.19k|        src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 2992|  6.19k|        src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 2993|       |
 2994|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 2995|  6.19k|        src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 2996|  6.19k|        src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 2997|  6.19k|        src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 2998|  6.19k|        src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 2999|       |
 3000|       |        /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3001|  6.19k|        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 3002|  6.19k|        src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 3003|  6.19k|        src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 3004|  6.19k|        src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 3005|       |
 3006|       |        /* converting 16 bit to 8 bit */
 3007|  6.19k|        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 3008|  6.19k|        src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 3009|       |
 3010|       |
 3011|  6.19k|        src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3012|  6.19k|        src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3013|       |
 3014|  6.19k|        src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3015|  6.19k|        src_temp1_8x16b = _mm_srli_si128(src_temp7_8x16b, 4);
 3016|  6.19k|        src_temp2_8x16b = _mm_srli_si128(src_temp7_8x16b, 8);
 3017|  6.19k|        src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 12);
 3018|       |
 3019|  6.19k|        temp11 = _mm_cvtsi128_si32(src_temp7_8x16b);
 3020|  6.19k|        temp21 = _mm_cvtsi128_si32(src_temp1_8x16b);
 3021|  6.19k|        temp31 = _mm_cvtsi128_si32(src_temp2_8x16b);
 3022|  6.19k|        temp41 = _mm_cvtsi128_si32(src_temp3_8x16b);
 3023|       |
 3024|       |        /* loding 8-bit 4 pixels values */
 3025|  6.19k|        *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 3026|  6.19k|        *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 3027|  6.19k|        *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 3028|  6.19k|        *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 3029|  6.19k|    }
 3030|       |
 3031|  24.7k|    else if(nt == 32)
  ------------------
  |  Branch (3031:13): [True: 5.77k, False: 18.9k]
  ------------------
 3032|  5.77k|    {
 3033|       |
 3034|       |
 3035|  5.77k|        __m128i temp1, temp2, temp3, temp11, temp12;
 3036|  5.77k|        __m128i src_values0, src_values1;
 3037|       |        /* Intermediate reference samples for negative angle modes */
 3038|       |
 3039|  5.77k|        ref_temp[two_nt - 1] = pu1_ref[two_nt - nt];
 3040|  5.77k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + nt + 1));
 3041|  5.77k|        temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + nt + 17));
 3042|  5.77k|        temp2 = _mm_loadu_si128((__m128i *)IHEVCE_SHUFFLEMASKY3);
 3043|       |
 3044|       |        /* For negative angled derive the main reference samples from side */
 3045|       |
 3046|  5.77k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1)); /*nt-(nt+15)*/
 3047|  5.77k|        src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 17)); /*(nt+16)-(two_nt-1)*/
 3048|       |
 3049|  5.77k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode]));
 3050|  5.77k|        temp12 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode] + 16));
 3051|       |
 3052|  5.77k|        src_values0 = _mm_shuffle_epi8(src_values0, temp2);
 3053|  5.77k|        src_values1 = _mm_shuffle_epi8(src_values1, temp2);
 3054|  5.77k|        src_values0 = _mm_shuffle_epi8(src_values0, temp12);
 3055|  5.77k|        src_values1 = _mm_shuffle_epi8(src_values1, temp11);
 3056|       |
 3057|  5.77k|        temp1 = _mm_shuffle_epi8(temp1, temp2);
 3058|  5.77k|        temp3 = _mm_shuffle_epi8(temp3, temp2);
 3059|       |
 3060|  5.77k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp3);
 3061|  5.77k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1 + 16), temp1);
 3062|  5.77k|        _mm_storeu_si128((__m128i *)(ref_main - 16), src_values0);
 3063|  5.77k|        _mm_storeu_si128((__m128i *)(ref_main - nt + inv_angle_shuffle[17 - mode][0]), src_values1);
 3064|       |
 3065|       |
 3066|  5.77k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3067|  5.77k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3068|  5.77k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3069|  5.77k|        const_temp4_4x32b = _mm_set1_epi16(8);
 3070|  5.77k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3071|  5.77k|        two_nt_4x32b = _mm_set1_epi16(1);
 3072|       |
 3073|  28.8k|        for(col = 0; col < nt; col += 8)
  ------------------
  |  Branch (3073:22): [True: 23.0k, False: 5.77k]
  ------------------
 3074|  23.0k|        {
 3075|  23.0k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 3076|  23.0k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 3077|       |            // WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 3078|       |
 3079|  23.0k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 3080|       |
 3081|  23.0k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 3082|  23.0k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 3083|       |
 3084|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3085|  23.0k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3086|       |
 3087|       |            /* idx = pos >> 5; */
 3088|  23.0k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3089|       |
 3090|       |            /* fract = pos & (31); */
 3091|  23.0k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3092|       |
 3093|  23.0k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 3094|       |            /*(32 - fract) */
 3095|  23.0k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 3096|       |
 3097|  23.0k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 3098|  23.0k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 3099|       |
 3100|  23.0k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 3101|  23.0k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 3102|       |
 3103|       |
 3104|  23.0k|            fract8_8x16b = _mm_unpackhi_epi8(fract_4x32b, fract2_8x16b);
 3105|  23.0k|            fract_4x32b = _mm_unpacklo_epi8(fract_4x32b, fract2_8x16b);
 3106|       |
 3107|  23.0k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 3108|  23.0k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 3109|  23.0k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 3110|  23.0k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 3111|       |
 3112|  23.0k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 3113|  23.0k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 3114|  23.0k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 3115|  23.0k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 3116|       |
 3117|  23.0k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 3118|  23.0k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 3119|  23.0k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 3120|  23.0k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 3121|       |
 3122|  23.0k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 3123|  23.0k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 3124|  23.0k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 3125|  23.0k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 3126|       |
 3127|   115k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3127:26): [True: 92.1k, False: 23.0k]
  ------------------
 3128|  92.1k|            {
 3129|  92.1k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 3130|  92.1k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 3131|       |
 3132|       |
 3133|  92.1k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 3134|  92.1k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 3135|       |
 3136|       |                /* loding 8-bit 16 pixels */
 3137|  92.1k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1 + row)); /* col=0*/
 3138|  92.1k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2 + row)); /* col=1*/
 3139|  92.1k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3 + row)); /* col=2*/
 3140|  92.1k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4 + row)); /* col=3*/
 3141|       |
 3142|  92.1k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 1); /* col=0*/
 3143|  92.1k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 1); /* col=1*/
 3144|  92.1k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 1); /* col=2*/
 3145|  92.1k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 1); /* col=3*/
 3146|       |
 3147|       |                /* loding 8-bit 16 pixels */
 3148|  92.1k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5 + row)); /* col=5*/
 3149|  92.1k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6 + row)); /* col=6*/
 3150|  92.1k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7 + row)); /* col=7*/
 3151|  92.1k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8 + row)); /* col=8*/
 3152|       |
 3153|  92.1k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 3154|  92.1k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 3155|  92.1k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 3156|  92.1k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 3157|       |
 3158|  92.1k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp15_8x16b, sm3); /* col=0*/
 3159|  92.1k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp16_8x16b, sm3); /* col=1*/
 3160|  92.1k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp17_8x16b, sm3); /* col=2*/
 3161|  92.1k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp18_8x16b, sm3); /* col=3*/
 3162|       |
 3163|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 3164|  92.1k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 3165|  92.1k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 3166|  92.1k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 3167|  92.1k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 3168|       |
 3169|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 3170|  92.1k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 3171|  92.1k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 3172|  92.1k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 3173|  92.1k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 3174|       |
 3175|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3176|  92.1k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 3177|  92.1k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 3178|  92.1k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 3179|  92.1k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 3180|       |
 3181|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3182|  92.1k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 3183|  92.1k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 3184|  92.1k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 3185|  92.1k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 3186|       |
 3187|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3188|  92.1k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 3189|  92.1k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 3190|  92.1k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 3191|  92.1k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 3192|       |
 3193|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3194|  92.1k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 3195|  92.1k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 3196|  92.1k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 3197|  92.1k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 3198|       |
 3199|       |                /* converting 16 bit to 8 bit */
 3200|  92.1k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 3201|  92.1k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 3202|       |
 3203|       |                /* converting 16 bit to 8 bit */
 3204|  92.1k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 3205|  92.1k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 3206|       |
 3207|  92.1k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3208|  92.1k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3209|       |
 3210|  92.1k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 3211|  92.1k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 3212|       |
 3213|  92.1k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3214|  92.1k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3215|       |
 3216|  92.1k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 3217|  92.1k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 3218|       |
 3219|       |
 3220|  92.1k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 3221|  92.1k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 3222|       |
 3223|  92.1k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 3224|  92.1k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 3225|       |
 3226|  92.1k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 3227|  92.1k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 3228|  92.1k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 3229|  92.1k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 3230|       |
 3231|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * row)), src_temp1_8x16b);          /* row=0*/
 3232|       |
 3233|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp5_8x16b);       /* row=1*/
 3234|       |
 3235|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp2_8x16b);       /* row=2*/
 3236|       |
 3237|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp6_8x16b);       /* row=4*/
 3238|       |
 3239|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 4))), src_temp3_8x16b);       /* row=5*/
 3240|       |
 3241|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 5))), src_temp7_8x16b);       /* row=6*/
 3242|       |
 3243|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 6))), src_temp4_8x16b);       /* row=7*/
 3244|       |
 3245|  92.1k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 7))), src_temp8_8x16b);       /* row=8*/
 3246|       |
 3247|  92.1k|            }
 3248|  23.0k|        }
 3249|  5.77k|    }
 3250|  18.9k|    else if(nt == 16)
  ------------------
  |  Branch (3250:13): [True: 7.69k, False: 11.2k]
  ------------------
 3251|  7.69k|    {
 3252|       |
 3253|  7.69k|        __m128i temp1, temp2, temp11, src_values0;
 3254|       |        /* Intermediate reference samples for negative angle modes */
 3255|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3256|  7.69k|        ref_temp[two_nt - 1] = pu1_ref[two_nt - nt];
 3257|  7.69k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + nt + 1));
 3258|  7.69k|        temp2 = _mm_loadu_si128((__m128i *)IHEVCE_SHUFFLEMASKY3);
 3259|  7.69k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1)); /*nt-(nt+15)*/
 3260|       |
 3261|  7.69k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode] + 16));
 3262|       |
 3263|  7.69k|        src_values0 = _mm_shuffle_epi8(src_values0, temp2);
 3264|  7.69k|        temp1 = _mm_shuffle_epi8(temp1, temp2);
 3265|  7.69k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 3266|       |
 3267|  7.69k|        _mm_storeu_si128((__m128i *)(ref_main - nt), src_values0);
 3268|  7.69k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp1);
 3269|       |
 3270|  7.69k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3271|  7.69k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3272|  7.69k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3273|  7.69k|        const_temp4_4x32b = _mm_set1_epi16(8);
 3274|  7.69k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3275|  7.69k|        two_nt_4x32b = _mm_set1_epi16(1);
 3276|       |
 3277|  23.0k|        for(col = 0; col < nt; col += 8)
  ------------------
  |  Branch (3277:22): [True: 15.3k, False: 7.69k]
  ------------------
 3278|  15.3k|        {
 3279|  15.3k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 3280|  15.3k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 3281|       |            // WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 3282|       |
 3283|  15.3k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 3284|       |
 3285|  15.3k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 3286|  15.3k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 3287|       |
 3288|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3289|  15.3k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3290|       |
 3291|       |            /* idx = pos >> 5; */
 3292|  15.3k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3293|       |
 3294|       |            /* fract = pos & (31); */
 3295|  15.3k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3296|       |
 3297|  15.3k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp4_4x32b);
 3298|       |            /*(32 - fract) */
 3299|  15.3k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 3300|       |
 3301|  15.3k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 3302|  15.3k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 3303|       |
 3304|  15.3k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 3305|  15.3k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 3306|       |
 3307|       |
 3308|  15.3k|            fract8_8x16b = _mm_unpackhi_epi8(fract_4x32b, fract2_8x16b);
 3309|  15.3k|            fract_4x32b = _mm_unpacklo_epi8(fract_4x32b, fract2_8x16b);
 3310|       |
 3311|  15.3k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 3312|  15.3k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 3313|  15.3k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 3314|  15.3k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 3315|       |
 3316|  15.3k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 3317|  15.3k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 3318|  15.3k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 3319|  15.3k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 3320|       |
 3321|  15.3k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 3322|  15.3k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 3323|  15.3k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 3324|  15.3k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 3325|       |
 3326|  15.3k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 3327|  15.3k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 3328|  15.3k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 3329|  15.3k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 3330|       |
 3331|  46.0k|            for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3331:26): [True: 30.7k, False: 15.3k]
  ------------------
 3332|  30.7k|            {
 3333|  30.7k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 3334|  30.7k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 3335|       |
 3336|       |
 3337|  30.7k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 3338|  30.7k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 3339|       |
 3340|       |                /* loding 8-bit 16 pixels */
 3341|  30.7k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1 + row)); /* col=0*/
 3342|  30.7k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2 + row)); /* col=1*/
 3343|  30.7k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3 + row)); /* col=2*/
 3344|  30.7k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4 + row)); /* col=3*/
 3345|       |
 3346|  30.7k|                src_temp1_8x16b = _mm_srli_si128(src_temp5_8x16b, 1); /* col=0*/
 3347|  30.7k|                src_temp2_8x16b = _mm_srli_si128(src_temp6_8x16b, 1); /* col=1*/
 3348|  30.7k|                src_temp3_8x16b = _mm_srli_si128(src_temp7_8x16b, 1); /* col=2*/
 3349|  30.7k|                src_temp4_8x16b = _mm_srli_si128(src_temp8_8x16b, 1); /* col=3*/
 3350|       |
 3351|       |                /* loding 8-bit 16 pixels */
 3352|  30.7k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5 + row)); /* col=5*/
 3353|  30.7k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6 + row)); /* col=6*/
 3354|  30.7k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7 + row)); /* col=7*/
 3355|  30.7k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8 + row)); /* col=8*/
 3356|       |
 3357|  30.7k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 3358|  30.7k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 3359|  30.7k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 3360|  30.7k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 3361|       |
 3362|  30.7k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp15_8x16b, sm3); /* col=0*/
 3363|  30.7k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp16_8x16b, sm3); /* col=1*/
 3364|  30.7k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp17_8x16b, sm3); /* col=2*/
 3365|  30.7k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp18_8x16b, sm3); /* col=3*/
 3366|       |
 3367|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 3368|  30.7k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 3369|  30.7k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 3370|  30.7k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 3371|  30.7k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 3372|       |
 3373|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 3374|  30.7k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 3375|  30.7k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 3376|  30.7k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 3377|  30.7k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 3378|       |
 3379|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3380|  30.7k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 3381|  30.7k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 3382|  30.7k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 3383|  30.7k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 3384|       |
 3385|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3386|  30.7k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* col=0*/
 3387|  30.7k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* col=1*/
 3388|  30.7k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* col=2*/
 3389|  30.7k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* col=3*/
 3390|       |
 3391|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3392|  30.7k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 3393|  30.7k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 3394|  30.7k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 3395|  30.7k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 3396|       |
 3397|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3398|  30.7k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 3399|  30.7k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 3400|  30.7k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 3401|  30.7k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 3402|       |
 3403|       |                /* converting 16 bit to 8 bit */
 3404|  30.7k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 3405|  30.7k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 3406|       |
 3407|       |                /* converting 16 bit to 8 bit */
 3408|  30.7k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=5*/
 3409|  30.7k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=6*/
 3410|       |
 3411|  30.7k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3412|  30.7k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3413|       |
 3414|  30.7k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 3415|  30.7k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 3416|       |
 3417|  30.7k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3418|  30.7k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3419|       |
 3420|  30.7k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 3421|  30.7k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 3422|       |
 3423|       |
 3424|  30.7k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 3425|  30.7k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 3426|       |
 3427|  30.7k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 3428|  30.7k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 3429|       |
 3430|  30.7k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 3431|  30.7k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 3432|  30.7k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 3433|  30.7k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 3434|       |
 3435|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * row)), src_temp1_8x16b);          /* row=0*/
 3436|       |
 3437|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 1))), src_temp5_8x16b);       /* row=1*/
 3438|       |
 3439|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 2))), src_temp2_8x16b);       /* row=2*/
 3440|       |
 3441|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 3))), src_temp6_8x16b);       /* row=4*/
 3442|       |
 3443|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 4))), src_temp3_8x16b);       /* row=5*/
 3444|       |
 3445|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 5))), src_temp7_8x16b);       /* row=6*/
 3446|       |
 3447|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 6))), src_temp4_8x16b);       /* row=7*/
 3448|       |
 3449|  30.7k|                _mm_storel_epi64((__m128i *)(pu1_dst + col + (dst_strd * (row + 7))), src_temp8_8x16b);       /* row=8*/
 3450|       |
 3451|  30.7k|            }
 3452|  15.3k|        }
 3453|  7.69k|    }
 3454|  11.2k|    else
 3455|  11.2k|    {
 3456|       |
 3457|       |
 3458|  11.2k|        __m128i temp1, temp2, temp11, src_values0;
 3459|       |        /* Intermediate reference samples for negative angle modes */
 3460|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3461|  11.2k|        ref_temp[two_nt - 1] = pu1_ref[nt];
 3462|  11.2k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + 1));
 3463|       |
 3464|       |        /* For negative angled derive the main reference samples from side */
 3465|       |
 3466|  11.2k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 1)); /*nt-(nt+15)*/
 3467|  11.2k|        temp2 = _mm_loadu_si128((__m128i *)IHEVCE_SHUFFLEMASKY3);
 3468|  11.2k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[17 - mode] + 16));
 3469|       |
 3470|  11.2k|        src_values0 = _mm_shuffle_epi8(src_values0, temp2);
 3471|  11.2k|        temp1 = _mm_shuffle_epi8(temp1, temp2);
 3472|  11.2k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 3473|  11.2k|        src_values0 = _mm_srli_si128(src_values0, 8);
 3474|       |
 3475|  11.2k|        _mm_storel_epi64((__m128i *)(ref_temp + nt - 1), temp1);
 3476|  11.2k|        _mm_storel_epi64((__m128i *)(ref_main - nt), src_values0);
 3477|       |
 3478|       |
 3479|  11.2k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3480|  11.2k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3481|  11.2k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3482|  11.2k|        const_temp4_4x32b = _mm_set1_epi16(8);
 3483|  11.2k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3484|  11.2k|        two_nt_4x32b = _mm_set1_epi16(1);
 3485|       |
 3486|  11.2k|        {
 3487|  11.2k|            WORD16 pi2_ref_main_idx1, pi2_ref_main_idx2, pi2_ref_main_idx3, pi2_ref_main_idx4;
 3488|  11.2k|            WORD16 pi2_ref_main_idx5, pi2_ref_main_idx6, pi2_ref_main_idx7, pi2_ref_main_idx8;
 3489|       |            //WORD8  ai1_fract_temp0_val[16], ai1_fract_temp1_val[16];
 3490|       |
 3491|  11.2k|            __m128i fract1_8x16b, fract2_8x16b, fract3_8x16b, fract8_8x16b;
 3492|       |
 3493|  11.2k|            __m128i temp1_8x16b, temp2_8x16b, temp3_8x16b, temp4_8x16b;
 3494|  11.2k|            __m128i temp11_8x16b, temp12_8x16b, temp13_8x16b, temp14_8x16b;
 3495|       |
 3496|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3497|  11.2k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3498|       |
 3499|       |            /* idx = pos >> 5; */
 3500|  11.2k|            fract_4x32b = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3501|       |
 3502|       |            /* fract = pos & (31); */
 3503|  11.2k|            ref_main_idx_4x32b = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3504|       |
 3505|       |            /*(32 - fract) */
 3506|  11.2k|            fract2_8x16b =  _mm_sub_epi16(const_temp3_4x32b, fract_4x32b);
 3507|       |
 3508|  11.2k|            fract1_8x16b = _mm_slli_epi16(fract_4x32b, 8);
 3509|  11.2k|            fract3_8x16b = _mm_slli_epi16(fract2_8x16b, 8); /*(32 - fract) */
 3510|       |
 3511|  11.2k|            fract_4x32b = _mm_or_si128(fract_4x32b, fract1_8x16b);
 3512|  11.2k|            fract2_8x16b = _mm_or_si128(fract2_8x16b, fract3_8x16b); /*(32 - fract) */
 3513|       |
 3514|  11.2k|            fract8_8x16b = _mm_unpackhi_epi8(fract_4x32b, fract2_8x16b);
 3515|  11.2k|            fract_4x32b = _mm_unpacklo_epi8(fract_4x32b, fract2_8x16b);
 3516|       |
 3517|  11.2k|            temp1_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x00);
 3518|  11.2k|            temp2_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0x55);
 3519|  11.2k|            temp3_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xaa);
 3520|  11.2k|            temp4_8x16b =  _mm_shuffle_epi32(fract_4x32b, 0xff);
 3521|       |
 3522|  11.2k|            temp11_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x00);
 3523|  11.2k|            temp12_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0x55);
 3524|  11.2k|            temp13_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xaa);
 3525|  11.2k|            temp14_8x16b =  _mm_shuffle_epi32(fract8_8x16b, 0xff);
 3526|       |
 3527|  11.2k|            pi2_ref_main_idx1 = _mm_extract_epi16(ref_main_idx_4x32b, 0);    /* col=0*/
 3528|  11.2k|            pi2_ref_main_idx2 = _mm_extract_epi16(ref_main_idx_4x32b, 1);    /* col=1*/
 3529|  11.2k|            pi2_ref_main_idx3 = _mm_extract_epi16(ref_main_idx_4x32b, 2);    /* col=2*/
 3530|  11.2k|            pi2_ref_main_idx4 = _mm_extract_epi16(ref_main_idx_4x32b, 3);    /* col=3*/
 3531|       |
 3532|  11.2k|            pi2_ref_main_idx5 = _mm_extract_epi16(ref_main_idx_4x32b, 4);    /* col=5*/
 3533|  11.2k|            pi2_ref_main_idx6 = _mm_extract_epi16(ref_main_idx_4x32b, 5);    /* col=6*/
 3534|  11.2k|            pi2_ref_main_idx7 = _mm_extract_epi16(ref_main_idx_4x32b, 6);    /* col=7*/
 3535|  11.2k|            pi2_ref_main_idx8 = _mm_extract_epi16(ref_main_idx_4x32b, 7);    /* col=8*/
 3536|       |
 3537|  11.2k|            {
 3538|  11.2k|                __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 3539|  11.2k|                __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 3540|       |
 3541|  11.2k|                __m128i src_temp11_8x16b, src_temp12_8x16b, src_temp13_8x16b, src_temp14_8x16b;
 3542|  11.2k|                __m128i src_temp15_8x16b, src_temp16_8x16b, src_temp17_8x16b, src_temp18_8x16b;
 3543|       |
 3544|       |                /* loding 8-bit 16 pixels */
 3545|  11.2k|                src_temp5_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx1)); /* col=0*/
 3546|  11.2k|                src_temp6_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx2)); /* col=1*/
 3547|  11.2k|                src_temp7_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx3)); /* col=2*/
 3548|  11.2k|                src_temp8_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx4)); /* col=3*/
 3549|       |
 3550|       |                /* loding 8-bit 16 pixels */
 3551|  11.2k|                src_temp15_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx5)); /* col=5*/
 3552|  11.2k|                src_temp16_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx6)); /* col=6*/
 3553|  11.2k|                src_temp17_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx7)); /* col=7*/
 3554|  11.2k|                src_temp18_8x16b = _mm_loadu_si128((__m128i *)(ref_main + pi2_ref_main_idx8)); /* col=8*/
 3555|       |
 3556|  11.2k|                src_temp1_8x16b =  _mm_shuffle_epi8(src_temp5_8x16b, sm3); /* col=0*/
 3557|  11.2k|                src_temp2_8x16b =  _mm_shuffle_epi8(src_temp6_8x16b, sm3); /* col=1*/
 3558|  11.2k|                src_temp3_8x16b =  _mm_shuffle_epi8(src_temp7_8x16b, sm3); /* col=2*/
 3559|  11.2k|                src_temp4_8x16b =  _mm_shuffle_epi8(src_temp8_8x16b, sm3); /* col=3*/
 3560|       |
 3561|  11.2k|                src_temp11_8x16b =  _mm_shuffle_epi8(src_temp15_8x16b, sm3); /* col=0*/
 3562|  11.2k|                src_temp12_8x16b =  _mm_shuffle_epi8(src_temp16_8x16b, sm3); /* col=1*/
 3563|  11.2k|                src_temp13_8x16b =  _mm_shuffle_epi8(src_temp17_8x16b, sm3); /* col=2*/
 3564|  11.2k|                src_temp14_8x16b =  _mm_shuffle_epi8(src_temp18_8x16b, sm3); /* col=3*/
 3565|       |
 3566|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 3567|  11.2k|                src_temp1_8x16b = _mm_maddubs_epi16(src_temp1_8x16b, temp1_8x16b);
 3568|  11.2k|                src_temp2_8x16b = _mm_maddubs_epi16(src_temp2_8x16b, temp2_8x16b);
 3569|  11.2k|                src_temp3_8x16b = _mm_maddubs_epi16(src_temp3_8x16b, temp3_8x16b);
 3570|  11.2k|                src_temp4_8x16b = _mm_maddubs_epi16(src_temp4_8x16b, temp4_8x16b);
 3571|       |
 3572|       |                /* fract*(pu1_ref[ref_main_idx + 1]- pu1_ref[ref_main_idx]) */
 3573|  11.2k|                src_temp11_8x16b = _mm_maddubs_epi16(src_temp11_8x16b, temp11_8x16b);
 3574|  11.2k|                src_temp12_8x16b = _mm_maddubs_epi16(src_temp12_8x16b, temp12_8x16b);
 3575|  11.2k|                src_temp13_8x16b = _mm_maddubs_epi16(src_temp13_8x16b, temp13_8x16b);
 3576|  11.2k|                src_temp14_8x16b = _mm_maddubs_epi16(src_temp14_8x16b, temp14_8x16b);
 3577|       |
 3578|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3579|  11.2k|                src_temp1_8x16b = _mm_add_epi16(src_temp1_8x16b, const_temp_4x32b);
 3580|  11.2k|                src_temp2_8x16b = _mm_add_epi16(src_temp2_8x16b, const_temp_4x32b);
 3581|  11.2k|                src_temp3_8x16b = _mm_add_epi16(src_temp3_8x16b, const_temp_4x32b);
 3582|  11.2k|                src_temp4_8x16b = _mm_add_epi16(src_temp4_8x16b, const_temp_4x32b);
 3583|       |
 3584|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3585|  11.2k|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  5);   /* row=0*/
 3586|  11.2k|                src_temp2_8x16b = _mm_srai_epi16(src_temp2_8x16b,  5);   /* row=1*/
 3587|  11.2k|                src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  5);   /* row=2*/
 3588|  11.2k|                src_temp4_8x16b = _mm_srai_epi16(src_temp4_8x16b,  5);   /* row=3*/
 3589|       |
 3590|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3591|  11.2k|                src_temp11_8x16b = _mm_add_epi16(src_temp11_8x16b, const_temp_4x32b);
 3592|  11.2k|                src_temp12_8x16b = _mm_add_epi16(src_temp12_8x16b, const_temp_4x32b);
 3593|  11.2k|                src_temp13_8x16b = _mm_add_epi16(src_temp13_8x16b, const_temp_4x32b);
 3594|  11.2k|                src_temp14_8x16b = _mm_add_epi16(src_temp14_8x16b, const_temp_4x32b);
 3595|       |
 3596|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3597|  11.2k|                src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  5);   /* col=5*/
 3598|  11.2k|                src_temp12_8x16b = _mm_srai_epi16(src_temp12_8x16b,  5);   /* col=6*/
 3599|  11.2k|                src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  5);   /* col=7*/
 3600|  11.2k|                src_temp14_8x16b = _mm_srai_epi16(src_temp14_8x16b,  5);   /* col=8*/
 3601|       |
 3602|       |                /* converting 16 bit to 8 bit */
 3603|  11.2k|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp3_8x16b); /* col=0*/
 3604|  11.2k|                src_temp2_8x16b = _mm_packus_epi16(src_temp2_8x16b, src_temp4_8x16b); /* col=1*/
 3605|       |
 3606|       |                /* converting 16 bit to 8 bit */
 3607|  11.2k|                src_temp11_8x16b = _mm_packus_epi16(src_temp11_8x16b, src_temp13_8x16b); /* col=4*/
 3608|  11.2k|                src_temp12_8x16b = _mm_packus_epi16(src_temp12_8x16b, src_temp14_8x16b); /* col=5*/
 3609|       |
 3610|  11.2k|                src_temp5_8x16b = _mm_unpacklo_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3611|  11.2k|                src_temp6_8x16b = _mm_unpackhi_epi8(src_temp1_8x16b, src_temp2_8x16b);
 3612|       |
 3613|  11.2k|                src_temp15_8x16b = _mm_unpacklo_epi8(src_temp11_8x16b, src_temp12_8x16b);
 3614|  11.2k|                src_temp16_8x16b = _mm_unpackhi_epi8(src_temp11_8x16b, src_temp12_8x16b);
 3615|       |
 3616|  11.2k|                src_temp7_8x16b = _mm_unpacklo_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3617|  11.2k|                src_temp8_8x16b = _mm_unpackhi_epi16(src_temp5_8x16b, src_temp6_8x16b);
 3618|       |
 3619|  11.2k|                src_temp17_8x16b = _mm_unpacklo_epi16(src_temp15_8x16b, src_temp16_8x16b);
 3620|  11.2k|                src_temp18_8x16b = _mm_unpackhi_epi16(src_temp15_8x16b, src_temp16_8x16b);
 3621|       |
 3622|       |
 3623|  11.2k|                src_temp1_8x16b = _mm_unpacklo_epi32(src_temp7_8x16b, src_temp17_8x16b);
 3624|  11.2k|                src_temp2_8x16b = _mm_unpackhi_epi32(src_temp7_8x16b, src_temp17_8x16b);
 3625|       |
 3626|  11.2k|                src_temp3_8x16b = _mm_unpacklo_epi32(src_temp8_8x16b, src_temp18_8x16b);
 3627|  11.2k|                src_temp4_8x16b = _mm_unpackhi_epi32(src_temp8_8x16b, src_temp18_8x16b);
 3628|       |
 3629|  11.2k|                src_temp5_8x16b = _mm_srli_si128(src_temp1_8x16b, 8);
 3630|  11.2k|                src_temp6_8x16b = _mm_srli_si128(src_temp2_8x16b, 8);
 3631|  11.2k|                src_temp7_8x16b = _mm_srli_si128(src_temp3_8x16b, 8);
 3632|  11.2k|                src_temp8_8x16b = _mm_srli_si128(src_temp4_8x16b, 8);
 3633|       |
 3634|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * 0)), src_temp1_8x16b);       /* row=0*/
 3635|       |
 3636|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (1))), src_temp5_8x16b);       /* row=1*/
 3637|       |
 3638|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (2))), src_temp2_8x16b);       /* row=2*/
 3639|       |
 3640|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (3))), src_temp6_8x16b);       /* row=3*/
 3641|       |
 3642|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (4))), src_temp3_8x16b);       /* row=4*/
 3643|       |
 3644|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (5))), src_temp7_8x16b);       /* row=5*/
 3645|       |
 3646|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (6))), src_temp4_8x16b);       /* row=6*/
 3647|       |
 3648|  11.2k|                _mm_storel_epi64((__m128i *)(pu1_dst + (dst_strd * (7))), src_temp8_8x16b);       /* row=7*/
 3649|       |
 3650|  11.2k|            }
 3651|  11.2k|        }
 3652|  11.2k|    }
 3653|       |
 3654|  30.9k|}
ihevc_intra_pred_luma_mode_19_to_25_ssse3:
 3700|  30.8k|{
 3701|       |
 3702|  30.8k|    WORD32 row, k;
 3703|  30.8k|    WORD32 two_nt, intra_pred_ang;
 3704|  30.8k|    WORD32 inv_ang, inv_ang_sum;
 3705|       |    //WORD32 ref_main_idx, pos, fract, idx;
 3706|  30.8k|    WORD32 ref_idx;
 3707|  30.8k|    UWORD8 ref_tmp[(2 * MAX_CU_SIZE) + 2] = {0};
 3708|  30.8k|    UWORD8 *ref_main, *ref_temp;
 3709|       |
 3710|  30.8k|    __m128i  /*fract_8x16b,*/ const_temp_8x16b, sm3;
 3711|  30.8k|    __m128i temp1, temp2, temp3, temp4;
 3712|  30.8k|    __m128i temp11, temp12, temp13, temp14;
 3713|  30.8k|    UNUSED(src_strd);
  ------------------
  |  |   38|  30.8k|#define UNUSED(x) ((void)(x))
  ------------------
 3714|  30.8k|    two_nt = 2 * nt;
 3715|  30.8k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 3716|  30.8k|    inv_ang = gai4_ihevc_inv_ang_table[mode - 12];
 3717|       |
 3718|       |    /* Intermediate reference samples for negative angle modes */
 3719|       |    /* This have to be removed during optimization*/
 3720|       |    /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3721|  30.8k|    ref_temp = ref_tmp + 1;
 3722|  30.8k|    ref_main = ref_temp + nt - 1;
 3723|       |
 3724|       |
 3725|  30.8k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 3726|       |
 3727|       |
 3728|       |
 3729|  30.8k|    const_temp_8x16b = _mm_set1_epi16(16);
 3730|       |
 3731|  30.8k|    if(nt == 32)
  ------------------
  |  Branch (3731:8): [True: 3.88k, False: 26.9k]
  ------------------
 3732|  3.88k|    {
 3733|       |
 3734|  3.88k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 3735|  3.88k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3736|  3.88k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3737|       |
 3738|  3.88k|        __m128i src_values0, src_values1, src_values2, src_values3;
 3739|  3.88k|        __m128i  src_values4, src_values5, src_values6, src_values7;
 3740|  3.88k|        WORD32 col = 0;
 3741|       |
 3742|       |        /* Intermediate reference samples for negative angle modes */
 3743|       |        /* This have to be removed during optimization*/
 3744|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3745|  3.88k|        ref_temp[two_nt - 1] = pu1_ref[two_nt + nt];
 3746|  3.88k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt));
 3747|  3.88k|        temp3 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt + 16));
 3748|       |
 3749|       |        /* SIMD Optimization can be done using look-up table for the loop */
 3750|       |        /* For negative angled derive the main reference samples from side */
 3751|       |        /*  reference samples refer to section 8.4.4.2.6 */
 3752|  3.88k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - nt)); /*nt-(nt+15)*/
 3753|  3.88k|        src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - 16)); /*(nt+16)-(two_nt-1)*/
 3754|       |
 3755|  3.88k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19]));
 3756|  3.88k|        temp12 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19] + 16));
 3757|       |
 3758|  3.88k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 3759|  3.88k|        src_values1 = _mm_shuffle_epi8(src_values1, temp12);
 3760|       |
 3761|  3.88k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp1);
 3762|  3.88k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1 + 16), temp3);
 3763|  3.88k|        _mm_storeu_si128((__m128i *)(ref_main - 16), src_values1);
 3764|  3.88k|        _mm_storeu_si128((__m128i *)(ref_main - nt + inv_angle_shuffle[mode - 19][0]), src_values0);
 3765|       |
 3766|  3.88k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3767|  3.88k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3768|  3.88k|        const_temp8_4x32b = _mm_set1_epi16(8);
 3769|       |
 3770|  3.88k|        two_nt_4x32b = _mm_set1_epi16(1);
 3771|       |
 3772|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3773|  3.88k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3774|       |
 3775|  3.88k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3776|       |
 3777|  19.4k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3777:22): [True: 15.5k, False: 3.88k]
  ------------------
 3778|  15.5k|        {
 3779|       |
 3780|  15.5k|            WORD16 ref_main_idx[9];
 3781|       |
 3782|  15.5k|            __m128i res_temp5_4x32b;
 3783|  15.5k|            __m128i fract1_8x16b, fract2_8x16b;
 3784|       |
 3785|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3786|  15.5k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3787|       |
 3788|       |            /* fract = pos & (31); */
 3789|  15.5k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3790|       |
 3791|       |            /* idx = pos >> 5; */
 3792|  15.5k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3793|       |
 3794|       |            /*(32 - fract) */
 3795|  15.5k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 3796|       |
 3797|  15.5k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 3798|  15.5k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 3799|       |
 3800|  15.5k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 3801|  15.5k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 3802|       |
 3803|  15.5k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 3804|  15.5k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 3805|       |
 3806|  15.5k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 3807|  15.5k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 3808|  15.5k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 3809|  15.5k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 3810|       |
 3811|  15.5k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 3812|  15.5k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 3813|  15.5k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 3814|  15.5k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 3815|       |
 3816|  15.5k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 3817|  15.5k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 3818|  46.5k|            for(col = 0; col < nt; col += 16)
  ------------------
  |  Branch (3818:26): [True: 31.0k, False: 15.5k]
  ------------------
 3819|  31.0k|            {
 3820|  31.0k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0] + col));
 3821|  31.0k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1] + col));
 3822|  31.0k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2] + col));
 3823|  31.0k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3] + col));
 3824|  31.0k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0] + 8 + col));
 3825|  31.0k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1] + 8 + col));
 3826|  31.0k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2] + 8 + col));
 3827|  31.0k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3] + 8 + col));
 3828|       |
 3829|  31.0k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3830|  31.0k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3831|  31.0k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3832|  31.0k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3833|  31.0k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3834|  31.0k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3835|  31.0k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3836|  31.0k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3837|       |
 3838|       |
 3839|  31.0k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 3840|  31.0k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 3841|  31.0k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 3842|  31.0k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 3843|  31.0k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 3844|  31.0k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 3845|  31.0k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 3846|  31.0k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 3847|       |
 3848|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3849|  31.0k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3850|  31.0k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3851|  31.0k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3852|  31.0k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3853|  31.0k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3854|  31.0k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3855|  31.0k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3856|  31.0k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3857|       |
 3858|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3859|  31.0k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3860|  31.0k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3861|  31.0k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3862|  31.0k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3863|  31.0k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3864|  31.0k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3865|  31.0k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3866|  31.0k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3867|       |
 3868|       |                /* converting 16 bit to 8 bit */
 3869|  31.0k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3870|  31.0k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3871|  31.0k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3872|  31.0k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3873|       |
 3874|       |                /* loading 8-bit 8 pixels values */
 3875|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (0) * dst_strd), src_values0);       /* row=0*/
 3876|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (1) * dst_strd), src_values1);   /* row=1*/
 3877|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (2) * dst_strd), src_values2);   /* row=2*/
 3878|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (3) * dst_strd), src_values3);   /* row=3*/
 3879|       |
 3880|       |
 3881|  31.0k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4] + col));
 3882|  31.0k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5] + col));
 3883|  31.0k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6] + col));
 3884|  31.0k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7] + col));
 3885|  31.0k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4] + 8 + col));
 3886|  31.0k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5] + 8 + col));
 3887|  31.0k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6] + 8 + col));
 3888|  31.0k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7] + 8 + col));
 3889|       |
 3890|  31.0k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 3891|  31.0k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 3892|  31.0k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 3893|  31.0k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 3894|  31.0k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 3895|  31.0k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 3896|  31.0k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 3897|  31.0k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 3898|       |
 3899|       |
 3900|  31.0k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 3901|  31.0k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 3902|  31.0k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 3903|  31.0k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 3904|  31.0k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 3905|  31.0k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 3906|  31.0k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 3907|  31.0k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 3908|       |
 3909|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 3910|  31.0k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 3911|  31.0k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 3912|  31.0k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 3913|  31.0k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 3914|  31.0k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 3915|  31.0k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 3916|  31.0k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 3917|  31.0k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 3918|       |
 3919|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 3920|  31.0k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 3921|  31.0k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 3922|  31.0k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 3923|  31.0k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 3924|  31.0k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 3925|  31.0k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 3926|  31.0k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 3927|  31.0k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 3928|       |
 3929|       |                /* converting 16 bit to 8 bit */
 3930|  31.0k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 3931|  31.0k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 3932|  31.0k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 3933|  31.0k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 3934|       |
 3935|       |                /* loading 8-bit 8 pixels values */
 3936|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (4) * dst_strd), src_values0);   /* row=4*/
 3937|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (5) * dst_strd), src_values1);   /* row=5*/
 3938|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (6) * dst_strd), src_values2);   /* row=6*/
 3939|  31.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (7) * dst_strd), src_values3);   /* row=7*/
 3940|       |
 3941|  31.0k|            }
 3942|  15.5k|            pu1_dst += 8 * dst_strd;
 3943|  15.5k|        }
 3944|       |
 3945|  3.88k|    }
 3946|  26.9k|    else if(nt == 16) /* for nt = 16 case */
  ------------------
  |  Branch (3946:13): [True: 9.00k, False: 17.9k]
  ------------------
 3947|  9.00k|    {
 3948|       |
 3949|  9.00k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 3950|  9.00k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 3951|  9.00k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 3952|  9.00k|        __m128i src_values0, src_values1, src_values2, src_values3;
 3953|  9.00k|        __m128i  src_values4, src_values5, src_values6, src_values7;
 3954|       |
 3955|       |
 3956|       |        /* Intermediate reference samples for negative angle modes */
 3957|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 3958|  9.00k|        ref_temp[two_nt - 1] = pu1_ref[two_nt + nt];
 3959|  9.00k|        temp1 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt));
 3960|       |
 3961|  9.00k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + two_nt - nt)); /*nt-(nt+15)*/
 3962|       |
 3963|  9.00k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19] + 16));
 3964|       |
 3965|  9.00k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 3966|       |
 3967|  9.00k|        _mm_storeu_si128((__m128i *)(ref_main - nt), src_values0);
 3968|  9.00k|        _mm_storeu_si128((__m128i *)(ref_temp + nt - 1), temp1);
 3969|       |
 3970|  9.00k|        const_temp2_4x32b = _mm_set1_epi16(31);
 3971|  9.00k|        const_temp3_4x32b = _mm_set1_epi16(32);
 3972|  9.00k|        const_temp8_4x32b = _mm_set1_epi16(8);
 3973|       |
 3974|  9.00k|        two_nt_4x32b = _mm_set1_epi16(1);
 3975|       |
 3976|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 3977|  9.00k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 3978|       |
 3979|  9.00k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 3980|       |
 3981|  27.0k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (3981:22): [True: 18.0k, False: 9.00k]
  ------------------
 3982|  18.0k|        {
 3983|       |
 3984|  18.0k|            WORD16 ref_main_idx[9];
 3985|       |
 3986|  18.0k|            __m128i res_temp5_4x32b;
 3987|  18.0k|            __m128i fract1_8x16b, fract2_8x16b;
 3988|       |
 3989|       |            /* pos = ((row + 1) * intra_pred_ang); */
 3990|  18.0k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 3991|       |
 3992|       |            /* fract = pos & (31); */
 3993|  18.0k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 3994|       |
 3995|       |            /* idx = pos >> 5; */
 3996|  18.0k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 3997|       |
 3998|       |            /*(32 - fract) */
 3999|  18.0k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 4000|       |
 4001|  18.0k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4002|  18.0k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4003|       |
 4004|  18.0k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4005|  18.0k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4006|       |
 4007|  18.0k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4008|  18.0k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4009|       |
 4010|  18.0k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4011|  18.0k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 4012|  18.0k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4013|  18.0k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 4014|       |
 4015|  18.0k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4016|  18.0k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 4017|  18.0k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4018|  18.0k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 4019|       |
 4020|  18.0k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 4021|  18.0k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 4022|       |
 4023|  18.0k|            {
 4024|  18.0k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0]));
 4025|  18.0k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1]));
 4026|  18.0k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2]));
 4027|  18.0k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3]));
 4028|  18.0k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0] + 8));
 4029|  18.0k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1] + 8));
 4030|  18.0k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2] + 8));
 4031|  18.0k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3] + 8));
 4032|       |
 4033|  18.0k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4034|  18.0k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4035|  18.0k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4036|  18.0k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4037|  18.0k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4038|  18.0k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4039|  18.0k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4040|  18.0k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4041|       |
 4042|       |
 4043|  18.0k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4044|  18.0k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4045|  18.0k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4046|  18.0k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4047|  18.0k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 4048|  18.0k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 4049|  18.0k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 4050|  18.0k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 4051|       |
 4052|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4053|  18.0k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4054|  18.0k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4055|  18.0k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4056|  18.0k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4057|  18.0k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4058|  18.0k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4059|  18.0k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4060|  18.0k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4061|       |
 4062|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4063|  18.0k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 4064|  18.0k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 4065|  18.0k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 4066|  18.0k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 4067|  18.0k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 4068|  18.0k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 4069|  18.0k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 4070|  18.0k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 4071|       |
 4072|       |                /* converting 16 bit to 8 bit */
 4073|  18.0k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 4074|  18.0k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 4075|  18.0k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 4076|  18.0k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 4077|       |
 4078|       |                /* loading 8-bit 8 pixels values */
 4079|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (0) * dst_strd), src_values0);       /* row=0*/
 4080|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (1) * dst_strd), src_values1);   /* row=1*/
 4081|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (2) * dst_strd), src_values2);   /* row=2*/
 4082|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (3) * dst_strd), src_values3);   /* row=3*/
 4083|       |
 4084|       |
 4085|  18.0k|                src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4]));
 4086|  18.0k|                src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5]));
 4087|  18.0k|                src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6]));
 4088|  18.0k|                src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7]));
 4089|  18.0k|                src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4] + 8));
 4090|  18.0k|                src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5] + 8));
 4091|  18.0k|                src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6] + 8));
 4092|  18.0k|                src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7] + 8));
 4093|       |
 4094|  18.0k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4095|  18.0k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4096|  18.0k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4097|  18.0k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4098|  18.0k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4099|  18.0k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4100|  18.0k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4101|  18.0k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4102|       |
 4103|       |
 4104|  18.0k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 4105|  18.0k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 4106|  18.0k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 4107|  18.0k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 4108|  18.0k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 4109|  18.0k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 4110|  18.0k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 4111|  18.0k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 4112|       |
 4113|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4114|  18.0k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4115|  18.0k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4116|  18.0k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4117|  18.0k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4118|  18.0k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4119|  18.0k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4120|  18.0k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4121|  18.0k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4122|       |
 4123|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4124|  18.0k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 4125|  18.0k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 4126|  18.0k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 4127|  18.0k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 4128|  18.0k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 4129|  18.0k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 4130|  18.0k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 4131|  18.0k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 4132|       |
 4133|       |                /* converting 16 bit to 8 bit */
 4134|  18.0k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 4135|  18.0k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 4136|  18.0k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 4137|  18.0k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 4138|       |
 4139|       |                /* loading 8-bit 8 pixels values */
 4140|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (4) * dst_strd), src_values0);   /* row=4*/
 4141|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (5) * dst_strd), src_values1);   /* row=5*/
 4142|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (6) * dst_strd), src_values2);   /* row=6*/
 4143|  18.0k|                _mm_storeu_si128((__m128i *)(pu1_dst + (7) * dst_strd), src_values3);   /* row=7*/
 4144|       |
 4145|  18.0k|            }
 4146|  18.0k|            pu1_dst += 8 * dst_strd;
 4147|  18.0k|        }
 4148|  9.00k|    }
 4149|  17.9k|    else if(nt == 8)
  ------------------
  |  Branch (4149:13): [True: 11.9k, False: 5.97k]
  ------------------
 4150|  11.9k|    {
 4151|       |
 4152|       |
 4153|  11.9k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 4154|  11.9k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 4155|       |
 4156|  11.9k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 4157|  11.9k|        __m128i src_values0, src_values1, src_values2, src_values3;
 4158|  11.9k|        __m128i  src_values4, src_values5, src_values6, src_values7;
 4159|       |
 4160|       |
 4161|       |        /* Intermediate reference samples for negative angle modes */
 4162|       |        /* For horizontal modes, (ref main = ref above) (ref side = ref left) */
 4163|  11.9k|        ref_temp[two_nt - 1] = pu1_ref[two_nt + nt];
 4164|  11.9k|        temp1 = _mm_loadl_epi64((__m128i *)(pu1_ref + two_nt));
 4165|       |
 4166|       |        /* For negative angled derive the main reference samples from side */
 4167|       |
 4168|  11.9k|        src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref)); /*nt-(nt+15)*/
 4169|       |
 4170|  11.9k|        temp11 = _mm_loadu_si128((__m128i *)(inv_angle_shuffle[mode - 19] + 16));
 4171|       |
 4172|  11.9k|        src_values0 = _mm_shuffle_epi8(src_values0, temp11);
 4173|  11.9k|        src_values0 = _mm_srli_si128(src_values0, 8);
 4174|  11.9k|        _mm_storel_epi64((__m128i *)(ref_temp + nt - 1), temp1);
 4175|  11.9k|        _mm_storel_epi64((__m128i *)(ref_main - nt), src_values0);
 4176|       |
 4177|       |
 4178|       |
 4179|  11.9k|        const_temp2_4x32b = _mm_set1_epi16(31);
 4180|  11.9k|        const_temp3_4x32b = _mm_set1_epi16(32);
 4181|       |
 4182|       |
 4183|  11.9k|        two_nt_4x32b = _mm_set1_epi16(1);
 4184|       |
 4185|       |
 4186|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 4187|  11.9k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 4188|       |
 4189|  11.9k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 4190|       |
 4191|  11.9k|        {
 4192|       |
 4193|  11.9k|            WORD16 ref_main_idx[9];
 4194|       |
 4195|  11.9k|            __m128i res_temp5_4x32b;
 4196|  11.9k|            __m128i fract1_8x16b, fract2_8x16b;
 4197|       |
 4198|       |            /* pos = ((row + 1) * intra_pred_ang); */
 4199|  11.9k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 4200|       |
 4201|       |            /* fract = pos & (31); */
 4202|  11.9k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 4203|       |
 4204|       |            /* idx = pos >> 5; */
 4205|  11.9k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 4206|       |
 4207|       |            /*(32 - fract) */
 4208|  11.9k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 4209|       |
 4210|  11.9k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4211|  11.9k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4212|       |
 4213|  11.9k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4214|  11.9k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4215|       |
 4216|  11.9k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4217|  11.9k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4218|       |
 4219|  11.9k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4220|  11.9k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 4221|  11.9k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4222|  11.9k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 4223|       |
 4224|  11.9k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4225|  11.9k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 4226|  11.9k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4227|  11.9k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 4228|       |
 4229|  11.9k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 4230|       |
 4231|  11.9k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[0]));  /* col = 0-7   */
 4232|  11.9k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[1]));  /* col = 8-15  */
 4233|  11.9k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[2]));  /* col = 16-23 */
 4234|  11.9k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[3]));  /* col = 24-31 */
 4235|  11.9k|            src_values4 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[4]));  /* col = 32-39   */
 4236|  11.9k|            src_values5 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[5]));  /* col = 40-47  */
 4237|  11.9k|            src_values6 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[6]));  /* col = 48-55 */
 4238|  11.9k|            src_values7 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx[7]));  /* col = 56-63*/
 4239|       |
 4240|  11.9k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4241|  11.9k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4242|  11.9k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4243|  11.9k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4244|  11.9k|            src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4245|  11.9k|            src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4246|  11.9k|            src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4247|  11.9k|            src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4248|       |
 4249|       |
 4250|  11.9k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4251|  11.9k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4252|  11.9k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4253|  11.9k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4254|  11.9k|            src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 4255|  11.9k|            src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 4256|  11.9k|            src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 4257|  11.9k|            src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 4258|       |
 4259|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4260|  11.9k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4261|  11.9k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4262|  11.9k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4263|  11.9k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4264|  11.9k|            src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4265|  11.9k|            src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4266|  11.9k|            src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4267|  11.9k|            src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4268|       |
 4269|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4270|  11.9k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 4271|  11.9k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 4272|  11.9k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 4273|  11.9k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 4274|  11.9k|            src_values4 = _mm_srai_epi16(src_values4,  5);
 4275|  11.9k|            src_values5 = _mm_srai_epi16(src_values5,  5);
 4276|  11.9k|            src_values6 = _mm_srai_epi16(src_values6,  5);
 4277|  11.9k|            src_values7 = _mm_srai_epi16(src_values7,  5);
 4278|       |
 4279|       |            /* converting 16 bit to 8 bit */
 4280|  11.9k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 4281|  11.9k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 4282|  11.9k|            src_values1 = _mm_srli_si128(src_values0, 8);
 4283|  11.9k|            src_values3 = _mm_srli_si128(src_values2, 8);
 4284|  11.9k|            src_values4 = _mm_packus_epi16(src_values4, src_values5);
 4285|  11.9k|            src_values6 = _mm_packus_epi16(src_values6, src_values7);
 4286|  11.9k|            src_values5 = _mm_srli_si128(src_values4, 8);
 4287|  11.9k|            src_values7 = _mm_srli_si128(src_values6, 8);
 4288|       |
 4289|       |            /* loading 8-bit 8 pixels values */
 4290|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_values0);       /* row=0*/
 4291|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_values1);   /* row=1*/
 4292|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_values2);   /* row=2*/
 4293|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_values3);   /* row=3*/
 4294|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 4 * dst_strd), src_values4);   /* row=4*/
 4295|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 5 * dst_strd), src_values5);   /* row=5*/
 4296|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 6 * dst_strd), src_values6);   /* row=6*/
 4297|  11.9k|            _mm_storel_epi64((__m128i *)(pu1_dst + 7 * dst_strd), src_values7);   /* row=7*/
 4298|  11.9k|        }
 4299|  11.9k|    }
 4300|  5.97k|    else /* if nt =4*/
 4301|  5.97k|    {
 4302|       |
 4303|  5.97k|        __m128i const_temp2_4x32b, const_temp3_4x32b, zero_8x16b;
 4304|  5.97k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b, sign_8x16b;
 4305|       |
 4306|  5.97k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 4307|       |
 4308|       |
 4309|  35.9k|        for(k = 0; k < (nt + 1); k++)
  ------------------
  |  Branch (4309:20): [True: 29.9k, False: 5.97k]
  ------------------
 4310|  29.9k|            ref_temp[k + nt - 1] = pu1_ref[two_nt + k];
 4311|  5.97k|        ref_idx = (nt * intra_pred_ang) >> 5;
 4312|  5.97k|        inv_ang_sum = 128;
 4313|       |
 4314|  13.7k|        for(k = -1; k > ref_idx; k--)
  ------------------
  |  Branch (4314:21): [True: 7.79k, False: 5.97k]
  ------------------
 4315|  7.79k|        {
 4316|  7.79k|            inv_ang_sum += inv_ang;
 4317|  7.79k|            ref_main[k] = pu1_ref[two_nt - (inv_ang_sum >> 8)];
 4318|  7.79k|        }
 4319|       |
 4320|       |
 4321|  5.97k|        const_temp2_4x32b = _mm_set1_epi32(31);
 4322|  5.97k|        const_temp3_4x32b = _mm_set1_epi32(32);
 4323|  5.97k|        zero_8x16b = _mm_setzero_si128();
 4324|  5.97k|        two_nt_4x32b = _mm_set1_epi32(1);
 4325|       |
 4326|       |
 4327|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 4328|  5.97k|        row_4x32b = _mm_set_epi16(4, 3, 2, 1, 4, 3, 2, 1);
 4329|  5.97k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 4330|       |
 4331|  5.97k|        {
 4332|  5.97k|            WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 4333|  5.97k|            int temp11, temp21, temp31, temp41;
 4334|       |
 4335|       |
 4336|  5.97k|            __m128i fract1_8x16b, fract2_8x16b,  res_temp5_4x32b;
 4337|  5.97k|            __m128i src_values0, src_values1, src_values2, src_values3;
 4338|  5.97k|            __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 4339|       |
 4340|       |            /* pos = ((row + 1) * intra_pred_ang); */
 4341|  5.97k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 4342|  5.97k|            sign_8x16b      = _mm_cmpgt_epi16(zero_8x16b, res_temp5_4x32b);
 4343|  5.97k|            res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, sign_8x16b);
 4344|       |
 4345|       |            /* fract = pos & (31); */
 4346|  5.97k|            src_values12 = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 4347|       |
 4348|  5.97k|            ref_main_temp0 = _mm_srli_si128(src_values12, 4);  /* next 32 bit values */
 4349|  5.97k|            ref_main_temp1 = _mm_srli_si128(src_values12, 8);  /* next 32 bit values */
 4350|  5.97k|            ref_main_temp2 = _mm_srli_si128(src_values12, 12); /* next 32 bit values */
 4351|  5.97k|            ref_main_idx1  = _mm_cvtsi128_si32(src_values12);    /* row=0*/
 4352|  5.97k|            ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* row=1*/
 4353|  5.97k|            ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* row=2*/
 4354|  5.97k|            ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* row=3*/
 4355|       |
 4356|       |            /* idx = pos >> 5; */
 4357|  5.97k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 4358|       |
 4359|       |            /*(32 - fract) */
 4360|  5.97k|            src_values10 = _mm_sub_epi32(const_temp3_4x32b, src_values11);
 4361|       |
 4362|  5.97k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4363|  5.97k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4364|       |
 4365|  5.97k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4366|  5.97k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4367|       |
 4368|  5.97k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4369|  5.97k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4370|       |
 4371|  5.97k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4372|  5.97k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4373|  5.97k|            temp3 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4374|  5.97k|            temp4 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4375|       |
 4376|  5.97k|            src_values0 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx1));     /* col = 0-7   */
 4377|  5.97k|            src_values1 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx2));   /* col = 8-15  */
 4378|  5.97k|            src_values2 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx3));  /* col = 16-23 */
 4379|  5.97k|            src_values3 = _mm_loadu_si128((__m128i *)(ref_main + ref_main_idx4));  /* col = 24-31 */
 4380|       |
 4381|  5.97k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4382|  5.97k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4383|  5.97k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4384|  5.97k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4385|       |
 4386|       |
 4387|  5.97k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4388|  5.97k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4389|  5.97k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4390|  5.97k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4391|       |
 4392|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4393|  5.97k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4394|  5.97k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4395|  5.97k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4396|  5.97k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4397|       |
 4398|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4399|  5.97k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 4400|  5.97k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 4401|  5.97k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 4402|  5.97k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 4403|       |
 4404|       |            /* converting 16 bit to 8 bit */
 4405|  5.97k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 4406|  5.97k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 4407|  5.97k|            src_values1 = _mm_srli_si128(src_values0, 8);
 4408|  5.97k|            src_values3 = _mm_srli_si128(src_values2, 8);
 4409|       |
 4410|  5.97k|            temp11 = _mm_cvtsi128_si32(src_values0);
 4411|  5.97k|            temp21 = _mm_cvtsi128_si32(src_values1);
 4412|  5.97k|            temp31 = _mm_cvtsi128_si32(src_values2);
 4413|  5.97k|            temp41 = _mm_cvtsi128_si32(src_values3);
 4414|       |
 4415|       |            /* loding 4-bit 8 pixels values */
 4416|  5.97k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 4417|  5.97k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 4418|  5.97k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 4419|  5.97k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 4420|       |
 4421|  5.97k|        }
 4422|  5.97k|    }
 4423|  30.8k|}
ihevc_intra_pred_luma_mode_27_to_33_ssse3:
 4472|  33.3k|{
 4473|  33.3k|    WORD32 row;
 4474|  33.3k|    WORD32 two_nt;
 4475|  33.3k|    WORD32 intra_pred_ang;
 4476|       |
 4477|  33.3k|    __m128i temp11, temp12, temp13, temp14;
 4478|       |
 4479|  33.3k|    __m128i     const_temp_8x16b;
 4480|  33.3k|    __m128i temp1, temp2, temp3, temp4, sm3;
 4481|  33.3k|    UNUSED(src_strd);
  ------------------
  |  |   38|  33.3k|#define UNUSED(x) ((void)(x))
  ------------------
 4482|  33.3k|    two_nt = 2 * nt;
 4483|  33.3k|    intra_pred_ang = gai4_ihevc_ang_table[mode];
 4484|       |
 4485|  33.3k|    const_temp_8x16b = _mm_set1_epi16(16);
 4486|  33.3k|    sm3 = _mm_load_si128((__m128i *)&IHEVCE_SHUFFLEMASKY11[0]);
 4487|  33.3k|    if(nt == 32)
  ------------------
  |  Branch (4487:8): [True: 4.41k, False: 28.8k]
  ------------------
 4488|  4.41k|    {
 4489|       |
 4490|  4.41k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 4491|  4.41k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 4492|  4.41k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 4493|  4.41k|        int col = 0;
 4494|       |
 4495|  4.41k|        const_temp2_4x32b = _mm_set1_epi16(31);
 4496|  4.41k|        const_temp3_4x32b = _mm_set1_epi16(32);
 4497|  4.41k|        const_temp8_4x32b = _mm_set1_epi16(8);
 4498|       |
 4499|  4.41k|        two_nt_4x32b = _mm_set1_epi16(two_nt + 1);
 4500|       |
 4501|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 4502|  4.41k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 4503|       |
 4504|  4.41k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 4505|       |
 4506|  22.0k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (4506:22): [True: 17.6k, False: 4.41k]
  ------------------
 4507|  17.6k|        {
 4508|       |
 4509|  17.6k|            WORD16 ref_main_idx[9];
 4510|       |
 4511|  17.6k|            __m128i res_temp5_4x32b;
 4512|  17.6k|            __m128i fract1_8x16b, fract2_8x16b;
 4513|  17.6k|            __m128i src_values0, src_values1, src_values2, src_values3;
 4514|  17.6k|            __m128i  src_values4, src_values5, src_values6, src_values7;
 4515|       |
 4516|       |            /* pos = ((row + 1) * intra_pred_ang); */
 4517|  17.6k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 4518|       |
 4519|       |            /* fract = pos & (31); */
 4520|  17.6k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 4521|       |
 4522|       |            /* idx = pos >> 5; */
 4523|  17.6k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 4524|       |
 4525|       |            /*(32 - fract) */
 4526|  17.6k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 4527|       |
 4528|  17.6k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4529|  17.6k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4530|       |
 4531|  17.6k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4532|  17.6k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4533|       |
 4534|  17.6k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4535|  17.6k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4536|       |
 4537|  17.6k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4538|  17.6k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 4539|  17.6k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4540|  17.6k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 4541|       |
 4542|  17.6k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4543|  17.6k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 4544|  17.6k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4545|  17.6k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 4546|       |
 4547|  17.6k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 4548|  17.6k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 4549|  52.8k|            for(col = 0; col < nt; col += 16)
  ------------------
  |  Branch (4549:26): [True: 35.2k, False: 17.6k]
  ------------------
 4550|  35.2k|            {
 4551|  35.2k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0] + col));
 4552|  35.2k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1] + col));
 4553|  35.2k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2] + col));
 4554|  35.2k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3] + col));
 4555|  35.2k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0] + 8 + col));
 4556|  35.2k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1] + 8 + col));
 4557|  35.2k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2] + 8 + col));
 4558|  35.2k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3] + 8 + col));
 4559|       |
 4560|  35.2k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4561|  35.2k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4562|  35.2k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4563|  35.2k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4564|  35.2k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4565|  35.2k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4566|  35.2k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4567|  35.2k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4568|       |
 4569|       |
 4570|  35.2k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4571|  35.2k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4572|  35.2k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4573|  35.2k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4574|  35.2k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 4575|  35.2k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 4576|  35.2k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 4577|  35.2k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 4578|       |
 4579|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4580|  35.2k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4581|  35.2k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4582|  35.2k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4583|  35.2k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4584|  35.2k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4585|  35.2k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4586|  35.2k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4587|  35.2k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4588|       |
 4589|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4590|  35.2k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 4591|  35.2k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 4592|  35.2k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 4593|  35.2k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 4594|  35.2k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 4595|  35.2k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 4596|  35.2k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 4597|  35.2k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 4598|       |
 4599|       |                /* converting 16 bit to 8 bit */
 4600|  35.2k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 4601|  35.2k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 4602|  35.2k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 4603|  35.2k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 4604|       |
 4605|       |                /* loading 8-bit 8 pixels values */
 4606|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (0) * dst_strd), src_values0);       /* row=0*/
 4607|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (1) * dst_strd), src_values1);   /* row=1*/
 4608|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (2) * dst_strd), src_values2);   /* row=2*/
 4609|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (3) * dst_strd), src_values3);   /* row=3*/
 4610|       |
 4611|       |
 4612|  35.2k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4] + col));
 4613|  35.2k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5] + col));
 4614|  35.2k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6] + col));
 4615|  35.2k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7] + col));
 4616|  35.2k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4] + 8 + col));
 4617|  35.2k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5] + 8 + col));
 4618|  35.2k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6] + 8 + col));
 4619|  35.2k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7] + 8 + col));
 4620|       |
 4621|  35.2k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4622|  35.2k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4623|  35.2k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4624|  35.2k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4625|  35.2k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4626|  35.2k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4627|  35.2k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4628|  35.2k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4629|       |
 4630|       |
 4631|  35.2k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 4632|  35.2k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 4633|  35.2k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 4634|  35.2k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 4635|  35.2k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 4636|  35.2k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 4637|  35.2k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 4638|  35.2k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 4639|       |
 4640|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4641|  35.2k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4642|  35.2k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4643|  35.2k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4644|  35.2k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4645|  35.2k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4646|  35.2k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4647|  35.2k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4648|  35.2k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4649|       |
 4650|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4651|  35.2k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 4652|  35.2k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 4653|  35.2k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 4654|  35.2k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 4655|  35.2k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 4656|  35.2k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 4657|  35.2k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 4658|  35.2k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 4659|       |
 4660|       |                /* converting 16 bit to 8 bit */
 4661|  35.2k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 4662|  35.2k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 4663|  35.2k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 4664|  35.2k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 4665|       |
 4666|       |                /* loading 8-bit 8 pixels values */
 4667|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (4) * dst_strd), src_values0);   /* row=4*/
 4668|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (5) * dst_strd), src_values1);   /* row=5*/
 4669|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (6) * dst_strd), src_values2);   /* row=6*/
 4670|  35.2k|                _mm_storeu_si128((__m128i *)(pu1_dst + col + (7) * dst_strd), src_values3);   /* row=7*/
 4671|       |
 4672|  35.2k|            }
 4673|  17.6k|            pu1_dst += 8 * dst_strd;
 4674|  17.6k|        }
 4675|       |
 4676|  4.41k|    }
 4677|  28.8k|    else if(nt == 16) /* for nt = 16 case */
  ------------------
  |  Branch (4677:13): [True: 10.6k, False: 18.2k]
  ------------------
 4678|  10.6k|    {
 4679|       |
 4680|  10.6k|        __m128i const_temp2_4x32b, const_temp3_4x32b, const_temp8_4x32b;
 4681|  10.6k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 4682|  10.6k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 4683|       |
 4684|       |
 4685|  10.6k|        const_temp2_4x32b = _mm_set1_epi16(31);
 4686|  10.6k|        const_temp3_4x32b = _mm_set1_epi16(32);
 4687|  10.6k|        const_temp8_4x32b = _mm_set1_epi16(8);
 4688|       |
 4689|  10.6k|        two_nt_4x32b = _mm_set1_epi16(two_nt + 1);
 4690|       |
 4691|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 4692|  10.6k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 4693|       |
 4694|  10.6k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 4695|       |
 4696|  32.0k|        for(row = 0; row < nt; row += 8)
  ------------------
  |  Branch (4696:22): [True: 21.3k, False: 10.6k]
  ------------------
 4697|  21.3k|        {
 4698|       |
 4699|  21.3k|            WORD16 ref_main_idx[9];
 4700|       |
 4701|  21.3k|            __m128i res_temp5_4x32b;
 4702|  21.3k|            __m128i fract1_8x16b, fract2_8x16b;
 4703|  21.3k|            __m128i src_values0, src_values1, src_values2, src_values3;
 4704|  21.3k|            __m128i  src_values4, src_values5, src_values6, src_values7;
 4705|       |
 4706|       |            /* pos = ((row + 1) * intra_pred_ang); */
 4707|  21.3k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 4708|       |
 4709|       |            /* fract = pos & (31); */
 4710|  21.3k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 4711|       |
 4712|       |            /* idx = pos >> 5; */
 4713|  21.3k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 4714|       |
 4715|       |            /*(32 - fract) */
 4716|  21.3k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 4717|       |
 4718|  21.3k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4719|  21.3k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4720|       |
 4721|  21.3k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4722|  21.3k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4723|       |
 4724|  21.3k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4725|  21.3k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4726|       |
 4727|  21.3k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4728|  21.3k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 4729|  21.3k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4730|  21.3k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 4731|       |
 4732|  21.3k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4733|  21.3k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 4734|  21.3k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4735|  21.3k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 4736|       |
 4737|  21.3k|            row_4x32b = _mm_add_epi16(row_4x32b, const_temp8_4x32b);
 4738|  21.3k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 4739|       |
 4740|  21.3k|            {
 4741|  21.3k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0]));
 4742|  21.3k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1]));
 4743|  21.3k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2]));
 4744|  21.3k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3]));
 4745|  21.3k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0] + 8));
 4746|  21.3k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1] + 8));
 4747|  21.3k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2] + 8));
 4748|  21.3k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3] + 8));
 4749|       |
 4750|  21.3k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4751|  21.3k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4752|  21.3k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4753|  21.3k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4754|  21.3k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4755|  21.3k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4756|  21.3k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4757|  21.3k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4758|       |
 4759|       |
 4760|  21.3k|                src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4761|  21.3k|                src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4762|  21.3k|                src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4763|  21.3k|                src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4764|  21.3k|                src_values4 = _mm_maddubs_epi16(src_values4, temp1);
 4765|  21.3k|                src_values5 = _mm_maddubs_epi16(src_values5, temp2);
 4766|  21.3k|                src_values6 = _mm_maddubs_epi16(src_values6, temp3);
 4767|  21.3k|                src_values7 = _mm_maddubs_epi16(src_values7, temp4);
 4768|       |
 4769|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4770|  21.3k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4771|  21.3k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4772|  21.3k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4773|  21.3k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4774|  21.3k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4775|  21.3k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4776|  21.3k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4777|  21.3k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4778|       |
 4779|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4780|  21.3k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 4781|  21.3k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 4782|  21.3k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 4783|  21.3k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 4784|  21.3k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 4785|  21.3k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 4786|  21.3k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 4787|  21.3k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 4788|       |
 4789|       |                /* converting 16 bit to 8 bit */
 4790|  21.3k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 4791|  21.3k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 4792|  21.3k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 4793|  21.3k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 4794|       |
 4795|       |                /* loading 8-bit 8 pixels values */
 4796|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (0) * dst_strd), src_values0);       /* row=0*/
 4797|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (1) * dst_strd), src_values1);   /* row=1*/
 4798|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (2) * dst_strd), src_values2);   /* row=2*/
 4799|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (3) * dst_strd), src_values3);   /* row=3*/
 4800|       |
 4801|       |
 4802|  21.3k|                src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4]));
 4803|  21.3k|                src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5]));
 4804|  21.3k|                src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6]));
 4805|  21.3k|                src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7]));
 4806|  21.3k|                src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4] + 8));
 4807|  21.3k|                src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5] + 8));
 4808|  21.3k|                src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6] + 8));
 4809|  21.3k|                src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7] + 8));
 4810|       |
 4811|  21.3k|                src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4812|  21.3k|                src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4813|  21.3k|                src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4814|  21.3k|                src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4815|  21.3k|                src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4816|  21.3k|                src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4817|  21.3k|                src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4818|  21.3k|                src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4819|       |
 4820|       |
 4821|  21.3k|                src_values0 = _mm_maddubs_epi16(src_values0, temp11);
 4822|  21.3k|                src_values1 = _mm_maddubs_epi16(src_values1, temp12);
 4823|  21.3k|                src_values2 = _mm_maddubs_epi16(src_values2, temp13);
 4824|  21.3k|                src_values3 = _mm_maddubs_epi16(src_values3, temp14);
 4825|  21.3k|                src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 4826|  21.3k|                src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 4827|  21.3k|                src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 4828|  21.3k|                src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 4829|       |
 4830|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4831|  21.3k|                src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4832|  21.3k|                src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4833|  21.3k|                src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4834|  21.3k|                src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4835|  21.3k|                src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4836|  21.3k|                src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4837|  21.3k|                src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4838|  21.3k|                src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4839|       |
 4840|       |                /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4841|  21.3k|                src_values0 = _mm_srai_epi16(src_values0,  5);
 4842|  21.3k|                src_values1 = _mm_srai_epi16(src_values1,  5);
 4843|  21.3k|                src_values2 = _mm_srai_epi16(src_values2,  5);
 4844|  21.3k|                src_values3 = _mm_srai_epi16(src_values3,  5);
 4845|  21.3k|                src_values4 = _mm_srai_epi16(src_values4,  5);
 4846|  21.3k|                src_values5 = _mm_srai_epi16(src_values5,  5);
 4847|  21.3k|                src_values6 = _mm_srai_epi16(src_values6,  5);
 4848|  21.3k|                src_values7 = _mm_srai_epi16(src_values7,  5);
 4849|       |
 4850|       |                /* converting 16 bit to 8 bit */
 4851|  21.3k|                src_values0 = _mm_packus_epi16(src_values0, src_values4);
 4852|  21.3k|                src_values1 = _mm_packus_epi16(src_values1, src_values5);
 4853|  21.3k|                src_values2 = _mm_packus_epi16(src_values2, src_values6);
 4854|  21.3k|                src_values3 = _mm_packus_epi16(src_values3, src_values7);
 4855|       |
 4856|       |                /* loading 8-bit 8 pixels values */
 4857|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (4) * dst_strd), src_values0);   /* row=4*/
 4858|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (5) * dst_strd), src_values1);   /* row=5*/
 4859|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (6) * dst_strd), src_values2);   /* row=6*/
 4860|  21.3k|                _mm_storeu_si128((__m128i *)(pu1_dst + (7) * dst_strd), src_values3);   /* row=7*/
 4861|       |
 4862|  21.3k|            }
 4863|  21.3k|            pu1_dst += 8 * dst_strd;
 4864|  21.3k|        }
 4865|       |
 4866|  10.6k|    }
 4867|  18.2k|    else if(nt == 8)
  ------------------
  |  Branch (4867:13): [True: 12.4k, False: 5.71k]
  ------------------
 4868|  12.4k|    {
 4869|       |
 4870|  12.4k|        __m128i const_temp2_4x32b, const_temp3_4x32b;
 4871|  12.4k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 4872|  12.4k|        __m128i row_4x32b, two_nt_4x32b, src_values12;
 4873|       |
 4874|       |
 4875|  12.4k|        const_temp2_4x32b = _mm_set1_epi16(31);
 4876|  12.4k|        const_temp3_4x32b = _mm_set1_epi16(32);
 4877|       |
 4878|  12.4k|        two_nt_4x32b = _mm_set1_epi16(two_nt + 1);
 4879|       |
 4880|       |
 4881|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 4882|  12.4k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 4883|       |
 4884|  12.4k|        row_4x32b = _mm_set_epi16(8, 7, 6, 5, 4, 3, 2, 1);
 4885|       |
 4886|       |        //for(row = 0; row < nt; row +=4)
 4887|  12.4k|        {
 4888|       |
 4889|  12.4k|            WORD16 ref_main_idx[9];
 4890|       |
 4891|  12.4k|            __m128i res_temp5_4x32b;
 4892|  12.4k|            __m128i fract1_8x16b, fract2_8x16b;
 4893|  12.4k|            __m128i src_values0, src_values1, src_values2, src_values3;
 4894|  12.4k|            __m128i  src_values4, src_values5, src_values6, src_values7;
 4895|       |
 4896|       |            /* pos = ((row + 1) * intra_pred_ang); */
 4897|  12.4k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 4898|       |
 4899|       |            /* fract = pos & (31); */
 4900|  12.4k|            src_values12 = _mm_add_epi16(two_nt_4x32b, _mm_srai_epi16(res_temp5_4x32b,  5));
 4901|       |
 4902|       |            /* idx = pos >> 5; */
 4903|  12.4k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 4904|       |
 4905|       |            /*(32 - fract) */
 4906|  12.4k|            src_values10 = _mm_sub_epi16(const_temp3_4x32b, src_values11);
 4907|       |
 4908|  12.4k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 4909|  12.4k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 4910|       |
 4911|  12.4k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 4912|  12.4k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 4913|       |
 4914|  12.4k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 4915|  12.4k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 4916|       |
 4917|  12.4k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 4918|  12.4k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0x55);
 4919|  12.4k|            temp3 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 4920|  12.4k|            temp4 =  _mm_shuffle_epi32(fract1_8x16b, 0xff);
 4921|       |
 4922|  12.4k|            temp11 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 4923|  12.4k|            temp12 =  _mm_shuffle_epi32(fract2_8x16b, 0x55);
 4924|  12.4k|            temp13 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 4925|  12.4k|            temp14 =  _mm_shuffle_epi32(fract2_8x16b, 0xff);
 4926|       |
 4927|  12.4k|            _mm_storeu_si128((__m128i *)ref_main_idx, src_values12);
 4928|       |
 4929|  12.4k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[0]));  /* col = 0-7   */
 4930|  12.4k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[1]));  /* col = 8-15  */
 4931|  12.4k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[2]));  /* col = 16-23 */
 4932|  12.4k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[3]));  /* col = 24-31 */
 4933|  12.4k|            src_values4 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[4]));  /* col = 32-39   */
 4934|  12.4k|            src_values5 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[5]));  /* col = 40-47  */
 4935|  12.4k|            src_values6 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[6]));  /* col = 48-55 */
 4936|  12.4k|            src_values7 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx[7]));  /* col = 56-63*/
 4937|       |
 4938|  12.4k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 4939|  12.4k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 4940|  12.4k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 4941|  12.4k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 4942|  12.4k|            src_values4 =  _mm_shuffle_epi8(src_values4, sm3);
 4943|  12.4k|            src_values5 =  _mm_shuffle_epi8(src_values5, sm3);
 4944|  12.4k|            src_values6 =  _mm_shuffle_epi8(src_values6, sm3);
 4945|  12.4k|            src_values7 =  _mm_shuffle_epi8(src_values7, sm3);
 4946|       |
 4947|       |
 4948|  12.4k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 4949|  12.4k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 4950|  12.4k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 4951|  12.4k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 4952|  12.4k|            src_values4 = _mm_maddubs_epi16(src_values4, temp11);
 4953|  12.4k|            src_values5 = _mm_maddubs_epi16(src_values5, temp12);
 4954|  12.4k|            src_values6 = _mm_maddubs_epi16(src_values6, temp13);
 4955|  12.4k|            src_values7 = _mm_maddubs_epi16(src_values7, temp14);
 4956|       |
 4957|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 4958|  12.4k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 4959|  12.4k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 4960|  12.4k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 4961|  12.4k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 4962|  12.4k|            src_values4 = _mm_add_epi16(src_values4, const_temp_8x16b);
 4963|  12.4k|            src_values5 = _mm_add_epi16(src_values5, const_temp_8x16b);
 4964|  12.4k|            src_values6 = _mm_add_epi16(src_values6, const_temp_8x16b);
 4965|  12.4k|            src_values7 = _mm_add_epi16(src_values7, const_temp_8x16b);
 4966|       |
 4967|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 4968|  12.4k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 4969|  12.4k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 4970|  12.4k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 4971|  12.4k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 4972|  12.4k|            src_values4 = _mm_srai_epi16(src_values4,  5);
 4973|  12.4k|            src_values5 = _mm_srai_epi16(src_values5,  5);
 4974|  12.4k|            src_values6 = _mm_srai_epi16(src_values6,  5);
 4975|  12.4k|            src_values7 = _mm_srai_epi16(src_values7,  5);
 4976|       |
 4977|       |            /* converting 16 bit to 8 bit */
 4978|  12.4k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 4979|  12.4k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 4980|  12.4k|            src_values1 = _mm_srli_si128(src_values0, 8);
 4981|  12.4k|            src_values3 = _mm_srli_si128(src_values2, 8);
 4982|  12.4k|            src_values4 = _mm_packus_epi16(src_values4, src_values5);
 4983|  12.4k|            src_values6 = _mm_packus_epi16(src_values6, src_values7);
 4984|  12.4k|            src_values5 = _mm_srli_si128(src_values4, 8);
 4985|  12.4k|            src_values7 = _mm_srli_si128(src_values6, 8);
 4986|       |
 4987|       |            /* loading 8-bit 8 pixels values */
 4988|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_values0);       /* row=0*/
 4989|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_values1);   /* row=1*/
 4990|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_values2);   /* row=2*/
 4991|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_values3);   /* row=3*/
 4992|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 4 * dst_strd), src_values4);   /* row=4*/
 4993|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 5 * dst_strd), src_values5);   /* row=5*/
 4994|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 6 * dst_strd), src_values6);   /* row=6*/
 4995|  12.4k|            _mm_storel_epi64((__m128i *)(pu1_dst + 7 * dst_strd), src_values7);   /* row=7*/
 4996|  12.4k|        }
 4997|       |
 4998|  12.4k|    }
 4999|  5.71k|    else /* if nt =4*/
 5000|  5.71k|    {
 5001|       |
 5002|  5.71k|        __m128i const_temp2_4x32b, const_temp3_4x32b, zero_8x16b;
 5003|  5.71k|        __m128i src_values10, src_values11, intra_pred_ang_4x32b;
 5004|       |
 5005|  5.71k|        __m128i row_4x32b, two_nt_4x32b, src_values12, sign_8x16b;
 5006|       |
 5007|       |
 5008|  5.71k|        const_temp2_4x32b = _mm_set1_epi32(31);
 5009|  5.71k|        const_temp3_4x32b = _mm_set1_epi32(32);
 5010|  5.71k|        zero_8x16b = _mm_setzero_si128();
 5011|  5.71k|        two_nt_4x32b = _mm_set1_epi32(two_nt + 1);
 5012|       |
 5013|       |
 5014|       |        /* intra_pred_ang = gai4_ihevc_ang_table[mode]; */
 5015|  5.71k|        row_4x32b = _mm_set_epi16(4, 3, 2, 1, 4, 3, 2, 1);
 5016|  5.71k|        intra_pred_ang_4x32b = _mm_set1_epi16(intra_pred_ang);
 5017|  5.71k|        {
 5018|  5.71k|            int temp11, temp21, temp31, temp41;
 5019|       |
 5020|  5.71k|            WORD32 ref_main_idx1, ref_main_idx2, ref_main_idx3, ref_main_idx4;
 5021|       |
 5022|  5.71k|            __m128i fract1_8x16b, fract2_8x16b, res_temp5_4x32b;
 5023|  5.71k|            __m128i src_values0, src_values1, src_values2, src_values3;
 5024|  5.71k|            __m128i ref_main_temp0, ref_main_temp1, ref_main_temp2;
 5025|       |
 5026|       |            /* pos = ((row + 1) * intra_pred_ang); */
 5027|  5.71k|            res_temp5_4x32b  = _mm_mullo_epi16(row_4x32b, intra_pred_ang_4x32b);
 5028|  5.71k|            sign_8x16b      = _mm_cmpgt_epi16(zero_8x16b, res_temp5_4x32b);
 5029|  5.71k|            res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, sign_8x16b);
 5030|       |
 5031|       |            /* fract = pos & (31); */
 5032|  5.71k|            src_values12 = _mm_add_epi32(two_nt_4x32b, _mm_srai_epi32(res_temp5_4x32b,  5));
 5033|       |
 5034|  5.71k|            ref_main_temp0 = _mm_srli_si128(src_values12, 4);  /* next 32 bit values */
 5035|  5.71k|            ref_main_temp1 = _mm_srli_si128(src_values12, 8);  /* next 32 bit values */
 5036|  5.71k|            ref_main_temp2 = _mm_srli_si128(src_values12, 12); /* next 32 bit values */
 5037|  5.71k|            ref_main_idx1  = _mm_cvtsi128_si32(src_values12);    /* row=0*/
 5038|  5.71k|            ref_main_idx2  = _mm_cvtsi128_si32(ref_main_temp0);  /* row=1*/
 5039|  5.71k|            ref_main_idx3  = _mm_cvtsi128_si32(ref_main_temp1);  /* row=2*/
 5040|  5.71k|            ref_main_idx4  = _mm_cvtsi128_si32(ref_main_temp2);  /* row=3*/
 5041|       |
 5042|       |            /* idx = pos >> 5; */
 5043|  5.71k|            src_values11 = _mm_and_si128(res_temp5_4x32b, const_temp2_4x32b);
 5044|       |
 5045|       |            /*(32 - fract) */
 5046|  5.71k|            src_values10 = _mm_sub_epi32(const_temp3_4x32b, src_values11);
 5047|       |
 5048|  5.71k|            fract1_8x16b = _mm_slli_epi16(src_values11, 8);
 5049|  5.71k|            fract2_8x16b = _mm_slli_epi16(src_values10, 8);
 5050|       |
 5051|  5.71k|            src_values11 = _mm_or_si128(src_values11, fract1_8x16b);
 5052|  5.71k|            src_values10 = _mm_or_si128(src_values10, fract2_8x16b); /*(32 - fract) */
 5053|       |
 5054|  5.71k|            fract2_8x16b = _mm_unpackhi_epi8(src_values11, src_values10);
 5055|  5.71k|            fract1_8x16b = _mm_unpacklo_epi8(src_values11, src_values10);
 5056|       |
 5057|  5.71k|            temp1 =  _mm_shuffle_epi32(fract1_8x16b, 0x00);
 5058|  5.71k|            temp2 =  _mm_shuffle_epi32(fract1_8x16b, 0xaa);
 5059|  5.71k|            temp3 =  _mm_shuffle_epi32(fract2_8x16b, 0x00);
 5060|  5.71k|            temp4 =  _mm_shuffle_epi32(fract2_8x16b, 0xaa);
 5061|       |
 5062|  5.71k|            src_values0 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx1));     /* col = 0-7   */
 5063|  5.71k|            src_values1 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx2));   /* col = 8-15  */
 5064|  5.71k|            src_values2 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx3));  /* col = 16-23 */
 5065|  5.71k|            src_values3 = _mm_loadu_si128((__m128i *)(pu1_ref + ref_main_idx4));  /* col = 24-31 */
 5066|       |
 5067|  5.71k|            src_values0 =  _mm_shuffle_epi8(src_values0, sm3);
 5068|  5.71k|            src_values1 =  _mm_shuffle_epi8(src_values1, sm3);
 5069|  5.71k|            src_values2 =  _mm_shuffle_epi8(src_values2, sm3);
 5070|  5.71k|            src_values3 =  _mm_shuffle_epi8(src_values3, sm3);
 5071|       |
 5072|  5.71k|            src_values0 = _mm_maddubs_epi16(src_values0, temp1);
 5073|  5.71k|            src_values1 = _mm_maddubs_epi16(src_values1, temp2);
 5074|  5.71k|            src_values2 = _mm_maddubs_epi16(src_values2, temp3);
 5075|  5.71k|            src_values3 = _mm_maddubs_epi16(src_values3, temp4);
 5076|       |
 5077|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16)*/
 5078|  5.71k|            src_values0 = _mm_add_epi16(src_values0, const_temp_8x16b);
 5079|  5.71k|            src_values1 = _mm_add_epi16(src_values1, const_temp_8x16b);
 5080|  5.71k|            src_values2 = _mm_add_epi16(src_values2, const_temp_8x16b);
 5081|  5.71k|            src_values3 = _mm_add_epi16(src_values3, const_temp_8x16b);
 5082|       |
 5083|       |            /*((32 - fract)* pu1_ref[ref_main_idx]+ fract * pu1_ref[ref_main_idx + 1] + 16) >>5*/
 5084|  5.71k|            src_values0 = _mm_srai_epi16(src_values0,  5);
 5085|  5.71k|            src_values1 = _mm_srai_epi16(src_values1,  5);
 5086|  5.71k|            src_values2 = _mm_srai_epi16(src_values2,  5);
 5087|  5.71k|            src_values3 = _mm_srai_epi16(src_values3,  5);
 5088|       |
 5089|       |            /* converting 16 bit to 8 bit */
 5090|  5.71k|            src_values0 = _mm_packus_epi16(src_values0, src_values1);
 5091|  5.71k|            src_values2 = _mm_packus_epi16(src_values2, src_values3);
 5092|  5.71k|            src_values1 = _mm_srli_si128(src_values0, 8);
 5093|  5.71k|            src_values3 = _mm_srli_si128(src_values2, 8);
 5094|       |
 5095|  5.71k|            temp11 = _mm_cvtsi128_si32(src_values0);
 5096|  5.71k|            temp21 = _mm_cvtsi128_si32(src_values1);
 5097|  5.71k|            temp31 = _mm_cvtsi128_si32(src_values2);
 5098|  5.71k|            temp41 = _mm_cvtsi128_si32(src_values3);
 5099|       |
 5100|       |            /* loding 4-bit 8 pixels values */
 5101|  5.71k|            *(WORD32 *)(&pu1_dst[(0 * dst_strd)]) = temp11;
 5102|  5.71k|            *(WORD32 *)(&pu1_dst[(1 * dst_strd)]) = temp21;
 5103|  5.71k|            *(WORD32 *)(&pu1_dst[(2 * dst_strd)]) = temp31;
 5104|  5.71k|            *(WORD32 *)(&pu1_dst[(3 * dst_strd)]) = temp41;
 5105|       |
 5106|  5.71k|        }
 5107|  5.71k|    }
 5108|  33.3k|}

ihevc_itrans_recon_16x16_ssse3:
  120|  69.1k|{
  121|  69.1k|    __m128i m_temp_reg_0;
  122|  69.1k|    __m128i m_temp_reg_1;
  123|  69.1k|    __m128i m_temp_reg_10;
  124|  69.1k|    __m128i m_temp_reg_11;
  125|  69.1k|    __m128i m_temp_reg_12;
  126|  69.1k|    __m128i m_temp_reg_13;
  127|  69.1k|    __m128i m_temp_reg_14;
  128|       |
  129|  69.1k|    __m128i m_temp_reg_20;
  130|  69.1k|    __m128i m_temp_reg_21;
  131|  69.1k|    __m128i m_temp_reg_22;
  132|  69.1k|    __m128i m_temp_reg_23;
  133|  69.1k|    __m128i m_temp_reg_24;
  134|  69.1k|    __m128i m_temp_reg_25;
  135|  69.1k|    __m128i m_temp_reg_26;
  136|  69.1k|    __m128i m_temp_reg_27;
  137|  69.1k|    __m128i m_temp_reg_30;
  138|  69.1k|    __m128i m_temp_reg_31;
  139|  69.1k|    __m128i m_temp_reg_32;
  140|  69.1k|    __m128i m_temp_reg_33;
  141|  69.1k|    __m128i m_temp_reg_34;
  142|  69.1k|    __m128i m_temp_reg_35;
  143|  69.1k|    __m128i m_temp_reg_36;
  144|  69.1k|    __m128i m_temp_reg_37;
  145|  69.1k|    __m128i m_temp_reg_40;
  146|  69.1k|    __m128i m_temp_reg_41;
  147|  69.1k|    __m128i m_temp_reg_42;
  148|  69.1k|    __m128i m_temp_reg_43;
  149|  69.1k|    __m128i m_temp_reg_44;
  150|  69.1k|    __m128i m_temp_reg_45;
  151|  69.1k|    __m128i m_temp_reg_46;
  152|  69.1k|    __m128i m_temp_reg_47;
  153|       |
  154|  69.1k|    __m128i m_temp_reg_70;
  155|  69.1k|    __m128i m_temp_reg_71;
  156|  69.1k|    __m128i m_temp_reg_72;
  157|  69.1k|    __m128i m_temp_reg_73;
  158|  69.1k|    __m128i m_temp_reg_74;
  159|  69.1k|    __m128i m_temp_reg_75;
  160|  69.1k|    __m128i m_temp_reg_76;
  161|  69.1k|    __m128i m_temp_reg_77;
  162|  69.1k|    __m128i m_rdng_factor;
  163|  69.1k|    __m128i m_count;
  164|  69.1k|    __m128i m_coeff1, m_coeff2, m_coeff3, m_coeff4;
  165|  69.1k|    __m128i m_coeff5, m_coeff6, m_coeff7, m_coeff8;
  166|       |
  167|  69.1k|    WORD32 i;
  168|       |/*Lokesh*/
  169|  69.1k|    WORD32  zero_last8_cols_stg1;
  170|  69.1k|    WORD32  zero_last8_rows_stg1;
  171|  69.1k|    WORD32  zero_last12_rows_stg1;
  172|  69.1k|    WORD32  zero_last12_rows_stg2;
  173|  69.1k|    WORD32  zero_last8_rows_stg2;
  174|       |
  175|  69.1k|    WORD32  loop = 0;
  176|       |
  177|  69.1k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  69.1k|#define IT_SHIFT_STAGE_1 7
  ------------------
  178|  69.1k|    WORD32 trans_size = TRANS_SIZE_16;
  ------------------
  |  |  421|  69.1k|#define TRANS_SIZE_16 16
  ------------------
  179|       |
  180|       |
  181|       |
  182|       |
  183|       |    /* Following 3 instructions replicates the value in the */
  184|       |    /* lower 16 bits of m_add_iq in the entire register */
  185|       |
  186|       |    /* Last 8 cols of 16x16 block are skipped based on the below flag : Lokesh */
  187|       |
  188|  69.1k|    zero_last8_cols_stg1 = ((zero_cols & 0xFF00) == 0xFF00) ? 1 : 0;
  ------------------
  |  Branch (188:28): [True: 49.5k, False: 19.6k]
  ------------------
  189|  69.1k|    zero_last8_rows_stg1 = ((zero_rows & 0xFF00) == 0xFF00) ? 1 : 0;
  ------------------
  |  Branch (189:28): [True: 46.2k, False: 22.9k]
  ------------------
  190|  69.1k|    zero_last12_rows_stg1 = ((zero_rows & 0xFFF0) == 0xFFF0) ? 1 : 0;
  ------------------
  |  Branch (190:29): [True: 38.4k, False: 30.7k]
  ------------------
  191|       |
  192|  69.1k|    zero_last12_rows_stg2 = ((zero_cols & 0xFFF0) == 0xFFF0) ? 1 : 0;
  ------------------
  |  Branch (192:29): [True: 32.6k, False: 36.5k]
  ------------------
  193|  69.1k|    zero_last8_rows_stg2 = zero_last8_cols_stg1;
  194|  69.1k|    if(zero_last8_cols_stg1)
  ------------------
  |  Branch (194:8): [True: 49.8k, False: 19.3k]
  ------------------
  195|  49.8k|    {
  196|  49.8k|        loop = 1;
  197|  49.8k|    }
  198|  19.3k|    else
  199|  19.3k|        loop = 2;
  200|       |
  201|       |    /* i = 0 => lower 8 samples */
  202|       |    /* i = 1 => higher 8 samples */
  203|   158k|    for(i = 0; i < loop; i++)
  ------------------
  |  Branch (203:16): [True: 89.3k, False: 69.1k]
  ------------------
  204|  89.3k|    {
  205|  89.3k|        {
  206|  89.3k|            WORD32 sample_half_index = i << 3;
  207|  89.3k|            WORD16 *pi2_tmp_src = pi2_src + sample_half_index;
  208|  89.3k|            WORD16 *pi2_scratch = (i) ? (pi2_tmp + 8 * trans_size) : pi2_tmp;
  ------------------
  |  Branch (208:35): [True: 19.6k, False: 69.6k]
  ------------------
  209|       |
  210|  89.3k|            m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_tmp_src);
  211|  89.3k|            pi2_tmp_src += (src_strd << 1);
  212|  89.3k|            m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_tmp_src);
  213|  89.3k|            pi2_tmp_src += (src_strd << 1);
  214|  89.3k|            m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_tmp_src);
  215|  89.3k|            pi2_tmp_src += (src_strd << 1);
  216|  89.3k|            m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_tmp_src);
  217|  89.3k|            pi2_tmp_src += (src_strd << 1);
  218|  89.3k|            m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_tmp_src);
  219|  89.3k|            pi2_tmp_src += (src_strd << 1);
  220|  89.3k|            m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_tmp_src);
  221|  89.3k|            pi2_tmp_src += (src_strd << 1);
  222|  89.3k|            m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_tmp_src);
  223|  89.3k|            pi2_tmp_src += (src_strd << 1);
  224|  89.3k|            m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_tmp_src);
  225|  89.3k|            pi2_tmp_src += (src_strd << 1);
  226|       |
  227|       |
  228|       |
  229|       |
  230|       |            /* If last 12 rows are zero : Rishab */
  231|  89.3k|            if(zero_last12_rows_stg1)
  ------------------
  |  Branch (231:16): [True: 42.4k, False: 46.8k]
  ------------------
  232|  42.4k|            {
  233|       |
  234|       |                /* eee */
  235|       |                /* eee[0] stored in m_temp_reg_24 and m_temp_reg_25 */
  236|       |                /* eee[1] stored in m_temp_reg_26 and m_temp_reg_27 */
  237|  42.4k|                {
  238|       |                    /* Loading coeff and src for use in next block */
  239|       |
  240|  42.4k|                    m_temp_reg_77 = _mm_cmpgt_epi16(m_temp_reg_77, m_temp_reg_70); //to get sign
  241|  42.4k|                    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_77); //row 0
  242|       |
  243|  42.4k|                    m_temp_reg_24 = _mm_slli_epi32(m_temp_reg_0, 6);
  244|       |
  245|  42.4k|                    m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_77);
  246|       |
  247|  42.4k|                    m_temp_reg_25 = _mm_slli_epi32(m_temp_reg_1, 6);
  248|       |
  249|  42.4k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[2][0]); //89 75
  250|       |
  251|  42.4k|                    m_temp_reg_26 = m_temp_reg_24;
  252|  42.4k|                    m_temp_reg_27 = m_temp_reg_25;
  253|  42.4k|                }
  254|       |
  255|       |                /* eo */
  256|       |
  257|       |                /* eo0[0-3] */
  258|  42.4k|                {
  259|  42.4k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  260|  42.4k|                    m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
  261|       |
  262|  42.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  263|       |
  264|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
  265|       |
  266|       |                    /* e[0][0-3] stored in pi2_tmp[0][0-7] */
  267|       |                    /* e[7][0-3] stored in pi2_tmp[0][8-15] */
  268|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_30);
  269|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_30);
  270|       |
  271|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  272|  42.4k|                    pi2_scratch += 8;
  273|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  274|  42.4k|                    pi2_scratch += 8;
  275|       |
  276|  42.4k|                }
  277|       |
  278|       |
  279|       |                /* eo0[4-7] */
  280|  42.4k|                {
  281|  42.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
  282|       |
  283|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
  284|       |
  285|       |                    /* e[0][4-7] stored in pi2_tmp[1][0-7] */
  286|       |                    /* e[7][4-7] stored in pi2_tmp[1][8-15] */
  287|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_31);
  288|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_31);
  289|       |
  290|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  291|  42.4k|                    pi2_scratch += 8;
  292|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  293|  42.4k|                    pi2_scratch += 8;
  294|       |
  295|  42.4k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[3][0]); //75 -18
  296|  42.4k|                }
  297|       |
  298|       |                /* eo1[0-3] */
  299|  42.4k|                {
  300|  42.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  301|       |
  302|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
  303|       |
  304|       |                    /* e[1][0-3] stored in pi2_tmp[2][0-7] */
  305|       |                    /* e[6][0-3] stored in pi2_tmp[2][8-15] */
  306|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_30);
  307|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_30);
  308|       |
  309|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  310|  42.4k|                    pi2_scratch += 8;
  311|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  312|  42.4k|                    pi2_scratch += 8;
  313|  42.4k|                }
  314|       |
  315|       |                /* eo1[4-7] */
  316|  42.4k|                {
  317|  42.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
  318|       |
  319|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
  320|       |
  321|       |                    /* e[1][4-7] stored in pi2_tmp[3][0-7] */
  322|       |                    /* e[6][4-7] stored in pi2_tmp[3][8-15] */
  323|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_31);
  324|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_31);
  325|       |
  326|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  327|  42.4k|                    pi2_scratch += 8;
  328|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  329|  42.4k|                    pi2_scratch += 8;
  330|       |
  331|  42.4k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[8][0]); //50 -89
  332|       |
  333|  42.4k|                }
  334|       |
  335|       |                /* eo2[0-3] */
  336|  42.4k|                {
  337|  42.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  338|       |
  339|       |                    /* e[2][0-3] stored in pi2_tmp[4][0-7] */
  340|       |                    /* e[5][0-3] stored in pi2_tmp[4][8-15] */
  341|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_30);
  342|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_30);
  343|       |
  344|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  345|  42.4k|                    pi2_scratch += 8;
  346|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  347|  42.4k|                    pi2_scratch += 8;
  348|       |
  349|  42.4k|                }
  350|       |
  351|       |                /* eo2[4-7] */
  352|  42.4k|                {
  353|  42.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
  354|       |
  355|       |                    /* e[2][4-7] stored in pi2_tmp[5][0-7] */
  356|       |                    /* e[5][4-7] stored in pi2_tmp[5][8-15] */
  357|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_31);
  358|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_31);
  359|       |
  360|       |
  361|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  362|  42.4k|                    pi2_scratch += 8;
  363|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  364|  42.4k|                    pi2_scratch += 8;
  365|       |
  366|  42.4k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[9][0]); //18 -50
  367|  42.4k|                }
  368|       |
  369|       |                /* eo3[0-3] */
  370|  42.4k|                {
  371|  42.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  372|       |
  373|       |                    /* e[3][0-3] stored in pi2_tmp[6][0-7] */
  374|       |                    /* e[4][0-3] stored in pi2_tmp[6][8-15] */
  375|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_30);
  376|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_30);
  377|       |
  378|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  379|  42.4k|                    pi2_scratch += 8;
  380|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  381|  42.4k|                    pi2_scratch += 8;
  382|  42.4k|                }
  383|       |
  384|       |                /* eo3[4-7] */
  385|  42.4k|                {
  386|  42.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
  387|       |
  388|       |                    /* e[3][4-7] stored in pi2_tmp[7][0-7] */
  389|       |                    /* e[4][4-7] stored in pi2_tmp[7][8-15] */
  390|  42.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_31);
  391|  42.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_31);
  392|       |
  393|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  394|  42.4k|                    pi2_scratch += 8;
  395|  42.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  396|  42.4k|                    pi2_scratch += 8;
  397|  42.4k|                }
  398|  42.4k|            }
  399|       |            /* If last 8 rows are zero : Rishab */
  400|  46.8k|            else if(zero_last8_rows_stg1)
  ------------------
  |  Branch (400:21): [True: 9.58k, False: 37.2k]
  ------------------
  401|  9.58k|            {
  402|       |                /* eeo */
  403|       |                /* eeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
  404|       |                /* eeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
  405|  9.58k|                {
  406|  9.58k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[6][0]); //83  36
  407|  9.58k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[7][0]); //36 -83
  408|       |
  409|  9.58k|                    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved LSB's
  410|  9.58k|                    m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved MSB's
  411|       |
  412|  9.58k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
  413|  9.58k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
  414|       |
  415|  9.58k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
  416|  9.58k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
  417|       |
  418|  9.58k|                }
  419|       |
  420|       |                /* eee */
  421|       |                /* eee[0] stored in m_temp_reg_24 and m_temp_reg_25 */
  422|       |                /* eee[1] stored in m_temp_reg_26 and m_temp_reg_27 */
  423|  9.58k|                {
  424|       |                    /* Loading coeff and src for use in next block */
  425|  9.58k|                    m_temp_reg_77 = _mm_cmpgt_epi16(m_temp_reg_77, m_temp_reg_70); //to  get signs
  426|  9.58k|                    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_77); //row 0
  427|       |
  428|  9.58k|                    m_temp_reg_24 = _mm_slli_epi32(m_temp_reg_0, 6);
  429|       |
  430|  9.58k|                    m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_77);
  431|       |
  432|  9.58k|                    m_temp_reg_25 = _mm_slli_epi32(m_temp_reg_1, 6);
  433|       |
  434|  9.58k|                    m_temp_reg_26 = m_temp_reg_24;
  435|  9.58k|                    m_temp_reg_27 = m_temp_reg_25;
  436|       |
  437|  9.58k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[2][0]); //89 75
  438|  9.58k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[4][0]); //50 18
  439|  9.58k|                }
  440|       |
  441|       |                /* eo0[0-3] */
  442|  9.58k|                {
  443|  9.58k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  444|  9.58k|                    m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
  445|       |
  446|  9.58k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  447|       |
  448|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
  449|  9.58k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_20);
  450|  9.58k|                    m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_20);
  451|       |
  452|       |                    /* e[0][0-3] stored in pi2_tmp[0][0-7] */
  453|       |                    /* e[7][0-3] stored in pi2_tmp[0][8-15] */
  454|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  455|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  456|       |
  457|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  458|  9.58k|                    pi2_scratch += 8;
  459|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  460|  9.58k|                    pi2_scratch += 8;
  461|       |
  462|  9.58k|                }
  463|       |
  464|       |                /* eo0[4-7] */
  465|  9.58k|                {
  466|  9.58k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
  467|       |
  468|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
  469|  9.58k|                    m_temp_reg_41 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_21);
  470|  9.58k|                    m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_21);
  471|       |
  472|       |                    /* e[0][4-7] stored in pi2_tmp[1][0-7] */
  473|       |                    /* e[7][4-7] stored in pi2_tmp[1][8-15] */
  474|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
  475|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
  476|       |
  477|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  478|  9.58k|                    pi2_scratch += 8;
  479|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  480|  9.58k|                    pi2_scratch += 8;
  481|       |
  482|  9.58k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[3][0]); //75 -18
  483|  9.58k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[5][0]); //89 50
  484|       |
  485|  9.58k|                }
  486|       |
  487|       |                /* eo1[0-3] */
  488|  9.58k|                {
  489|  9.58k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  490|       |
  491|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
  492|  9.58k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_22);
  493|  9.58k|                    m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_22);
  494|       |
  495|       |                    /* e[1][0-3] stored in pi2_tmp[2][0-7] */
  496|       |                    /* e[6][0-3] stored in pi2_tmp[2][8-15] */
  497|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  498|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  499|       |
  500|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  501|  9.58k|                    pi2_scratch += 8;
  502|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  503|  9.58k|                    pi2_scratch += 8;
  504|       |
  505|  9.58k|                }
  506|       |
  507|       |                /* eo1[4-7] */
  508|  9.58k|                {
  509|  9.58k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
  510|       |
  511|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
  512|  9.58k|                    m_temp_reg_43 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_23);
  513|  9.58k|                    m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_23);
  514|       |
  515|       |                    /* e[1][4-7] stored in pi2_tmp[3][0-7] */
  516|       |                    /* e[6][4-7] stored in pi2_tmp[3][8-15] */
  517|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_31);
  518|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_31);
  519|       |
  520|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  521|  9.58k|                    pi2_scratch += 8;
  522|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  523|  9.58k|                    pi2_scratch += 8;
  524|       |
  525|  9.58k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[8][0]); //50 -89
  526|  9.58k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[10][0]); //18 75
  527|       |
  528|  9.58k|                }
  529|       |
  530|       |                /* eo2[0-3] */
  531|  9.58k|                {
  532|  9.58k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  533|       |
  534|       |                    /* e[2][0-3] stored in pi2_tmp[4][0-7] */
  535|       |                    /* e[5][0-3] stored in pi2_tmp[4][8-15] */
  536|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  537|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  538|       |
  539|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  540|  9.58k|                    pi2_scratch += 8;
  541|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  542|  9.58k|                    pi2_scratch += 8;
  543|       |
  544|  9.58k|                }
  545|       |
  546|       |                /* eo2[4-7] */
  547|  9.58k|                {
  548|  9.58k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
  549|       |
  550|       |                    /* e[2][4-7] stored in pi2_tmp[5][0-7] */
  551|       |                    /* e[5][4-7] stored in pi2_tmp[5][8-15] */
  552|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_31);
  553|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_31);
  554|       |
  555|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  556|  9.58k|                    pi2_scratch += 8;
  557|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  558|  9.58k|                    pi2_scratch += 8;
  559|       |
  560|  9.58k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[9][0]); //18 -50
  561|  9.58k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[11][0]); //75 -89
  562|       |
  563|  9.58k|                }
  564|       |
  565|       |                /* eo3[0-3] */
  566|  9.58k|                {
  567|  9.58k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  568|       |
  569|       |                    /* e[3][0-3] stored in pi2_tmp[6][0-7] */
  570|       |                    /* e[4][0-3] stored in pi2_tmp[6][8-15] */
  571|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  572|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  573|       |
  574|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  575|  9.58k|                    pi2_scratch += 8;
  576|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  577|  9.58k|                    pi2_scratch += 8;
  578|  9.58k|                }
  579|       |
  580|       |                /* eo3[4-7] */
  581|  9.58k|                {
  582|  9.58k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
  583|       |
  584|       |                    /* e[3][4-7] stored in pi2_tmp[7][0-7] */
  585|       |                    /* e[4][4-7] stored in pi2_tmp[7][8-15] */
  586|  9.58k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_31);
  587|  9.58k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_31);
  588|       |
  589|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  590|  9.58k|                    pi2_scratch += 8;
  591|  9.58k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  592|  9.58k|                    pi2_scratch += 8;
  593|  9.58k|                }
  594|  9.58k|            } /* If all the rows are non-zero : Rishab */
  595|  37.2k|            else
  596|  37.2k|            {
  597|       |                /* eeo */
  598|       |                /* eeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
  599|       |                /* eeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
  600|       |
  601|  37.2k|                {
  602|  37.2k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[6][0]); //83  36
  603|  37.2k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[7][0]); //36 -83
  604|       |
  605|  37.2k|                    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved LSB's
  606|  37.2k|                    m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved MSB's
  607|       |
  608|  37.2k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
  609|  37.2k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
  610|       |
  611|  37.2k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
  612|  37.2k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
  613|  37.2k|                }
  614|       |
  615|       |                /* eee */
  616|       |                /* eee[0] stored in m_temp_reg_24 and m_temp_reg_25 */
  617|       |                /* eee[1] stored in m_temp_reg_26 and m_temp_reg_27 */
  618|  37.2k|                {
  619|       |                    /* Loading coeff and src for use in next block */
  620|  37.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[0][0]); //64  64
  621|  37.2k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[1][0]); //64 -64
  622|       |
  623|  37.2k|                    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74); //row 0 and row 8 interleaved LSB's
  624|  37.2k|                    m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_74); //row 0 and row 8 interleaved MSB's
  625|       |
  626|  37.2k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
  627|  37.2k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_0, m_coeff4);
  628|       |
  629|  37.2k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  630|  37.2k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);
  631|       |
  632|  37.2k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[2][0]); //89 75
  633|  37.2k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[4][0]); //50 18
  634|       |
  635|  37.2k|                }
  636|       |                /* eo0[0-3] */
  637|  37.2k|                {
  638|  37.2k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  639|  37.2k|                    m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
  640|  37.2k|                    m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
  641|  37.2k|                    m_temp_reg_13 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_77);
  642|       |
  643|  37.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  644|  37.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff2);
  645|       |
  646|       |
  647|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
  648|  37.2k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_20);
  649|  37.2k|                    m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_20);
  650|       |
  651|       |                    /* e[0][0-3] stored in pi2_tmp[0][0-7] */
  652|       |                    /* e[7][0-3] stored in pi2_tmp[0][8-15] */
  653|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  654|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  655|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_32);
  656|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_32);
  657|       |
  658|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  659|  37.2k|                    pi2_scratch += 8;
  660|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  661|  37.2k|                    pi2_scratch += 8;
  662|       |
  663|       |
  664|  37.2k|                }
  665|       |
  666|       |                /* eo0[4-7] */
  667|  37.2k|                {
  668|  37.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
  669|  37.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff2);
  670|       |
  671|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
  672|  37.2k|                    m_temp_reg_41 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_21);
  673|  37.2k|                    m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_21);
  674|       |
  675|       |                    /* e[0][4-7] stored in pi2_tmp[1][0-7] */
  676|       |                    /* e[7][4-7] stored in pi2_tmp[1][8-15] */
  677|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
  678|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
  679|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_33);
  680|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_33);
  681|       |
  682|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  683|  37.2k|                    pi2_scratch += 8;
  684|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  685|  37.2k|                    pi2_scratch += 8;
  686|       |
  687|  37.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[3][0]); //75 -18
  688|  37.2k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[5][0]); //89 50
  689|       |
  690|  37.2k|                }
  691|       |
  692|       |                /* eo1[0-3] */
  693|  37.2k|                {
  694|  37.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  695|  37.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff4);
  696|       |
  697|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
  698|  37.2k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_22);
  699|  37.2k|                    m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_22);
  700|       |
  701|       |                    /* e[1][0-3] stored in pi2_tmp[2][0-7] */
  702|       |                    /* e[6][0-3] stored in pi2_tmp[2][8-15] */
  703|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  704|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  705|  37.2k|                    m_temp_reg_34 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_32);
  706|  37.2k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_32);
  707|       |
  708|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  709|  37.2k|                    pi2_scratch += 8;
  710|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  711|  37.2k|                    pi2_scratch += 8;
  712|       |
  713|  37.2k|                }
  714|       |
  715|       |                /* eo1[4-7] */
  716|  37.2k|                {
  717|  37.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
  718|  37.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
  719|       |
  720|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
  721|  37.2k|                    m_temp_reg_43 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_23);
  722|  37.2k|                    m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_23);
  723|       |
  724|       |                    /* e[1][4-7] stored in pi2_tmp[3][0-7] */
  725|       |                    /* e[6][4-7] stored in pi2_tmp[3][8-15] */
  726|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_31);
  727|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_31);
  728|  37.2k|                    m_temp_reg_34 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_33);
  729|  37.2k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_33);
  730|       |
  731|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  732|  37.2k|                    pi2_scratch += 8;
  733|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  734|  37.2k|                    pi2_scratch += 8;
  735|  37.2k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[8][0]); //50 -89
  736|  37.2k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[10][0]); //18 75
  737|  37.2k|                }
  738|       |
  739|       |                /* eo2[0-3] */
  740|  37.2k|                {
  741|  37.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  742|  37.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff2);
  743|       |
  744|       |                    /* e[2][0-3] stored in pi2_tmp[4][0-7] */
  745|       |                    /* e[5][0-3] stored in pi2_tmp[4][8-15] */
  746|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  747|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  748|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_32);
  749|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_32);
  750|       |
  751|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  752|  37.2k|                    pi2_scratch += 8;
  753|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  754|  37.2k|                    pi2_scratch += 8;
  755|  37.2k|                }
  756|       |
  757|       |                /* eo2[4-7] */
  758|  37.2k|                {
  759|  37.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
  760|  37.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff2);
  761|       |
  762|       |                    /* e[2][4-7] stored in pi2_tmp[5][0-7] */
  763|       |                    /* e[5][4-7] stored in pi2_tmp[5][8-15] */
  764|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_31);
  765|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_31);
  766|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_33);
  767|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_33);
  768|       |
  769|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  770|  37.2k|                    pi2_scratch += 8;
  771|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  772|  37.2k|                    pi2_scratch += 8;
  773|       |
  774|  37.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[9][0]); //18 -50
  775|  37.2k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[11][0]); //75 -89
  776|       |
  777|  37.2k|                }
  778|       |
  779|       |                /* eo3[0-3] */
  780|  37.2k|                {
  781|  37.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  782|  37.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff4);
  783|       |
  784|       |                    /* e[3][0-3] stored in pi2_tmp[6][0-7] */
  785|       |                    /* e[4][0-3] stored in pi2_tmp[6][8-15] */
  786|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  787|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  788|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_32);
  789|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_32);
  790|       |
  791|       |
  792|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  793|  37.2k|                    pi2_scratch += 8;
  794|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  795|  37.2k|                    pi2_scratch += 8;
  796|  37.2k|                }
  797|       |
  798|       |                /* eo3[4-7] */
  799|  37.2k|                {
  800|  37.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
  801|  37.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
  802|       |
  803|       |                    /* e[3][4-7] stored in pi2_tmp[7][0-7] */
  804|       |                    /* e[4][4-7] stored in pi2_tmp[7][8-15] */
  805|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_31);
  806|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_31);
  807|  37.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_33);
  808|  37.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_33);
  809|       |
  810|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  811|  37.2k|                    pi2_scratch += 8;
  812|  37.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  813|  37.2k|                    pi2_scratch += 8;
  814|  37.2k|                }
  815|       |
  816|  37.2k|            }
  817|  89.3k|        }
  818|       |
  819|  89.3k|        {
  820|  89.3k|            WORD32 sample_half_index = i << 3;
  821|  89.3k|            WORD16 *pi2_tmp_src = pi2_src + sample_half_index + src_strd;
  822|       |
  823|  89.3k|            m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_tmp_src);
  824|  89.3k|            pi2_tmp_src += (src_strd << 1);
  825|  89.3k|            m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_tmp_src);
  826|  89.3k|            pi2_tmp_src += (src_strd << 1);
  827|  89.3k|            m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_tmp_src);
  828|  89.3k|            pi2_tmp_src += (src_strd << 1);
  829|  89.3k|            m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_tmp_src);
  830|  89.3k|            pi2_tmp_src += (src_strd << 1);
  831|  89.3k|            m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_tmp_src);
  832|  89.3k|            pi2_tmp_src += (src_strd << 1);
  833|  89.3k|            m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_tmp_src);
  834|  89.3k|            pi2_tmp_src += (src_strd << 1);
  835|  89.3k|            m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_tmp_src);
  836|  89.3k|            pi2_tmp_src += (src_strd << 1);
  837|  89.3k|            m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_tmp_src);
  838|  89.3k|            pi2_tmp_src += (src_strd << 1);
  839|  89.3k|        }
  840|       |
  841|       |        /* o & stage 1 out */
  842|  89.3k|        {
  843|  89.3k|            WORD32 j;
  844|  89.3k|            WORD16 *pi2_src_scratch = (i) ? (pi2_tmp + 8 * trans_size) : pi2_tmp;
  ------------------
  |  Branch (844:39): [True: 19.7k, False: 69.6k]
  ------------------
  845|  89.3k|            WORD16 *pi2_dst_scratch = (i) ? (pi2_tmp + 8 * trans_size) : pi2_tmp;
  ------------------
  |  Branch (845:39): [True: 19.7k, False: 69.6k]
  ------------------
  846|  89.3k|            WORD32 out_stride = (trans_size << 1);
  847|  89.3k|            WORD32 in_stride = trans_size << 1;
  848|       |
  849|  89.3k|            if(zero_last12_rows_stg1)
  ------------------
  |  Branch (849:16): [True: 42.8k, False: 46.5k]
  ------------------
  850|  42.8k|            {
  851|   128k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (851:28): [True: 85.7k, False: 42.8k]
  ------------------
  852|  85.7k|                {
  853|  85.7k|                    if(j) //H8B= higher 8 bytes L8B lower 8 bytes
  ------------------
  |  Branch (853:24): [True: 42.8k, False: 42.9k]
  ------------------
  854|  42.8k|                    {
  855|  42.8k|                        m_temp_reg_10 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 H8B
  856|  42.8k|                    }
  857|  42.9k|                    else
  858|  42.9k|                    {
  859|  42.9k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 L8B
  860|  42.9k|                    }
  861|  85.7k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[0][0]); //90 87
  862|       |
  863|       |
  864|       |                    /* o0[0-3] */
  865|  85.7k|                    {
  866|  85.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  867|       |
  868|       |
  869|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
  870|  85.7k|                        pi2_src_scratch += in_stride;
  871|       |
  872|  85.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[4][0]); //87 57
  873|       |
  874|       |
  875|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
  876|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
  877|       |
  878|  85.7k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  879|  85.7k|                        m_count = _mm_cvtsi32_si128(i4_shift);
  880|  85.7k|                        m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x00);
  881|       |
  882|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  883|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  884|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
  885|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
  886|       |
  887|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
  888|       |
  889|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
  890|  85.7k|                        pi2_dst_scratch += out_stride;
  891|  85.7k|                    }
  892|       |
  893|       |                    /* o1[0-3] */
  894|  85.7k|                    {
  895|  85.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
  896|       |
  897|       |
  898|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
  899|  85.7k|                        pi2_src_scratch += in_stride;
  900|       |
  901|  85.7k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[8][0]); //80 9
  902|       |
  903|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
  904|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
  905|       |
  906|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  907|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  908|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
  909|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
  910|       |
  911|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
  912|       |
  913|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
  914|  85.7k|                        pi2_dst_scratch += out_stride;
  915|  85.7k|                    }
  916|       |
  917|       |                    /* o2[0-3] */
  918|  85.7k|                    {
  919|  85.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  920|       |
  921|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
  922|  85.7k|                        pi2_src_scratch += in_stride;
  923|       |
  924|  85.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[12][0]); //70 -43
  925|       |
  926|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
  927|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
  928|       |
  929|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  930|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  931|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
  932|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
  933|       |
  934|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
  935|       |
  936|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
  937|  85.7k|                        pi2_dst_scratch += out_stride;
  938|  85.7k|                    }
  939|       |
  940|       |                    /* o3[0-3] */
  941|  85.7k|                    {
  942|  85.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
  943|       |
  944|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
  945|  85.7k|                        pi2_src_scratch += 8;
  946|       |
  947|  85.7k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[16][0]); //57 -80
  948|       |
  949|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
  950|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
  951|       |
  952|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  953|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  954|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
  955|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
  956|       |
  957|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
  958|       |
  959|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
  960|  85.7k|                        pi2_dst_scratch += 8;
  961|  85.7k|                    }
  962|       |
  963|       |                    /* o4[0-3] */
  964|  85.7k|                    {
  965|  85.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  966|       |
  967|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
  968|  85.7k|                        pi2_src_scratch -= in_stride;
  969|       |
  970|  85.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[20][0]); //43 -90
  971|       |
  972|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
  973|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
  974|       |
  975|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  976|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  977|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
  978|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
  979|       |
  980|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
  981|       |
  982|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
  983|  85.7k|                        pi2_dst_scratch -= out_stride;
  984|  85.7k|                    }
  985|       |
  986|       |                    /* o5[0-3] */
  987|  85.7k|                    {
  988|  85.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
  989|       |
  990|       |
  991|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
  992|  85.7k|                        pi2_src_scratch -= in_stride;
  993|       |
  994|  85.7k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[24][0]); //25 -70
  995|       |
  996|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
  997|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
  998|       |
  999|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1000|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1001|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1002|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1003|       |
 1004|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1005|       |
 1006|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1007|  85.7k|                        pi2_dst_scratch -= out_stride;
 1008|  85.7k|                    }
 1009|       |
 1010|       |                    /* o6[0-3] */
 1011|  85.7k|                    {
 1012|  85.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1013|       |
 1014|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1015|  85.7k|                        pi2_src_scratch -= in_stride;
 1016|       |
 1017|  85.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[28][0]); //9 -25
 1018|       |
 1019|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1020|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1021|       |
 1022|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1023|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1024|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1025|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1026|       |
 1027|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1028|       |
 1029|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1030|  85.7k|                        pi2_dst_scratch -= out_stride;
 1031|  85.7k|                    }
 1032|       |
 1033|       |                    /* o7[0-3] */
 1034|  85.7k|                    {
 1035|  85.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1036|       |
 1037|  85.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1038|  85.7k|                        pi2_src_scratch += 8;
 1039|       |
 1040|  85.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1041|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1042|       |
 1043|  85.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1044|  85.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1045|  85.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1046|  85.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1047|       |
 1048|  85.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1049|       |
 1050|  85.7k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1051|  85.7k|                        pi2_dst_scratch += 8;
 1052|  85.7k|                    }
 1053|  85.7k|                }
 1054|  42.8k|            }
 1055|  46.5k|            else if(zero_last8_rows_stg1)
  ------------------
  |  Branch (1055:21): [True: 9.58k, False: 36.9k]
  ------------------
 1056|  9.58k|            {
 1057|  28.7k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (1057:28): [True: 19.1k, False: 9.58k]
  ------------------
 1058|  19.1k|                {
 1059|  19.1k|                    if(j)
  ------------------
  |  Branch (1059:24): [True: 9.58k, False: 9.58k]
  ------------------
 1060|  9.58k|                    {
 1061|  9.58k|                        m_temp_reg_10 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 H8B
 1062|  9.58k|                        m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 H8B
 1063|  9.58k|                    }
 1064|  9.58k|                    else
 1065|  9.58k|                    {
 1066|  9.58k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 L8B
 1067|  9.58k|                        m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 L8B
 1068|  9.58k|                    }
 1069|  19.1k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[0][0]); //90 87
 1070|  19.1k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[1][0]); //80 70
 1071|       |
 1072|       |                    /* o0[0-3] */
 1073|  19.1k|                    {
 1074|  19.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1075|  19.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1076|       |
 1077|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1078|  19.1k|                        pi2_src_scratch += in_stride;
 1079|       |
 1080|  19.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[4][0]); //87 57
 1081|  19.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[5][0]); //9 -43
 1082|       |
 1083|  19.1k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 1084|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1085|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1086|       |
 1087|       |
 1088|  19.1k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1089|  19.1k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1090|       |
 1091|  19.1k|                        m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x00);
 1092|       |
 1093|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1094|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1095|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1096|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1097|       |
 1098|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1099|       |
 1100|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1101|  19.1k|                        pi2_dst_scratch += out_stride;
 1102|  19.1k|                    }
 1103|       |
 1104|       |                    /* o1[0-3] */
 1105|  19.1k|                    {
 1106|  19.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1107|  19.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1108|       |
 1109|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1110|  19.1k|                        pi2_src_scratch += in_stride;
 1111|       |
 1112|  19.1k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[8][0]); //80 9
 1113|  19.1k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[9][0]); //70 87
 1114|       |
 1115|  19.1k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 1116|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1117|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1118|       |
 1119|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1120|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1121|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1122|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1123|       |
 1124|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1125|       |
 1126|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1127|  19.1k|                        pi2_dst_scratch += out_stride;
 1128|  19.1k|                    }
 1129|       |
 1130|       |                    /* o2[0-3] */
 1131|  19.1k|                    {
 1132|  19.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1133|  19.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1134|       |
 1135|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1136|  19.1k|                        pi2_src_scratch += in_stride;
 1137|       |
 1138|  19.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[12][0]); //70 -43
 1139|  19.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[13][0]); //87 -9
 1140|       |
 1141|  19.1k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 1142|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1143|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1144|       |
 1145|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1146|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1147|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1148|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1149|       |
 1150|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1151|       |
 1152|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1153|  19.1k|                        pi2_dst_scratch += out_stride;
 1154|  19.1k|                    }
 1155|       |
 1156|       |                    /* o3[0-3] */
 1157|  19.1k|                    {
 1158|  19.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1159|  19.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1160|       |
 1161|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1162|  19.1k|                        pi2_src_scratch += 8;
 1163|       |
 1164|  19.1k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[16][0]); //57 -80
 1165|  19.1k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[17][0]); //25 -90
 1166|       |
 1167|  19.1k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_25);
 1168|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1169|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1170|       |
 1171|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1172|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1173|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1174|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1175|       |
 1176|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1177|       |
 1178|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1179|  19.1k|                        pi2_dst_scratch += 8;
 1180|  19.1k|                    }
 1181|       |
 1182|       |                    /* o4[0-3] */
 1183|  19.1k|                    {
 1184|  19.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1185|  19.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1186|       |
 1187|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1188|  19.1k|                        pi2_src_scratch -= in_stride;
 1189|       |
 1190|  19.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[20][0]); //43 -90
 1191|  19.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[21][0]); //57 25
 1192|       |
 1193|  19.1k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 1194|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1195|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1196|       |
 1197|       |
 1198|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1199|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1200|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1201|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1202|       |
 1203|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1204|       |
 1205|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1206|  19.1k|                        pi2_dst_scratch -= out_stride;
 1207|  19.1k|                    }
 1208|       |
 1209|       |                    /* o5[0-3] */
 1210|  19.1k|                    {
 1211|  19.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1212|  19.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1213|       |
 1214|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1215|  19.1k|                        pi2_src_scratch -= in_stride;
 1216|       |
 1217|  19.1k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[24][0]); //25 -70
 1218|  19.1k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[25][0]); //90 -80
 1219|       |
 1220|  19.1k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 1221|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1222|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1223|       |
 1224|       |
 1225|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1226|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1227|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1228|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1229|       |
 1230|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1231|       |
 1232|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1233|  19.1k|                        pi2_dst_scratch -= out_stride;
 1234|  19.1k|                    }
 1235|       |
 1236|       |                    /* o6[0-3] */
 1237|  19.1k|                    {
 1238|  19.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1239|  19.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1240|       |
 1241|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1242|  19.1k|                        pi2_src_scratch -= in_stride;
 1243|       |
 1244|  19.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[28][0]); //9 -25
 1245|  19.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[29][0]); //43 -57
 1246|       |
 1247|  19.1k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 1248|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1249|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1250|       |
 1251|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1252|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1253|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1254|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1255|       |
 1256|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1257|       |
 1258|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1259|  19.1k|                        pi2_dst_scratch -= out_stride;
 1260|  19.1k|                    }
 1261|       |
 1262|       |                    /* o7[0-3] */
 1263|  19.1k|                    {
 1264|  19.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1265|  19.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1266|       |
 1267|  19.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1268|  19.1k|                        pi2_src_scratch += 8;
 1269|       |
 1270|  19.1k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 1271|  19.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1272|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1273|       |
 1274|  19.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1275|  19.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1276|  19.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1277|  19.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1278|       |
 1279|  19.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1280|       |
 1281|  19.1k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1282|  19.1k|                        pi2_dst_scratch += 8;
 1283|  19.1k|                    }
 1284|  19.1k|                }
 1285|       |
 1286|  9.58k|            }
 1287|  36.9k|            else
 1288|  36.9k|            {
 1289|       |
 1290|       |
 1291|       |
 1292|   111k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (1292:28): [True: 75.0k, False: 36.9k]
  ------------------
 1293|  75.0k|                {
 1294|  75.0k|                    if(j) //H8B= higher 8 bytes L8B lower 8 bytes
  ------------------
  |  Branch (1294:24): [True: 37.5k, False: 37.5k]
  ------------------
 1295|  37.5k|                    {
 1296|  37.5k|                        m_temp_reg_10 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 H8B
 1297|  37.5k|                        m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 H8B
 1298|  37.5k|                        m_temp_reg_12 = _mm_unpackhi_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 H8B
 1299|  37.5k|                        m_temp_reg_13 = _mm_unpackhi_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 H8B
 1300|  37.5k|                    }
 1301|  37.5k|                    else
 1302|  37.5k|                    {
 1303|  37.5k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 L8B
 1304|  37.5k|                        m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 L8B
 1305|  37.5k|                        m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 L8B
 1306|  37.5k|                        m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 L8B
 1307|  37.5k|                    }
 1308|  75.0k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[0][0]); //90 87
 1309|  75.0k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[1][0]); //80 70
 1310|  75.0k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[2][0]); //57 43
 1311|  75.0k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[3][0]); //25  9
 1312|       |
 1313|       |
 1314|       |                    /* o0[0-3] */
 1315|  75.0k|                    {
 1316|  75.0k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1317|  75.0k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1318|  75.0k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1319|  75.0k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1320|       |
 1321|       |
 1322|  75.0k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1323|  75.0k|                        pi2_src_scratch += in_stride;
 1324|       |
 1325|  75.0k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[4][0]); //87 57
 1326|  75.0k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[5][0]); //9 -43
 1327|  75.0k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[6][0]); //80 90
 1328|  75.0k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[7][0]); //70 25
 1329|       |
 1330|  75.0k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 1331|  75.0k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 1332|  75.0k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 1333|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1334|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1335|       |
 1336|  75.0k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1337|  75.0k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1338|  75.0k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1339|  75.0k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1340|       |
 1341|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1342|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1343|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1344|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1345|       |
 1346|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1347|       |
 1348|  75.0k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1349|  75.0k|                        pi2_dst_scratch += out_stride;
 1350|  75.0k|                    }
 1351|       |
 1352|       |                    /* o1[0-3] */
 1353|  75.0k|                    {
 1354|  75.0k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1355|  75.0k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1356|  75.0k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 1357|  75.0k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 1358|       |
 1359|       |
 1360|  75.0k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1361|  75.0k|                        pi2_src_scratch += in_stride;
 1362|       |
 1363|  75.0k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[8][0]); //80 9
 1364|  75.0k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[9][0]); //70 87
 1365|  75.0k|                        m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[10][0]); //25 -57
 1366|  75.0k|                        m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[11][0]); //90 43
 1367|       |
 1368|  75.0k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 1369|  75.0k|                        m_temp_reg_26 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_27);
 1370|  75.0k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_26);
 1371|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1372|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1373|       |
 1374|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1375|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1376|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1377|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1378|       |
 1379|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1380|       |
 1381|  75.0k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1382|  75.0k|                        pi2_dst_scratch += out_stride;
 1383|  75.0k|                    }
 1384|       |
 1385|       |                    /* o2[0-3] */
 1386|  75.0k|                    {
 1387|  75.0k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1388|  75.0k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1389|  75.0k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1390|  75.0k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1391|       |
 1392|  75.0k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1393|  75.0k|                        pi2_src_scratch += in_stride;
 1394|       |
 1395|  75.0k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[12][0]); //70 -43
 1396|  75.0k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[13][0]); //87 -9
 1397|  75.0k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[14][0]); //90 25
 1398|  75.0k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[15][0]); //80 57
 1399|       |
 1400|  75.0k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 1401|  75.0k|                        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_23);
 1402|  75.0k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_22);
 1403|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1404|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1405|       |
 1406|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1407|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1408|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1409|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1410|       |
 1411|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1412|       |
 1413|  75.0k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1414|  75.0k|                        pi2_dst_scratch += out_stride;
 1415|  75.0k|                    }
 1416|       |
 1417|       |                    /* o3[0-3] */
 1418|  75.0k|                    {
 1419|  75.0k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1420|  75.0k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1421|  75.0k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 1422|  75.0k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 1423|       |
 1424|       |
 1425|  75.0k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1426|  75.0k|                        pi2_src_scratch += 8;
 1427|       |
 1428|  75.0k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[16][0]); //57 -80
 1429|  75.0k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[17][0]); //25 -90
 1430|  75.0k|                        m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[18][0]); //9 87
 1431|  75.0k|                        m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[19][0]); //43 70
 1432|       |
 1433|  75.0k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_25);
 1434|  75.0k|                        m_temp_reg_26 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_27);
 1435|  75.0k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_26);
 1436|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1437|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1438|       |
 1439|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1440|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1441|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1442|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1443|       |
 1444|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1445|       |
 1446|  75.0k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1447|  75.0k|                        pi2_dst_scratch += 8;
 1448|  75.0k|                    }
 1449|       |
 1450|       |                    /* o4[0-3] */
 1451|  75.0k|                    {
 1452|  75.0k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1453|  75.0k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1454|  75.0k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1455|  75.0k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1456|       |
 1457|  75.0k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1458|  75.0k|                        pi2_src_scratch -= in_stride;
 1459|       |
 1460|  75.0k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[20][0]); //43 -90
 1461|  75.0k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[21][0]); //57 25
 1462|  75.0k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[22][0]); //87 -70
 1463|  75.0k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[23][0]); //9 -80
 1464|       |
 1465|  75.0k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 1466|  75.0k|                        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_23);
 1467|  75.0k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_22);
 1468|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1469|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1470|       |
 1471|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1472|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1473|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1474|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1475|       |
 1476|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1477|       |
 1478|  75.0k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1479|  75.0k|                        pi2_dst_scratch -= out_stride;
 1480|  75.0k|                    }
 1481|       |
 1482|       |                    /* o5[0-3] */
 1483|  75.0k|                    {
 1484|  75.0k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1485|  75.0k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1486|  75.0k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 1487|  75.0k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 1488|       |
 1489|       |
 1490|  75.0k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1491|  75.0k|                        pi2_src_scratch -= in_stride;
 1492|       |
 1493|  75.0k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[24][0]); //25 -70
 1494|  75.0k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[25][0]); //90 -80
 1495|  75.0k|                        m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[26][0]); //43 9
 1496|  75.0k|                        m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[27][0]); //57 -87
 1497|       |
 1498|  75.0k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 1499|  75.0k|                        m_temp_reg_26 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_27);
 1500|  75.0k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_26);
 1501|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1502|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1503|       |
 1504|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1505|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1506|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1507|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1508|       |
 1509|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1510|       |
 1511|  75.0k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1512|  75.0k|                        pi2_dst_scratch -= out_stride;
 1513|  75.0k|                    }
 1514|       |
 1515|       |                    /* o6[0-3] */
 1516|  75.0k|                    {
 1517|  75.0k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1518|  75.0k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1519|  75.0k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1520|  75.0k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1521|       |
 1522|       |
 1523|  75.0k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1524|  75.0k|                        pi2_src_scratch -= in_stride;
 1525|       |
 1526|  75.0k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[28][0]); //9 -25
 1527|  75.0k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[29][0]); //43 -57
 1528|  75.0k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[30][0]); //70 -80
 1529|  75.0k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[31][0]); //87 -90
 1530|       |
 1531|       |
 1532|  75.0k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 1533|  75.0k|                        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_23);
 1534|  75.0k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 1535|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1536|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1537|       |
 1538|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1539|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1540|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1541|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1542|       |
 1543|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1544|       |
 1545|  75.0k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1546|  75.0k|                        pi2_dst_scratch -= out_stride;
 1547|  75.0k|                    }
 1548|       |
 1549|       |                    /* o7[0-3] */
 1550|  75.0k|                    {
 1551|  75.0k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 1552|  75.0k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 1553|  75.0k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 1554|  75.0k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 1555|       |
 1556|  75.0k|                        m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch);
 1557|  75.0k|                        pi2_src_scratch += 8;
 1558|       |
 1559|  75.0k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 1560|  75.0k|                        m_temp_reg_26 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_27);
 1561|  75.0k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_26);
 1562|  75.0k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 1563|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 1564|       |
 1565|       |
 1566|  75.0k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1567|  75.0k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1568|  75.0k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1569|  75.0k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1570|       |
 1571|  75.0k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1572|       |
 1573|  75.0k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1574|  75.0k|                        pi2_dst_scratch += 8;
 1575|  75.0k|                    }
 1576|  75.0k|                }
 1577|  36.9k|            }
 1578|  89.3k|        }
 1579|       |
 1580|       |        /* Transpose */
 1581|  89.3k|        {
 1582|  89.3k|            WORD16 *pi2_src_scratch = (i) ? (pi2_tmp + 8 * trans_size) : pi2_tmp;
  ------------------
  |  Branch (1582:39): [True: 19.7k, False: 69.6k]
  ------------------
 1583|  89.3k|            WORD16 *pi2_dst_scratch = ((i) ? (pi2_tmp + 8 * trans_size) : pi2_tmp);
  ------------------
  |  Branch (1583:40): [True: 19.7k, False: 69.6k]
  ------------------
 1584|  89.3k|            WORD32 out_stride = (trans_size << 1);
 1585|  89.3k|            WORD32 in_stride = (trans_size << 1);
 1586|  89.3k|            WORD32 j;
 1587|       |
 1588|   268k|            for(j = 0; j < 2; j++)
  ------------------
  |  Branch (1588:24): [True: 179k, False: 89.3k]
  ------------------
 1589|   179k|            {
 1590|   179k|                m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //b, a
 1591|   179k|                pi2_src_scratch += in_stride;
 1592|   179k|                m_temp_reg_31 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //d, c
 1593|   179k|                pi2_src_scratch += in_stride;
 1594|   179k|                m_temp_reg_32 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //f, e
 1595|   179k|                pi2_src_scratch += in_stride;
 1596|   179k|                m_temp_reg_33 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //h, g
 1597|   179k|                pi2_src_scratch += 8;
 1598|   179k|                m_temp_reg_34 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //j, i
 1599|   179k|                pi2_src_scratch -= in_stride;
 1600|   179k|                m_temp_reg_35 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //l, k
 1601|   179k|                pi2_src_scratch -= in_stride;
 1602|   179k|                m_temp_reg_36 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //n, m
 1603|   179k|                pi2_src_scratch -= in_stride;
 1604|   179k|                m_temp_reg_37 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //p, o
 1605|   179k|                pi2_src_scratch += 8;
 1606|       |
 1607|   179k|                m_temp_reg_40 = _mm_unpacklo_epi16(m_temp_reg_30, m_temp_reg_31); //ca3ca2ca1ca0
 1608|   179k|                m_temp_reg_41 = _mm_unpackhi_epi16(m_temp_reg_31, m_temp_reg_30); //bd3bd2bd1bd0
 1609|       |
 1610|   179k|                m_temp_reg_42 = _mm_unpacklo_epi16(m_temp_reg_32, m_temp_reg_33); //ge3ge2ge1ge0
 1611|   179k|                m_temp_reg_43 = _mm_unpackhi_epi16(m_temp_reg_33, m_temp_reg_32); //fh3fh2fh1fh0
 1612|       |
 1613|   179k|                m_temp_reg_44 = _mm_unpacklo_epi16(m_temp_reg_34, m_temp_reg_35); //ki3ki2ki1ki0
 1614|   179k|                m_temp_reg_45 = _mm_unpackhi_epi16(m_temp_reg_35, m_temp_reg_34); //jl3jl2jl1jl0
 1615|       |
 1616|   179k|                m_temp_reg_46 = _mm_unpacklo_epi16(m_temp_reg_36, m_temp_reg_37); //om3om2om1om0
 1617|   179k|                m_temp_reg_47 = _mm_unpackhi_epi16(m_temp_reg_37, m_temp_reg_36); //np3np2np1np0
 1618|       |
 1619|       |
 1620|   179k|                m_temp_reg_30 = _mm_unpacklo_epi32(m_temp_reg_40, m_temp_reg_42); //ge1ca1ge0ca0
 1621|   179k|                m_temp_reg_31 = _mm_unpackhi_epi32(m_temp_reg_40, m_temp_reg_42); //ge3ca3ge2ca2
 1622|       |
 1623|   179k|                m_temp_reg_32 = _mm_unpacklo_epi32(m_temp_reg_44, m_temp_reg_46); //om1ki1om0ki0
 1624|   179k|                m_temp_reg_33 = _mm_unpackhi_epi32(m_temp_reg_44, m_temp_reg_46); //om3ki3om2ki2
 1625|       |
 1626|   179k|                m_temp_reg_34 = _mm_unpacklo_epi32(m_temp_reg_43, m_temp_reg_41); //bd1fh1bd0fh0
 1627|   179k|                m_temp_reg_35 = _mm_unpackhi_epi32(m_temp_reg_43, m_temp_reg_41); //bd3fh3bd2fh2
 1628|       |
 1629|   179k|                m_temp_reg_36 = _mm_unpacklo_epi32(m_temp_reg_47, m_temp_reg_45); //jl1np1jl0np0
 1630|   179k|                m_temp_reg_37 = _mm_unpackhi_epi32(m_temp_reg_47, m_temp_reg_45); //jl3np3jl2np2
 1631|       |
 1632|       |
 1633|   179k|                m_temp_reg_40 = _mm_unpacklo_epi64(m_temp_reg_30, m_temp_reg_32); //omkigeca0
 1634|   179k|                m_temp_reg_41 = _mm_unpackhi_epi64(m_temp_reg_30, m_temp_reg_32); //omkigeca1
 1635|       |
 1636|   179k|                m_temp_reg_42 = _mm_unpacklo_epi64(m_temp_reg_31, m_temp_reg_33); //omkigeca2
 1637|   179k|                m_temp_reg_43 = _mm_unpackhi_epi64(m_temp_reg_31, m_temp_reg_33); //omkigeca3
 1638|       |
 1639|   179k|                m_temp_reg_44 = _mm_unpacklo_epi64(m_temp_reg_36, m_temp_reg_34); //bdfhjlnp0
 1640|   179k|                m_temp_reg_45 = _mm_unpackhi_epi64(m_temp_reg_36, m_temp_reg_34); //bdfhjlnp1
 1641|       |
 1642|   179k|                m_temp_reg_46 = _mm_unpacklo_epi64(m_temp_reg_37, m_temp_reg_35); //bdfhjlnp2
 1643|   179k|                m_temp_reg_47 = _mm_unpackhi_epi64(m_temp_reg_37, m_temp_reg_35); //bdfhjlnp3
 1644|       |
 1645|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1646|   179k|                pi2_dst_scratch += out_stride;
 1647|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_44);
 1648|   179k|                pi2_dst_scratch += out_stride;
 1649|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_41);
 1650|   179k|                pi2_dst_scratch += out_stride;
 1651|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_45);
 1652|   179k|                pi2_dst_scratch += 8;
 1653|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_42);
 1654|   179k|                pi2_dst_scratch -= out_stride;
 1655|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_46);
 1656|   179k|                pi2_dst_scratch -= out_stride;
 1657|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_43);
 1658|   179k|                pi2_dst_scratch -= out_stride;
 1659|   179k|                _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_47);
 1660|   179k|                pi2_dst_scratch += 8;
 1661|   179k|            }
 1662|  89.3k|        }
 1663|  89.3k|    }
 1664|       |
 1665|  69.1k|    if(zero_last8_cols_stg1)
  ------------------
  |  Branch (1665:8): [True: 50.0k, False: 19.1k]
  ------------------
 1666|  50.0k|    {
 1667|  50.0k|        WORD16 *pi2_dst_scratch = (pi2_tmp + 8 * trans_size);
 1668|  50.0k|        WORD32 out_stride = (trans_size << 1);
 1669|  50.0k|        WORD32 j;
 1670|       |
 1671|  50.0k|        m_temp_reg_40 = _mm_setzero_si128();
 1672|   149k|        for(j = 0; j < 2; j++)
  ------------------
  |  Branch (1672:20): [True: 99.9k, False: 50.0k]
  ------------------
 1673|  99.9k|        {
 1674|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1675|  99.9k|            pi2_dst_scratch += out_stride;
 1676|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1677|  99.9k|            pi2_dst_scratch += out_stride;
 1678|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1679|  99.9k|            pi2_dst_scratch += out_stride;
 1680|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1681|  99.9k|            pi2_dst_scratch += 8;
 1682|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1683|  99.9k|            pi2_dst_scratch -= out_stride;
 1684|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1685|  99.9k|            pi2_dst_scratch -= out_stride;
 1686|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1687|  99.9k|            pi2_dst_scratch -= out_stride;
 1688|  99.9k|            _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_40);
 1689|  99.9k|            pi2_dst_scratch += 8;
 1690|  99.9k|        }
 1691|  50.0k|    }
 1692|       |
 1693|       |
 1694|       |
 1695|       |
 1696|       |    /* Stage 2 */
 1697|   207k|    for(i = 0; i < 2; i++)
  ------------------
  |  Branch (1697:16): [True: 138k, False: 69.1k]
  ------------------
 1698|   138k|    {
 1699|   138k|        WORD16 *pi2_src_temp = (i) ? (pi2_tmp + 2 * trans_size) : (WORD16 *)(pi2_tmp);
  ------------------
  |  Branch (1699:32): [True: 69.7k, False: 68.5k]
  ------------------
 1700|   138k|        WORD32 stride = (trans_size);
 1701|   138k|        MEM_ALIGN16 WORD16 temp_array[256];
  ------------------
  |  |  192|   138k|#define MEM_ALIGN16 __attribute__ ((aligned (16)))
  ------------------
 1702|       |
 1703|   138k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   138k|#define IT_SHIFT_STAGE_2 12
  ------------------
 1704|       |
 1705|   138k|        if(zero_last12_rows_stg2)
  ------------------
  |  Branch (1705:12): [True: 64.9k, False: 73.2k]
  ------------------
 1706|  64.9k|        {
 1707|       |            /* eeo */
 1708|       |            /* eeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
 1709|       |            /* eeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
 1710|  64.9k|            {
 1711|  64.9k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src_temp); //0
 1712|       |
 1713|  64.9k|                pi2_src_temp += (stride * 9);
 1714|       |
 1715|  64.9k|                if(!i)
  ------------------
  |  Branch (1715:20): [True: 32.5k, False: 32.3k]
  ------------------
 1716|  32.5k|                {
 1717|  32.5k|                    pi2_src_temp += (stride * 6 + 8);
 1718|  32.5k|                }
 1719|  32.3k|                else
 1720|  32.3k|                {
 1721|  32.3k|                    pi2_src_temp += (stride * 2 + 8);
 1722|  32.3k|                }
 1723|       |
 1724|  64.9k|                pi2_src_temp -= (stride * 9);
 1725|       |
 1726|  64.9k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src_temp); //2
 1727|       |
 1728|  64.9k|                m_temp_reg_20 = _mm_setzero_si128();
 1729|  64.9k|                m_temp_reg_22 = _mm_setzero_si128();
 1730|       |
 1731|  64.9k|                m_temp_reg_21 = _mm_setzero_si128();
 1732|  64.9k|                m_temp_reg_23 = _mm_setzero_si128();
 1733|  64.9k|            }
 1734|       |
 1735|       |            /* eee */
 1736|       |            /* eee[0] stored in m_temp_reg_24 and m_temp_reg_25 */
 1737|       |            /* eee[1] stored in m_temp_reg_26 and m_temp_reg_27 */
 1738|  64.9k|            {
 1739|       |                /* Loading coeff and src for use in next block */
 1740|       |
 1741|       |                /* Loading coeff and src for use in next block */
 1742|  64.9k|                m_temp_reg_77 = _mm_cmpgt_epi16(m_temp_reg_20, m_temp_reg_70);
 1743|       |
 1744|  64.9k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_77); //row 0
 1745|       |
 1746|  64.9k|                m_temp_reg_24 = _mm_slli_epi32(m_temp_reg_0, 6);
 1747|       |
 1748|  64.9k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_77);
 1749|  64.9k|                m_temp_reg_25 = _mm_slli_epi32(m_temp_reg_1, 6);
 1750|       |
 1751|  64.9k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[2][0]); //89 75
 1752|  64.9k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[4][0]); //50 18
 1753|       |
 1754|  64.9k|                m_temp_reg_26 = m_temp_reg_24;
 1755|  64.9k|                m_temp_reg_27 = m_temp_reg_25;
 1756|       |                /*  */
 1757|       |
 1758|  64.9k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_20);
 1759|  64.9k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_20);
 1760|  64.9k|            }
 1761|       |
 1762|       |            /* eo */
 1763|  64.9k|            {
 1764|  64.9k|                WORD16 *pi2_scratch = temp_array;
 1765|  64.9k|                WORD32 out_stride = 8;
 1766|       |
 1767|       |
 1768|       |                /* eo0[0-3] */
 1769|  64.9k|                {
 1770|  64.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1771|       |
 1772|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
 1773|       |
 1774|       |                    /* e[0][0-3] stored in pu1_dst[0] */
 1775|       |                    /* e[7][0-3] stored in pu1_dst[1] */
 1776|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_30);
 1777|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_30);
 1778|       |
 1779|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1780|  64.9k|                    pi2_scratch += out_stride;
 1781|  64.9k|                    _mm_store_si128((__m128i *)(pi2_scratch), m_temp_reg_35);
 1782|  64.9k|                    pi2_scratch += out_stride;
 1783|  64.9k|                }
 1784|       |
 1785|       |                /* eo0[4-7] */
 1786|  64.9k|                {
 1787|  64.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1788|       |
 1789|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
 1790|       |
 1791|       |                    /* e[0][4-7] stored in pu1_dst[2] */
 1792|       |                    /* e[7][4-7] stored in pu1_dst[3] */
 1793|       |
 1794|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_31);
 1795|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_31);
 1796|       |
 1797|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1798|  64.9k|                    pi2_scratch += out_stride;
 1799|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1800|  64.9k|                    pi2_scratch += out_stride;
 1801|       |
 1802|  64.9k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[3][0]); //75 -18
 1803|  64.9k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[5][0]); //89 50
 1804|       |
 1805|  64.9k|                }
 1806|       |
 1807|       |                /* eo1[0-3] */
 1808|  64.9k|                {
 1809|  64.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1810|       |
 1811|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
 1812|       |
 1813|       |                    /* e[1][0-3] stored in pu1_dst[4] */
 1814|       |                    /* e[6][0-3] stored in pu1_dst[5] */
 1815|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_30);
 1816|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_30);
 1817|       |
 1818|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1819|  64.9k|                    pi2_scratch += out_stride;
 1820|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1821|  64.9k|                    pi2_scratch += out_stride;
 1822|  64.9k|                }
 1823|       |
 1824|       |                /* eo1[4-7] */
 1825|  64.9k|                {
 1826|  64.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1827|       |
 1828|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
 1829|       |
 1830|       |                    /* e[1][4-7] stored in pu1_dst[6]*/
 1831|       |                    /* e[6][4-7] stored in pu1_dst[7] */
 1832|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_31);
 1833|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_31);
 1834|       |
 1835|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1836|  64.9k|                    pi2_scratch += out_stride;
 1837|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1838|  64.9k|                    pi2_scratch += out_stride;
 1839|       |
 1840|  64.9k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[8][0]); //50 -89
 1841|       |
 1842|  64.9k|                }
 1843|       |
 1844|       |                /* eo2[0-3] */
 1845|  64.9k|                {
 1846|  64.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1847|       |
 1848|       |                    /* e[2][0-3] stored in pu1_dst[8]*/
 1849|       |                    /* e[5][0-3] stored in pu1_dst[9] */
 1850|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_30);
 1851|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_30);
 1852|       |
 1853|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1854|  64.9k|                    pi2_scratch += out_stride;
 1855|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1856|  64.9k|                    pi2_scratch += out_stride;
 1857|  64.9k|                }
 1858|       |
 1859|       |                /* eo2[4-7] */
 1860|  64.9k|                {
 1861|  64.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1862|       |
 1863|       |                    /* e[2][4-7] stored in pu1_dst[10]*/
 1864|       |                    /* e[5][4-7] stored in pu1_dst[11] */
 1865|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_31);
 1866|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_31);
 1867|       |
 1868|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1869|  64.9k|                    pi2_scratch += out_stride;
 1870|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1871|  64.9k|                    pi2_scratch += out_stride;
 1872|       |
 1873|  64.9k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[9][0]); //18 -50
 1874|  64.9k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[11][0]); //75 -89
 1875|       |
 1876|  64.9k|                }
 1877|       |
 1878|       |                /* eo3[0-3] */
 1879|  64.9k|                {
 1880|  64.9k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1881|       |
 1882|       |                    /* e[3][0-3] stored in pu1_dst[12]*/
 1883|       |                    /* e[4][0-3] stored in pu1_dst[13] */
 1884|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_30);
 1885|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_30);
 1886|       |
 1887|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1888|  64.9k|                    pi2_scratch += out_stride;
 1889|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1890|  64.9k|                    pi2_scratch += out_stride;
 1891|  64.9k|                }
 1892|       |
 1893|       |                /* eo3[4-7] */
 1894|  64.9k|                {
 1895|  64.9k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1896|       |
 1897|       |                    /* e[3][4-7] stored in pu1_dst[14]*/
 1898|       |                    /* e[4][4-7] stored in pu1_dst[15] */
 1899|  64.9k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_31);
 1900|  64.9k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_31);
 1901|       |
 1902|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1903|  64.9k|                    pi2_scratch += out_stride;
 1904|  64.9k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1905|  64.9k|                    pi2_scratch += out_stride;
 1906|  64.9k|                }
 1907|       |
 1908|  64.9k|            }
 1909|  64.9k|        }
 1910|  73.2k|        else if(zero_last8_rows_stg2)
  ------------------
  |  Branch (1910:17): [True: 34.0k, False: 39.2k]
  ------------------
 1911|  34.0k|        {
 1912|       |            /* eeo */
 1913|       |            /* eeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
 1914|       |            /* eeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
 1915|  34.0k|            {
 1916|       |
 1917|  34.0k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_16_even[3][0]); //83
 1918|  34.0k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_16_even[4][0]); //36
 1919|       |
 1920|  34.0k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src_temp); //0
 1921|  34.0k|                pi2_src_temp += (stride);
 1922|  34.0k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_src_temp); //4
 1923|  34.0k|                pi2_src_temp += (stride * 8);
 1924|       |
 1925|  34.0k|                if(!i)
  ------------------
  |  Branch (1925:20): [True: 17.3k, False: 16.7k]
  ------------------
 1926|  17.3k|                {
 1927|  17.3k|                    pi2_src_temp += (stride * 6 + 8);
 1928|  17.3k|                }
 1929|  16.7k|                else
 1930|  16.7k|                {
 1931|  16.7k|                    pi2_src_temp += (stride * 2 + 8);
 1932|  16.7k|                }
 1933|       |
 1934|  34.0k|                pi2_src_temp -= (stride * 8);
 1935|  34.0k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_src_temp); //6
 1936|  34.0k|                pi2_src_temp -= (stride);
 1937|  34.0k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src_temp); //2
 1938|       |
 1939|       |
 1940|  34.0k|                m_temp_reg_76 = _mm_setzero_si128();
 1941|       |
 1942|       |
 1943|  34.0k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[6][0]); //83  36
 1944|  34.0k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[7][0]); //36 -83
 1945|       |
 1946|  34.0k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved LSB's
 1947|  34.0k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved MSB's
 1948|       |
 1949|  34.0k|                m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1950|  34.0k|                m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1951|       |
 1952|  34.0k|                m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1953|  34.0k|                m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1954|  34.0k|            }
 1955|       |
 1956|       |            /* eee */
 1957|       |            /* eee[0] stored in m_temp_reg_24 and m_temp_reg_25 */
 1958|       |            /* eee[1] stored in m_temp_reg_26 and m_temp_reg_27 */
 1959|  34.0k|            {
 1960|       |                /* Loading coeff and src for use in next block */
 1961|       |
 1962|       |
 1963|  34.0k|                m_temp_reg_77 = _mm_cmpgt_epi16(m_temp_reg_76, m_temp_reg_70);
 1964|       |
 1965|  34.0k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_77); //row 0
 1966|       |
 1967|  34.0k|                m_temp_reg_24 = _mm_slli_epi32(m_temp_reg_0, 6);
 1968|  34.0k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_77);
 1969|  34.0k|                m_temp_reg_25 = _mm_slli_epi32(m_temp_reg_1, 6);
 1970|       |
 1971|  34.0k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[2][0]); //89 75
 1972|       |
 1973|  34.0k|                m_temp_reg_26 = m_temp_reg_24;
 1974|  34.0k|                m_temp_reg_27 = m_temp_reg_25;
 1975|       |
 1976|  34.0k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1977|  34.0k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
 1978|  34.0k|            }
 1979|       |
 1980|       |            /* eo */
 1981|  34.0k|            {
 1982|  34.0k|                WORD16 *pi2_scratch = temp_array;
 1983|  34.0k|                WORD32 out_stride = 8;
 1984|       |
 1985|       |
 1986|       |                /* eo0[0-3] */
 1987|  34.0k|                {
 1988|  34.0k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1989|       |
 1990|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
 1991|  34.0k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_20);
 1992|  34.0k|                    m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_20);
 1993|       |
 1994|       |                    /* e[0][0-3] stored in pu1_dst[0] */
 1995|       |                    /* e[7][0-3] stored in pu1_dst[1] */
 1996|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1997|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1998|       |
 1999|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2000|  34.0k|                    pi2_scratch += out_stride;
 2001|  34.0k|                    _mm_store_si128((__m128i *)(pi2_scratch), m_temp_reg_35);
 2002|  34.0k|                    pi2_scratch += out_stride;
 2003|  34.0k|                }
 2004|       |
 2005|       |                /* eo0[4-7] */
 2006|  34.0k|                {
 2007|  34.0k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 2008|       |
 2009|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
 2010|  34.0k|                    m_temp_reg_41 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_21);
 2011|  34.0k|                    m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_21);
 2012|       |
 2013|       |                    /* e[0][4-7] stored in pu1_dst[2] */
 2014|       |                    /* e[7][4-7] stored in pu1_dst[3] */
 2015|       |
 2016|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 2017|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 2018|       |
 2019|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2020|  34.0k|                    pi2_scratch += out_stride;
 2021|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2022|  34.0k|                    pi2_scratch += out_stride;
 2023|       |
 2024|  34.0k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[3][0]); //75 -18
 2025|  34.0k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[5][0]); //89 50
 2026|       |
 2027|  34.0k|                }
 2028|       |
 2029|       |                /* eo1[0-3] */
 2030|  34.0k|                {
 2031|  34.0k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 2032|       |
 2033|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
 2034|  34.0k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_22);
 2035|  34.0k|                    m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_22);
 2036|       |
 2037|       |                    /* e[1][0-3] stored in pu1_dst[4] */
 2038|       |                    /* e[6][0-3] stored in pu1_dst[5] */
 2039|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
 2040|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
 2041|       |
 2042|  34.0k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2043|  34.0k|                    pi2_scratch += out_stride;
 2044|  34.0k|                    _mm_storeu_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2045|  34.0k|                    pi2_scratch += out_stride;
 2046|  34.0k|                }
 2047|       |
 2048|       |                /* eo1[4-7] */
 2049|  34.0k|                {
 2050|  34.0k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 2051|       |
 2052|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
 2053|  34.0k|                    m_temp_reg_43 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_23);
 2054|  34.0k|                    m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_23);
 2055|       |
 2056|       |                    /* e[1][4-7] stored in pu1_dst[6]*/
 2057|       |                    /* e[6][4-7] stored in pu1_dst[7] */
 2058|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_31);
 2059|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_31);
 2060|       |
 2061|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2062|  34.0k|                    pi2_scratch += out_stride;
 2063|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2064|  34.0k|                    pi2_scratch += out_stride;
 2065|       |
 2066|  34.0k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[8][0]); //50 -89
 2067|       |
 2068|  34.0k|                }
 2069|       |
 2070|       |                /* eo2[0-3] */
 2071|  34.0k|                {
 2072|  34.0k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2073|       |
 2074|       |                    /* e[2][0-3] stored in pu1_dst[8]*/
 2075|       |                    /* e[5][0-3] stored in pu1_dst[9] */
 2076|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
 2077|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
 2078|       |
 2079|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2080|  34.0k|                    pi2_scratch += out_stride;
 2081|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2082|  34.0k|                    pi2_scratch += out_stride;
 2083|  34.0k|                }
 2084|       |
 2085|       |                /* eo2[4-7] */
 2086|  34.0k|                {
 2087|  34.0k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 2088|       |
 2089|       |                    /* e[2][4-7] stored in pu1_dst[10]*/
 2090|       |                    /* e[5][4-7] stored in pu1_dst[11] */
 2091|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_31);
 2092|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_31);
 2093|       |
 2094|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2095|  34.0k|                    pi2_scratch += out_stride;
 2096|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2097|  34.0k|                    pi2_scratch += out_stride;
 2098|       |
 2099|  34.0k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[9][0]); //18 -50
 2100|  34.0k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[11][0]); //75 -89
 2101|       |
 2102|  34.0k|                }
 2103|       |
 2104|       |                /* eo3[0-3] */
 2105|  34.0k|                {
 2106|  34.0k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 2107|       |
 2108|       |                    /* e[3][0-3] stored in pu1_dst[12]*/
 2109|       |                    /* e[4][0-3] stored in pu1_dst[13] */
 2110|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
 2111|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
 2112|       |
 2113|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2114|  34.0k|                    pi2_scratch += out_stride;
 2115|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2116|  34.0k|                    pi2_scratch += out_stride;
 2117|  34.0k|                }
 2118|       |
 2119|       |                /* eo3[4-7] */
 2120|  34.0k|                {
 2121|  34.0k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 2122|       |
 2123|       |                    /* e[3][4-7] stored in pu1_dst[14]*/
 2124|       |                    /* e[4][4-7] stored in pu1_dst[15] */
 2125|  34.0k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_31);
 2126|  34.0k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_31);
 2127|       |
 2128|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2129|  34.0k|                    pi2_scratch += out_stride;
 2130|  34.0k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2131|  34.0k|                    pi2_scratch += out_stride;
 2132|  34.0k|                }
 2133|  34.0k|            }
 2134|  34.0k|        }
 2135|       |
 2136|  39.2k|        else
 2137|  39.2k|        {
 2138|       |            /* eeo */
 2139|       |            /* eeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
 2140|       |            /* eeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
 2141|  39.2k|            {
 2142|       |
 2143|       |
 2144|  39.2k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src_temp); //0
 2145|  39.2k|                pi2_src_temp += (stride);
 2146|  39.2k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_src_temp); //4
 2147|  39.2k|                pi2_src_temp += (stride * 7);
 2148|  39.2k|                m_temp_reg_74 = _mm_loadu_si128((__m128i *)pi2_src_temp); //8
 2149|  39.2k|                pi2_src_temp += (stride);
 2150|  39.2k|                m_temp_reg_76 = _mm_loadu_si128((__m128i *)pi2_src_temp); //12
 2151|  39.2k|                if(!i)
  ------------------
  |  Branch (2151:20): [True: 19.6k, False: 19.5k]
  ------------------
 2152|  19.6k|                {
 2153|  19.6k|                    pi2_src_temp += (stride * 6 + 8);
 2154|  19.6k|                }
 2155|  19.5k|                else
 2156|  19.5k|                {
 2157|  19.5k|                    pi2_src_temp += (stride * 2 + 8);
 2158|  19.5k|                }
 2159|  39.2k|                m_temp_reg_77 = _mm_loadu_si128((__m128i *)pi2_src_temp); //14
 2160|  39.2k|                pi2_src_temp -= (stride);
 2161|  39.2k|                m_temp_reg_75 = _mm_loadu_si128((__m128i *)pi2_src_temp); //10
 2162|  39.2k|                pi2_src_temp -= (stride * 7);
 2163|  39.2k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_src_temp); //6
 2164|  39.2k|                pi2_src_temp -= (stride);
 2165|  39.2k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src_temp); //2
 2166|       |
 2167|  39.2k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[6][0]); //83  36
 2168|  39.2k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[7][0]); //36 -83
 2169|       |
 2170|  39.2k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved LSB's
 2171|  39.2k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76); //row 4 and row 12 interleaved MSB's
 2172|       |
 2173|  39.2k|                m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2174|  39.2k|                m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 2175|       |
 2176|  39.2k|                m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2177|  39.2k|                m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 2178|       |
 2179|       |
 2180|  39.2k|            }
 2181|       |
 2182|       |            /* eee */
 2183|       |            /* eee[0] stored in m_temp_reg_24 and m_temp_reg_25 */
 2184|       |            /* eee[1] stored in m_temp_reg_26 and m_temp_reg_27 */
 2185|  39.2k|            {
 2186|       |                /* Loading coeff and src for use in next block */
 2187|  39.2k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[0][0]); //64  64
 2188|  39.2k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[1][0]); //64 -64
 2189|       |
 2190|  39.2k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74); //row 0 and row 8 interleaved LSB's
 2191|  39.2k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_74); //row 0 and row 8 interleaved MSB's
 2192|       |
 2193|  39.2k|                m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 2194|  39.2k|                m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_0, m_coeff4);
 2195|       |
 2196|  39.2k|                m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 2197|  39.2k|                m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);
 2198|       |
 2199|  39.2k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[2][0]); //89 75
 2200|  39.2k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[4][0]); //50 18
 2201|       |
 2202|  39.2k|            }
 2203|       |
 2204|       |            /* eo */
 2205|  39.2k|            {
 2206|  39.2k|                WORD16 *pi2_scratch = temp_array;
 2207|  39.2k|                WORD32 out_stride = 8;
 2208|       |
 2209|       |
 2210|       |
 2211|       |                /* eo0[0-3] */
 2212|  39.2k|                {
 2213|  39.2k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 2214|  39.2k|                    m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
 2215|  39.2k|                    m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 2216|  39.2k|                    m_temp_reg_13 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_77);
 2217|       |
 2218|       |
 2219|  39.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2220|  39.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff2);
 2221|       |
 2222|       |
 2223|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
 2224|  39.2k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_20);
 2225|  39.2k|                    m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_20);
 2226|       |
 2227|       |
 2228|       |                    /* e[0][0-3] stored in pi2_tmp[0][0-7] */
 2229|       |                    /* e[7][0-3] stored in pi2_tmp[0][8-15] */
 2230|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 2231|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 2232|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_32);
 2233|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_32);
 2234|       |
 2235|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2236|  39.2k|                    pi2_scratch += out_stride;
 2237|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2238|  39.2k|                    pi2_scratch += out_stride;
 2239|       |
 2240|       |
 2241|  39.2k|                }
 2242|       |
 2243|       |                /* eo0[4-7] */
 2244|  39.2k|                {
 2245|       |
 2246|  39.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
 2247|  39.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff2);
 2248|       |
 2249|       |                    /* ee[0] and ee[3] stored in m_temp_reg_40-41 & m_temp_reg_46-47 */
 2250|  39.2k|                    m_temp_reg_41 = _mm_add_epi32(m_temp_reg_25, m_temp_reg_21);
 2251|  39.2k|                    m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_25, m_temp_reg_21);
 2252|       |
 2253|       |                    /* e[0][4-7] stored in pi2_tmp[1][0-7] */
 2254|       |                    /* e[7][4-7] stored in pi2_tmp[1][8-15] */
 2255|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 2256|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 2257|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_33);
 2258|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_33);
 2259|       |
 2260|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2261|  39.2k|                    pi2_scratch += out_stride;
 2262|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2263|  39.2k|                    pi2_scratch += out_stride;
 2264|       |
 2265|  39.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[3][0]); //75 -18
 2266|  39.2k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[5][0]); //89 50
 2267|       |
 2268|  39.2k|                }
 2269|       |
 2270|       |                /* eo1[0-3] */
 2271|  39.2k|                {
 2272|  39.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 2273|  39.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff4);
 2274|       |
 2275|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
 2276|  39.2k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_22);
 2277|  39.2k|                    m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_22);
 2278|       |
 2279|       |                    /* e[1][0-3] stored in pi2_tmp[2][0-7] */
 2280|       |                    /* e[6][0-3] stored in pi2_tmp[2][8-15] */
 2281|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
 2282|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
 2283|  39.2k|                    m_temp_reg_34 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_32);
 2284|  39.2k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_32);
 2285|       |
 2286|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2287|  39.2k|                    pi2_scratch += out_stride;
 2288|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2289|  39.2k|                    pi2_scratch += out_stride;
 2290|       |
 2291|  39.2k|                }
 2292|       |
 2293|       |                /* eo1[4-7] */
 2294|  39.2k|                {
 2295|  39.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
 2296|  39.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2297|       |
 2298|       |                    /* ee[1] and ee[2] stored in m_temp_reg_4-43 & m_temp_reg_44-45 */
 2299|  39.2k|                    m_temp_reg_43 = _mm_add_epi32(m_temp_reg_27, m_temp_reg_23);
 2300|  39.2k|                    m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_27, m_temp_reg_23);
 2301|       |
 2302|       |                    /* e[1][4-7] stored in pi2_tmp[3][0-7] */
 2303|       |                    /* e[6][4-7] stored in pi2_tmp[3][8-15] */
 2304|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_31);
 2305|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_31);
 2306|  39.2k|                    m_temp_reg_34 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_33);
 2307|  39.2k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_33);
 2308|       |
 2309|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2310|  39.2k|                    pi2_scratch += out_stride;
 2311|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2312|  39.2k|                    pi2_scratch += out_stride;
 2313|  39.2k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[8][0]); //50 -89
 2314|  39.2k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[10][0]); //18 75
 2315|  39.2k|                }
 2316|       |
 2317|       |                /* eo2[0-3] */
 2318|  39.2k|                {
 2319|  39.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2320|  39.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff2);
 2321|       |
 2322|       |                    /* e[2][0-3] stored in pi2_tmp[4][0-7] */
 2323|       |                    /* e[5][0-3] stored in pi2_tmp[4][8-15] */
 2324|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
 2325|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
 2326|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_32);
 2327|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_32);
 2328|       |
 2329|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2330|  39.2k|                    pi2_scratch += out_stride;
 2331|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2332|  39.2k|                    pi2_scratch += out_stride;
 2333|  39.2k|                }
 2334|       |
 2335|       |                /* eo2[4-7] */
 2336|  39.2k|                {
 2337|  39.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff1);
 2338|  39.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff2);
 2339|       |
 2340|       |                    /* e[2][4-7] stored in pi2_tmp[5][0-7] */
 2341|       |                    /* e[5][4-7] stored in pi2_tmp[5][8-15] */
 2342|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_31);
 2343|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_31);
 2344|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_33);
 2345|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_33);
 2346|       |
 2347|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2348|  39.2k|                    pi2_scratch += out_stride;
 2349|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2350|  39.2k|                    pi2_scratch += out_stride;
 2351|       |
 2352|  39.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[9][0]); //18 -50
 2353|  39.2k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even[11][0]); //75 -89
 2354|       |
 2355|  39.2k|                }
 2356|       |
 2357|       |                /* eo3[0-3] */
 2358|  39.2k|                {
 2359|  39.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 2360|  39.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff4);
 2361|       |
 2362|       |                    /* e[3][0-3] stored in pi2_tmp[6][0-7] */
 2363|       |                    /* e[4][0-3] stored in pi2_tmp[6][8-15] */
 2364|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
 2365|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
 2366|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_32);
 2367|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_32);
 2368|       |
 2369|       |
 2370|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2371|  39.2k|                    pi2_scratch += out_stride;
 2372|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2373|  39.2k|                    pi2_scratch += out_stride;
 2374|  39.2k|                }
 2375|       |
 2376|       |                /* eo3[4-7] */
 2377|  39.2k|                {
 2378|  39.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff3);
 2379|  39.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2380|       |
 2381|       |                    /* e[3][4-7] stored in pi2_tmp[7][0-7] */
 2382|       |                    /* e[4][4-7] stored in pi2_tmp[7][8-15] */
 2383|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_31);
 2384|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_31);
 2385|  39.2k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_33);
 2386|  39.2k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_33);
 2387|       |
 2388|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 2389|  39.2k|                    pi2_scratch += out_stride;
 2390|  39.2k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 2391|  39.2k|                    pi2_scratch += out_stride;
 2392|  39.2k|                }
 2393|  39.2k|            }
 2394|  39.2k|        }
 2395|       |
 2396|   138k|        if(zero_last12_rows_stg2)
  ------------------
  |  Branch (2396:12): [True: 65.6k, False: 72.6k]
  ------------------
 2397|  65.6k|        {
 2398|       |            /* o & stage 2 pre-transposed out */
 2399|  65.6k|            {
 2400|  65.6k|                WORD32 j;
 2401|  65.6k|                WORD16 *pi2_src_scratch = temp_array;
 2402|  65.6k|                WORD16 *pi2_dst_scratch = (i) ? (pi2_tmp + 8) : (pi2_tmp);
  ------------------
  |  Branch (2402:43): [True: 32.9k, False: 32.6k]
  ------------------
 2403|  65.6k|                WORD32 out_stride = (trans_size);
 2404|  65.6k|                WORD32 in_stride = (8) * 4;
 2405|       |
 2406|  65.6k|                pi2_src_temp = pi2_tmp + (stride * 4) + i * (stride * 2);
 2407|       |
 2408|  65.6k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src_temp); //1
 2409|       |
 2410|  65.6k|                pi2_src_temp += (stride * 9);
 2411|       |
 2412|  65.6k|                if(0 == i)
  ------------------
  |  Branch (2412:20): [True: 32.8k, False: 32.7k]
  ------------------
 2413|  32.8k|                {
 2414|  32.8k|                    pi2_src_temp -= (stride * 2 - 8);
 2415|  32.8k|                }
 2416|  32.7k|                else
 2417|  32.7k|                {
 2418|  32.7k|                    pi2_src_temp -= (stride * 6 - 8);
 2419|  32.7k|                }
 2420|  65.6k|                pi2_src_temp -= (stride * 9);
 2421|       |
 2422|  65.6k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src_temp); //3
 2423|       |
 2424|       |
 2425|   196k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2425:28): [True: 131k, False: 65.6k]
  ------------------
 2426|   131k|                {
 2427|   131k|                    if(j)
  ------------------
  |  Branch (2427:24): [True: 65.4k, False: 65.5k]
  ------------------
 2428|  65.4k|                    {
 2429|  65.4k|                        m_temp_reg_10 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 H8B
 2430|  65.4k|                    }
 2431|  65.5k|                    else
 2432|  65.5k|                    {
 2433|  65.5k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 L8B
 2434|  65.5k|                    }
 2435|   131k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[0][0]); //90 87
 2436|       |
 2437|       |                    /* o0[0-3] */
 2438|   131k|                    {
 2439|   131k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2440|       |
 2441|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2442|   131k|                        pi2_src_scratch += in_stride;
 2443|       |
 2444|   131k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[4][0]); //87 57
 2445|       |
 2446|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2447|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2448|       |
 2449|       |
 2450|   131k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2451|   131k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2452|   131k|                        m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x00);
 2453|       |
 2454|       |
 2455|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2456|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2457|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2458|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2459|       |
 2460|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2461|       |
 2462|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2463|   131k|                        pi2_dst_scratch += out_stride;
 2464|   131k|                    }
 2465|       |
 2466|       |                    /* o1[0-3] */
 2467|   131k|                    {
 2468|   131k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2469|       |
 2470|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2471|   131k|                        pi2_src_scratch += in_stride;
 2472|       |
 2473|   131k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[8][0]); //80 9
 2474|       |
 2475|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2476|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2477|       |
 2478|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2479|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2480|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2481|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2482|       |
 2483|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2484|       |
 2485|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2486|   131k|                        pi2_dst_scratch += ((!i) * out_stride + 8);
 2487|   131k|                    }
 2488|       |
 2489|       |                    /* o2[0-3] */
 2490|   131k|                    {
 2491|   131k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2492|       |
 2493|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2494|   131k|                        pi2_src_scratch += in_stride;
 2495|       |
 2496|   131k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[12][0]); //70 -43
 2497|       |
 2498|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2499|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2500|       |
 2501|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2502|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2503|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2504|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2505|       |
 2506|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2507|       |
 2508|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2509|   131k|                        pi2_dst_scratch += out_stride;
 2510|   131k|                    }
 2511|       |
 2512|       |                    /* o3[0-3] */
 2513|   131k|                    {
 2514|   131k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2515|       |
 2516|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2517|   131k|                        pi2_src_scratch += 8;
 2518|       |
 2519|   131k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[16][0]); //57 -80
 2520|       |
 2521|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2522|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2523|       |
 2524|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2525|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2526|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2527|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2528|       |
 2529|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2530|       |
 2531|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2532|   131k|                        pi2_dst_scratch += (i * out_stride + 8);
 2533|   131k|                    }
 2534|       |
 2535|       |                    /* o4[0-3] */
 2536|   131k|                    {
 2537|   131k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2538|       |
 2539|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2540|   131k|                        pi2_src_scratch -= in_stride;
 2541|       |
 2542|   131k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[20][0]); //43 -90
 2543|       |
 2544|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2545|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2546|       |
 2547|       |
 2548|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2549|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2550|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2551|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2552|       |
 2553|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2554|       |
 2555|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2556|   131k|                        pi2_dst_scratch += out_stride;
 2557|   131k|                    }
 2558|       |
 2559|       |                    /* o5[0-3] */
 2560|   131k|                    {
 2561|   131k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2562|       |
 2563|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2564|   131k|                        pi2_src_scratch -= in_stride;
 2565|       |
 2566|   131k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[24][0]); //25 -70
 2567|       |
 2568|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2569|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2570|       |
 2571|       |
 2572|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2573|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2574|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2575|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2576|       |
 2577|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2578|       |
 2579|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2580|   131k|                        pi2_dst_scratch += ((!i) * out_stride + 8);
 2581|   131k|                    }
 2582|       |
 2583|       |                    /* o6[0-3] */
 2584|   131k|                    {
 2585|   131k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2586|       |
 2587|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2588|   131k|                        pi2_src_scratch -= in_stride;
 2589|       |
 2590|   131k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[28][0]); //9 -25
 2591|       |
 2592|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2593|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2594|       |
 2595|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2596|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2597|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2598|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2599|       |
 2600|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2601|       |
 2602|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2603|   131k|                        pi2_dst_scratch += out_stride;
 2604|   131k|                    }
 2605|       |
 2606|       |                    /* o7[0-3] */
 2607|   131k|                    {
 2608|   131k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2609|       |
 2610|   131k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2611|   131k|                        pi2_src_scratch += 8;
 2612|       |
 2613|   131k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2614|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2615|       |
 2616|   131k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2617|   131k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2618|   131k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2619|   131k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2620|       |
 2621|   131k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2622|       |
 2623|   131k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2624|   131k|                        pi2_dst_scratch += (i * out_stride + 8);
 2625|   131k|                    }
 2626|       |
 2627|       |
 2628|   131k|                }
 2629|  65.6k|            }
 2630|  65.6k|        }
 2631|  72.6k|        else if(zero_last8_rows_stg2)
  ------------------
  |  Branch (2631:17): [True: 34.7k, False: 37.8k]
  ------------------
 2632|  34.7k|        {
 2633|       |            /* o & stage 2 pre-transposed out */
 2634|  34.7k|            {
 2635|  34.7k|                WORD32 j;
 2636|  34.7k|                WORD16 *pi2_src_scratch = temp_array;
 2637|  34.7k|                WORD16 *pi2_dst_scratch = (i) ? (pi2_tmp + 8) : (pi2_tmp);
  ------------------
  |  Branch (2637:43): [True: 17.6k, False: 17.1k]
  ------------------
 2638|  34.7k|                WORD32 out_stride = (trans_size);
 2639|  34.7k|                WORD32 in_stride = (8) * 4;
 2640|       |
 2641|  34.7k|                pi2_src_temp = pi2_tmp + (stride * 4) + i * (stride * 2);
 2642|       |
 2643|       |
 2644|  34.7k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src_temp); //1
 2645|  34.7k|                pi2_src_temp += (stride);
 2646|  34.7k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_src_temp); //5
 2647|  34.7k|                pi2_src_temp += (stride * 8);
 2648|       |
 2649|  34.7k|                if(0 == i)
  ------------------
  |  Branch (2649:20): [True: 17.6k, False: 17.1k]
  ------------------
 2650|  17.6k|                {
 2651|  17.6k|                    pi2_src_temp -= (stride * 2 - 8);
 2652|  17.6k|                }
 2653|  17.1k|                else
 2654|  17.1k|                {
 2655|  17.1k|                    pi2_src_temp -= (stride * 6 - 8);
 2656|  17.1k|                }
 2657|       |
 2658|  34.7k|                pi2_src_temp -= (stride * 8);
 2659|  34.7k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_src_temp); //7
 2660|  34.7k|                pi2_src_temp -= (stride);
 2661|  34.7k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src_temp); //3
 2662|       |
 2663|       |
 2664|   103k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2664:28): [True: 69.1k, False: 34.7k]
  ------------------
 2665|  69.1k|                {
 2666|  69.1k|                    if(j)
  ------------------
  |  Branch (2666:24): [True: 34.5k, False: 34.6k]
  ------------------
 2667|  34.5k|                    {
 2668|  34.5k|                        m_temp_reg_10 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 H8B
 2669|  34.5k|                        m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 H8B
 2670|  34.5k|                    }
 2671|  34.6k|                    else
 2672|  34.6k|                    {
 2673|  34.6k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 L8B
 2674|  34.6k|                        m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 L8B
 2675|  34.6k|                    }
 2676|  69.1k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[0][0]); //90 87
 2677|  69.1k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[1][0]); //80 70
 2678|       |
 2679|       |                    /* o0[0-3] */
 2680|  69.1k|                    {
 2681|  69.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2682|  69.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2683|       |
 2684|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2685|  69.1k|                        pi2_src_scratch += in_stride;
 2686|       |
 2687|  69.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[4][0]); //87 57
 2688|  69.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[5][0]); //9 -43
 2689|       |
 2690|  69.1k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2691|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2692|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2693|       |
 2694|       |
 2695|  69.1k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2696|  69.1k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2697|       |
 2698|  69.1k|                        m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x00);
 2699|       |
 2700|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2701|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2702|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2703|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2704|       |
 2705|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2706|       |
 2707|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2708|  69.1k|                        pi2_dst_scratch += out_stride;
 2709|  69.1k|                    }
 2710|       |
 2711|       |                    /* o1[0-3] */
 2712|  69.1k|                    {
 2713|  69.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2714|  69.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 2715|       |
 2716|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2717|  69.1k|                        pi2_src_scratch += in_stride;
 2718|       |
 2719|  69.1k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[8][0]); //80 9
 2720|  69.1k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[9][0]); //70 87
 2721|       |
 2722|  69.1k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 2723|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2724|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2725|       |
 2726|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2727|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2728|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2729|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2730|       |
 2731|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2732|       |
 2733|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2734|  69.1k|                        pi2_dst_scratch += ((!i) * out_stride + 8);
 2735|  69.1k|                    }
 2736|       |
 2737|       |                    /* o2[0-3] */
 2738|  69.1k|                    {
 2739|  69.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2740|  69.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2741|       |
 2742|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2743|  69.1k|                        pi2_src_scratch += in_stride;
 2744|       |
 2745|  69.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[12][0]); //70 -43
 2746|  69.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[13][0]); //87 -9
 2747|       |
 2748|  69.1k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 2749|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2750|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2751|       |
 2752|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2753|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2754|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2755|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2756|       |
 2757|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2758|       |
 2759|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2760|  69.1k|                        pi2_dst_scratch += out_stride;
 2761|  69.1k|                    }
 2762|       |
 2763|       |                    /* o3[0-3] */
 2764|  69.1k|                    {
 2765|  69.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2766|  69.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 2767|       |
 2768|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2769|  69.1k|                        pi2_src_scratch += 8;
 2770|       |
 2771|  69.1k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[16][0]); //57 -80
 2772|  69.1k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[17][0]); //25 -90
 2773|       |
 2774|  69.1k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_25);
 2775|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2776|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2777|       |
 2778|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2779|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2780|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2781|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2782|       |
 2783|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2784|       |
 2785|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2786|  69.1k|                        pi2_dst_scratch += (i * out_stride + 8);
 2787|  69.1k|                    }
 2788|       |
 2789|       |                    /* o4[0-3] */
 2790|  69.1k|                    {
 2791|  69.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2792|  69.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2793|       |
 2794|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2795|  69.1k|                        pi2_src_scratch -= in_stride;
 2796|       |
 2797|  69.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[20][0]); //43 -90
 2798|  69.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[21][0]); //57 25
 2799|       |
 2800|  69.1k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 2801|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2802|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2803|       |
 2804|       |
 2805|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2806|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2807|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2808|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2809|       |
 2810|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2811|       |
 2812|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2813|  69.1k|                        pi2_dst_scratch += out_stride;
 2814|  69.1k|                    }
 2815|       |
 2816|       |                    /* o5[0-3] */
 2817|  69.1k|                    {
 2818|  69.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2819|  69.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 2820|       |
 2821|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2822|  69.1k|                        pi2_src_scratch -= in_stride;
 2823|       |
 2824|  69.1k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[24][0]); //25 -70
 2825|  69.1k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[25][0]); //90 -80
 2826|       |
 2827|  69.1k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 2828|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2829|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2830|       |
 2831|       |
 2832|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2833|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2834|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2835|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2836|       |
 2837|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2838|       |
 2839|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2840|  69.1k|                        pi2_dst_scratch += ((!i) * out_stride + 8);
 2841|  69.1k|                    }
 2842|       |
 2843|       |                    /* o6[0-3] */
 2844|  69.1k|                    {
 2845|  69.1k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2846|  69.1k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2847|       |
 2848|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2849|  69.1k|                        pi2_src_scratch -= in_stride;
 2850|       |
 2851|  69.1k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[28][0]); //9 -25
 2852|  69.1k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[29][0]); //43 -57
 2853|       |
 2854|  69.1k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2855|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2856|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2857|       |
 2858|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2859|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2860|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2861|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2862|       |
 2863|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2864|       |
 2865|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2866|  69.1k|                        pi2_dst_scratch += out_stride;
 2867|  69.1k|                    }
 2868|       |
 2869|       |                    /* o7[0-3] */
 2870|  69.1k|                    {
 2871|  69.1k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2872|  69.1k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 2873|       |
 2874|  69.1k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2875|  69.1k|                        pi2_src_scratch += 8;
 2876|       |
 2877|  69.1k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 2878|  69.1k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 2879|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 2880|       |
 2881|  69.1k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2882|  69.1k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2883|  69.1k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2884|  69.1k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2885|       |
 2886|  69.1k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2887|       |
 2888|  69.1k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2889|  69.1k|                        pi2_dst_scratch += (i * out_stride + 8);
 2890|  69.1k|                    }
 2891|  69.1k|                }
 2892|  34.7k|            }
 2893|  34.7k|        }
 2894|  37.8k|        else
 2895|  37.8k|        {
 2896|       |            /* o & stage 2 pre-transposed out */
 2897|  37.8k|            {
 2898|  37.8k|                WORD32 j;
 2899|  37.8k|                WORD16 *pi2_src_scratch = temp_array;
 2900|  37.8k|                WORD16 *pi2_dst_scratch = (i) ? (pi2_tmp + 8) : (pi2_tmp);
  ------------------
  |  Branch (2900:43): [True: 19.7k, False: 18.1k]
  ------------------
 2901|  37.8k|                WORD32 out_stride = (trans_size);
 2902|  37.8k|                WORD32 in_stride = (8) * 4;
 2903|       |
 2904|  37.8k|                pi2_src_temp = pi2_tmp + (stride * 4) + i * (stride * 2);
 2905|       |
 2906|       |
 2907|  37.8k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src_temp); //1
 2908|  37.8k|                pi2_src_temp += (stride);
 2909|  37.8k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_src_temp); //5
 2910|  37.8k|                pi2_src_temp += (stride * 7);
 2911|  37.8k|                m_temp_reg_74 = _mm_loadu_si128((__m128i *)pi2_src_temp); //9
 2912|  37.8k|                pi2_src_temp += (stride);
 2913|  37.8k|                m_temp_reg_76 = _mm_loadu_si128((__m128i *)pi2_src_temp); //13
 2914|  37.8k|                if(0 == i)
  ------------------
  |  Branch (2914:20): [True: 19.7k, False: 18.1k]
  ------------------
 2915|  19.7k|                {
 2916|  19.7k|                    pi2_src_temp -= (stride * 2 - 8);
 2917|  19.7k|                }
 2918|  18.1k|                else
 2919|  18.1k|                {
 2920|  18.1k|                    pi2_src_temp -= (stride * 6 - 8);
 2921|  18.1k|                }
 2922|  37.8k|                m_temp_reg_77 = _mm_loadu_si128((__m128i *)pi2_src_temp); //15
 2923|  37.8k|                pi2_src_temp -= (stride);
 2924|  37.8k|                m_temp_reg_75 = _mm_loadu_si128((__m128i *)pi2_src_temp); //11
 2925|  37.8k|                pi2_src_temp -= (stride * 7);
 2926|  37.8k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_src_temp); //7
 2927|  37.8k|                pi2_src_temp -= (stride);
 2928|  37.8k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src_temp); //3
 2929|       |
 2930|       |
 2931|   116k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2931:28): [True: 78.7k, False: 37.8k]
  ------------------
 2932|  78.7k|                {
 2933|       |
 2934|  78.7k|                    if(j) //H8B= higher 8 bytes L8B lower 8 bytes
  ------------------
  |  Branch (2934:24): [True: 39.3k, False: 39.3k]
  ------------------
 2935|  39.3k|                    {
 2936|  39.3k|                        m_temp_reg_10 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 H8B
 2937|  39.3k|                        m_temp_reg_11 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 H8B
 2938|  39.3k|                        m_temp_reg_12 = _mm_unpackhi_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 H8B
 2939|  39.3k|                        m_temp_reg_13 = _mm_unpackhi_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 H8B
 2940|  39.3k|                    }
 2941|  39.3k|                    else
 2942|  39.3k|                    {
 2943|  39.3k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 L8B
 2944|  39.3k|                        m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 L8B
 2945|  39.3k|                        m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 L8B
 2946|  39.3k|                        m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 L8B
 2947|  39.3k|                    }
 2948|  78.7k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[0][0]); //90 87
 2949|  78.7k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[1][0]); //80 70
 2950|  78.7k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[2][0]); //57 43
 2951|  78.7k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[3][0]); //25  9
 2952|       |
 2953|       |
 2954|       |                    /* o0[0-3] */
 2955|  78.7k|                    {
 2956|  78.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2957|  78.7k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2958|  78.7k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 2959|  78.7k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2960|       |
 2961|       |
 2962|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2963|  78.7k|                        pi2_src_scratch += in_stride;
 2964|       |
 2965|  78.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[4][0]); //87 57
 2966|  78.7k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[5][0]); //9 -43
 2967|  78.7k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[6][0]); //80 90
 2968|  78.7k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[7][0]); //70 25
 2969|       |
 2970|  78.7k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2971|  78.7k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 2972|  78.7k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 2973|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2974|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2975|       |
 2976|  78.7k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2977|  78.7k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2978|  78.7k|                        m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x00);
 2979|       |
 2980|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2981|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2982|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2983|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2984|       |
 2985|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2986|       |
 2987|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2988|  78.7k|                        pi2_dst_scratch += out_stride;
 2989|  78.7k|                    }
 2990|       |
 2991|       |                    /* o1[0-3] */
 2992|  78.7k|                    {
 2993|  78.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 2994|  78.7k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 2995|  78.7k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 2996|  78.7k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 2997|       |
 2998|       |
 2999|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3000|  78.7k|                        pi2_src_scratch += in_stride;
 3001|       |
 3002|  78.7k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[8][0]); //80 9
 3003|  78.7k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[9][0]); //70 87
 3004|  78.7k|                        m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[10][0]); //25 -57
 3005|  78.7k|                        m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[11][0]); //90 43
 3006|       |
 3007|  78.7k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 3008|  78.7k|                        m_temp_reg_26 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_27);
 3009|  78.7k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_26);
 3010|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 3011|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 3012|       |
 3013|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3014|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3015|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3016|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3017|       |
 3018|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3019|       |
 3020|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3021|  78.7k|                        pi2_dst_scratch += ((!i) * out_stride + 8);
 3022|  78.7k|                    }
 3023|       |
 3024|       |                    /* o2[0-3] */
 3025|  78.7k|                    {
 3026|  78.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3027|  78.7k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3028|  78.7k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3029|  78.7k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3030|       |
 3031|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3032|  78.7k|                        pi2_src_scratch += in_stride;
 3033|       |
 3034|  78.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[12][0]); //70 -43
 3035|  78.7k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[13][0]); //87 -9
 3036|  78.7k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[14][0]); //90 25
 3037|  78.7k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[15][0]); //80 57
 3038|       |
 3039|  78.7k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 3040|  78.7k|                        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_23);
 3041|  78.7k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_22);
 3042|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3043|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3044|       |
 3045|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3046|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3047|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3048|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3049|       |
 3050|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3051|       |
 3052|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3053|  78.7k|                        pi2_dst_scratch += out_stride;
 3054|  78.7k|                    }
 3055|       |
 3056|       |                    /* o3[0-3] */
 3057|  78.7k|                    {
 3058|  78.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 3059|  78.7k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 3060|  78.7k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 3061|  78.7k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 3062|       |
 3063|       |
 3064|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3065|  78.7k|                        pi2_src_scratch += 8;
 3066|       |
 3067|  78.7k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[16][0]); //57 -80
 3068|  78.7k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[17][0]); //25 -90
 3069|  78.7k|                        m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[18][0]); //9 87
 3070|  78.7k|                        m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[19][0]); //43 70
 3071|       |
 3072|  78.7k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_25);
 3073|  78.7k|                        m_temp_reg_26 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_27);
 3074|  78.7k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_26);
 3075|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 3076|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 3077|       |
 3078|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3079|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3080|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3081|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3082|       |
 3083|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3084|       |
 3085|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3086|  78.7k|                        pi2_dst_scratch += (i * out_stride + 8);
 3087|  78.7k|                    }
 3088|       |
 3089|       |                    /* o4[0-3] */
 3090|  78.7k|                    {
 3091|  78.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3092|  78.7k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3093|  78.7k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3094|  78.7k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3095|       |
 3096|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3097|  78.7k|                        pi2_src_scratch -= in_stride;
 3098|       |
 3099|  78.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[20][0]); //43 -90
 3100|  78.7k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[21][0]); //57 25
 3101|  78.7k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[22][0]); //87 -70
 3102|  78.7k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[23][0]); //9 -80
 3103|       |
 3104|  78.7k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
 3105|  78.7k|                        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_23);
 3106|  78.7k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_22);
 3107|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3108|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3109|       |
 3110|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3111|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3112|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3113|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3114|       |
 3115|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3116|       |
 3117|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3118|  78.7k|                        pi2_dst_scratch += out_stride;
 3119|  78.7k|                    }
 3120|       |
 3121|       |                    /* o5[0-3] */
 3122|  78.7k|                    {
 3123|  78.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 3124|  78.7k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 3125|  78.7k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 3126|  78.7k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 3127|       |
 3128|       |
 3129|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3130|  78.7k|                        pi2_src_scratch -= in_stride;
 3131|       |
 3132|  78.7k|                        m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[24][0]); //25 -70
 3133|  78.7k|                        m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[25][0]); //90 -80
 3134|  78.7k|                        m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[26][0]); //43 9
 3135|  78.7k|                        m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[27][0]); //57 -87
 3136|       |
 3137|  78.7k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 3138|  78.7k|                        m_temp_reg_26 = _mm_sub_epi32(m_temp_reg_26, m_temp_reg_27);
 3139|  78.7k|                        m_temp_reg_24 = _mm_sub_epi32(m_temp_reg_24, m_temp_reg_26);
 3140|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 3141|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 3142|       |
 3143|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3144|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3145|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3146|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3147|       |
 3148|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3149|       |
 3150|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3151|  78.7k|                        pi2_dst_scratch += ((!i) * out_stride + 8);
 3152|  78.7k|                    }
 3153|       |
 3154|       |                    /* o6[0-3] */
 3155|  78.7k|                    {
 3156|  78.7k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3157|  78.7k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3158|  78.7k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3159|  78.7k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3160|       |
 3161|       |
 3162|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3163|  78.7k|                        pi2_src_scratch -= in_stride;
 3164|       |
 3165|  78.7k|                        m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[28][0]); //9 -25
 3166|  78.7k|                        m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[29][0]); //43 -57
 3167|  78.7k|                        m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[30][0]); //70 -80
 3168|  78.7k|                        m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_odd[31][0]); //87 -90
 3169|       |
 3170|       |
 3171|  78.7k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3172|  78.7k|                        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_23);
 3173|  78.7k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3174|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3175|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3176|       |
 3177|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3178|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3179|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3180|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3181|       |
 3182|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3183|       |
 3184|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3185|  78.7k|                        pi2_dst_scratch += out_stride;
 3186|  78.7k|                    }
 3187|       |
 3188|       |                    /* o7[0-3] */
 3189|  78.7k|                    {
 3190|  78.7k|                        m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 3191|  78.7k|                        m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_11, m_coeff6);
 3192|  78.7k|                        m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_12, m_coeff7);
 3193|  78.7k|                        m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_13, m_coeff8);
 3194|       |
 3195|  78.7k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3196|  78.7k|                        pi2_src_scratch += 8;
 3197|       |
 3198|  78.7k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_25);
 3199|  78.7k|                        m_temp_reg_26 = _mm_add_epi32(m_temp_reg_26, m_temp_reg_27);
 3200|  78.7k|                        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_24, m_temp_reg_26);
 3201|  78.7k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_24);
 3202|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_24);
 3203|       |
 3204|       |
 3205|  78.7k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3206|  78.7k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3207|  78.7k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3208|  78.7k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3209|       |
 3210|  78.7k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3211|       |
 3212|  78.7k|                        _mm_storeu_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3213|  78.7k|                        pi2_dst_scratch += (i * out_stride + 8);
 3214|  78.7k|                    }
 3215|       |
 3216|  78.7k|                }
 3217|  37.8k|            }
 3218|  37.8k|        }
 3219|   138k|    }
 3220|       |
 3221|       |    /* Transpose */
 3222|  69.1k|    {
 3223|  69.1k|        WORD16 *pi2_src_scratch;
 3224|  69.1k|        UWORD8 *pu1_pred_temp = pu1_pred;
 3225|  69.1k|        WORD32 out_stride = dst_strd;
 3226|  69.1k|        WORD32 in_stride = trans_size;
 3227|  69.1k|        WORD32 j;
 3228|  69.1k|        m_temp_reg_1 = _mm_setzero_si128();
 3229|   209k|        for(i = 0; i < 2; i++)
  ------------------
  |  Branch (3229:20): [True: 140k, False: 69.1k]
  ------------------
 3230|   140k|        {
 3231|   140k|            pi2_src_scratch = (i) ? (pi2_tmp + 8) : pi2_tmp;
  ------------------
  |  Branch (3231:31): [True: 70.2k, False: 70.0k]
  ------------------
 3232|       |
 3233|   421k|            for(j = 0; j < 2; j++)
  ------------------
  |  Branch (3233:24): [True: 280k, False: 140k]
  ------------------
 3234|   280k|            {
 3235|   280k|                m_temp_reg_30 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //b, a
 3236|   280k|                pi2_src_scratch += in_stride;
 3237|   280k|                m_temp_reg_31 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //d, c
 3238|   280k|                pi2_src_scratch += ((!i) * in_stride + 8);
 3239|   280k|                m_temp_reg_32 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //f, e
 3240|   280k|                pi2_src_scratch += (in_stride);
 3241|   280k|                m_temp_reg_33 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //h, g
 3242|   280k|                pi2_src_scratch += (i * in_stride + 8);
 3243|   280k|                m_temp_reg_34 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //j, i
 3244|   280k|                pi2_src_scratch += in_stride;
 3245|   280k|                m_temp_reg_35 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //l, k
 3246|   280k|                pi2_src_scratch += ((!i) * in_stride + 8);
 3247|   280k|                m_temp_reg_36 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //n, m
 3248|   280k|                pi2_src_scratch += in_stride;
 3249|   280k|                m_temp_reg_37 = _mm_loadu_si128((__m128i *)pi2_src_scratch); //p, o
 3250|   280k|                pi2_src_scratch += (i * in_stride + 8);
 3251|       |
 3252|   280k|                m_temp_reg_40 = _mm_unpacklo_epi16(m_temp_reg_30, m_temp_reg_31); //ca3ca2ca1ca0
 3253|   280k|                m_temp_reg_41 = _mm_unpackhi_epi16(m_temp_reg_31, m_temp_reg_30); //bd3bd2bd1bd0
 3254|       |
 3255|   280k|                m_temp_reg_42 = _mm_unpacklo_epi16(m_temp_reg_32, m_temp_reg_33); //ge3ge2ge1ge0
 3256|   280k|                m_temp_reg_43 = _mm_unpackhi_epi16(m_temp_reg_33, m_temp_reg_32); //fh3fh2fh1fh0
 3257|       |
 3258|   280k|                m_temp_reg_44 = _mm_unpacklo_epi16(m_temp_reg_34, m_temp_reg_35); //ki3ki2ki1ki0
 3259|   280k|                m_temp_reg_45 = _mm_unpackhi_epi16(m_temp_reg_35, m_temp_reg_34); //jl3jl2jl1jl0
 3260|       |
 3261|   280k|                m_temp_reg_46 = _mm_unpacklo_epi16(m_temp_reg_36, m_temp_reg_37); //om3om2om1om0
 3262|   280k|                m_temp_reg_47 = _mm_unpackhi_epi16(m_temp_reg_37, m_temp_reg_36); //np3np2np1np0
 3263|       |
 3264|       |
 3265|   280k|                m_temp_reg_30 = _mm_unpacklo_epi32(m_temp_reg_40, m_temp_reg_42); //ge1ca1ge0ca0
 3266|   280k|                m_temp_reg_31 = _mm_unpackhi_epi32(m_temp_reg_40, m_temp_reg_42); //ge3ca3ge2ca2
 3267|       |
 3268|   280k|                m_temp_reg_32 = _mm_unpacklo_epi32(m_temp_reg_44, m_temp_reg_46); //om1ki1om0ki0
 3269|   280k|                m_temp_reg_33 = _mm_unpackhi_epi32(m_temp_reg_44, m_temp_reg_46); //om3ki3om2ki2
 3270|       |
 3271|   280k|                m_temp_reg_34 = _mm_unpacklo_epi32(m_temp_reg_43, m_temp_reg_41); //bd1fh1bd0fh0
 3272|   280k|                m_temp_reg_35 = _mm_unpackhi_epi32(m_temp_reg_43, m_temp_reg_41); //bd3fh3bd2fh2
 3273|       |
 3274|   280k|                m_temp_reg_36 = _mm_unpacklo_epi32(m_temp_reg_47, m_temp_reg_45); //jl1np1jl0np0
 3275|   280k|                m_temp_reg_37 = _mm_unpackhi_epi32(m_temp_reg_47, m_temp_reg_45); //jl3np3jl2np2
 3276|       |
 3277|       |
 3278|   280k|                m_temp_reg_40 = _mm_unpacklo_epi64(m_temp_reg_30, m_temp_reg_32); //omkigeca0
 3279|   280k|                m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred_temp);
 3280|       |
 3281|   280k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, m_temp_reg_1);
 3282|   280k|                m_temp_reg_12 = _mm_unpackhi_epi8(m_temp_reg_20, m_temp_reg_1);
 3283|       |
 3284|   280k|                m_temp_reg_44 = _mm_unpacklo_epi64(m_temp_reg_36, m_temp_reg_34); //bdfhjlnp0
 3285|   280k|                m_temp_reg_40 = _mm_add_epi16(m_temp_reg_40, m_temp_reg_0);
 3286|   280k|                m_temp_reg_44 = _mm_add_epi16(m_temp_reg_44, m_temp_reg_12);
 3287|       |
 3288|   280k|                m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 3289|   280k|                _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 3290|   280k|                pu1_dst += out_stride;
 3291|   280k|                pu1_pred_temp += pred_strd;
 3292|       |
 3293|   280k|                m_temp_reg_41 = _mm_unpackhi_epi64(m_temp_reg_30, m_temp_reg_32); //omkigeca1
 3294|   280k|                m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred_temp);
 3295|       |
 3296|   280k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, m_temp_reg_1);
 3297|   280k|                m_temp_reg_12 = _mm_unpackhi_epi8(m_temp_reg_20, m_temp_reg_1);
 3298|       |
 3299|   280k|                m_temp_reg_45 = _mm_unpackhi_epi64(m_temp_reg_36, m_temp_reg_34); //bdfhjlnp0
 3300|   280k|                m_temp_reg_41 = _mm_add_epi16(m_temp_reg_41, m_temp_reg_0);
 3301|   280k|                m_temp_reg_45 = _mm_add_epi16(m_temp_reg_45, m_temp_reg_12);
 3302|       |
 3303|   280k|                m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_41, m_temp_reg_45);
 3304|   280k|                _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 3305|   280k|                pu1_dst += out_stride;
 3306|   280k|                pu1_pred_temp += pred_strd;
 3307|       |
 3308|   280k|                m_temp_reg_42 = _mm_unpacklo_epi64(m_temp_reg_31, m_temp_reg_33); //omkigeca2
 3309|   280k|                m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred_temp);
 3310|       |
 3311|   280k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, m_temp_reg_1);
 3312|   280k|                m_temp_reg_12 = _mm_unpackhi_epi8(m_temp_reg_20, m_temp_reg_1);
 3313|       |
 3314|   280k|                m_temp_reg_46 = _mm_unpacklo_epi64(m_temp_reg_37, m_temp_reg_35); //bdfhjlnp0
 3315|   280k|                m_temp_reg_42 = _mm_add_epi16(m_temp_reg_42, m_temp_reg_0);
 3316|   280k|                m_temp_reg_46 = _mm_add_epi16(m_temp_reg_46, m_temp_reg_12);
 3317|       |
 3318|   280k|                m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_42, m_temp_reg_46);
 3319|   280k|                _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 3320|   280k|                pu1_dst += out_stride;
 3321|   280k|                pu1_pred_temp += pred_strd;
 3322|       |
 3323|   280k|                m_temp_reg_43 = _mm_unpackhi_epi64(m_temp_reg_31, m_temp_reg_33); //omkigeca3
 3324|   280k|                m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred_temp);
 3325|       |
 3326|   280k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, m_temp_reg_1);
 3327|   280k|                m_temp_reg_12 = _mm_unpackhi_epi8(m_temp_reg_20, m_temp_reg_1);
 3328|       |
 3329|   280k|                m_temp_reg_47 = _mm_unpackhi_epi64(m_temp_reg_37, m_temp_reg_35); //bdfhjlnp0
 3330|   280k|                m_temp_reg_43 = _mm_add_epi16(m_temp_reg_43, m_temp_reg_0);
 3331|   280k|                m_temp_reg_47 = _mm_add_epi16(m_temp_reg_47, m_temp_reg_12);
 3332|       |
 3333|   280k|                m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_43, m_temp_reg_47);
 3334|   280k|                _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 3335|   280k|                pu1_dst += out_stride;
 3336|   280k|                pu1_pred_temp += pred_strd;
 3337|   280k|            }
 3338|   140k|        }
 3339|  69.1k|    }
 3340|  69.1k|}

ihevc_itrans_recon_32x32_ssse3:
  122|  34.1k|{
  123|       |    /* Inverse Transform */
  124|       |
  125|  34.1k|    WORD32 j;
  126|       |
  127|       |
  128|  34.1k|    WORD16 *pi2_tmp_orig;
  129|       |
  130|       |
  131|       |    /*MEM_ALIGN16  WORD32 temp_array[1024];
  132|       |    MEM_ALIGN16  WORD16 temp1_array[1024];*/
  133|  34.1k|    WORD16 *o_temp_ptr;
  134|  34.1k|    WORD16 *temp_ptr;
  135|       |
  136|  34.1k|    __m128i m_temp_reg_0;
  137|  34.1k|    __m128i m_temp_reg_1;
  138|  34.1k|    __m128i m_temp_reg_2;
  139|  34.1k|    __m128i m_temp_reg_3;
  140|  34.1k|    __m128i m_temp_reg_4;
  141|  34.1k|    __m128i m_temp_reg_5;
  142|  34.1k|    __m128i m_temp_reg_6;
  143|  34.1k|    __m128i m_temp_reg_7;
  144|  34.1k|    __m128i m_temp_reg_10;
  145|  34.1k|    __m128i m_temp_reg_11;
  146|  34.1k|    __m128i m_temp_reg_12;
  147|  34.1k|    __m128i m_temp_reg_13;
  148|  34.1k|    __m128i m_temp_reg_14;
  149|  34.1k|    __m128i m_temp_reg_15;
  150|  34.1k|    __m128i m_temp_reg_16;
  151|  34.1k|    __m128i m_temp_reg_17;
  152|  34.1k|    __m128i m_temp_reg_18;
  153|  34.1k|    __m128i m_temp_reg_19;
  154|  34.1k|    __m128i m_temp_reg_20;
  155|  34.1k|    __m128i m_temp_reg_21;
  156|  34.1k|    __m128i m_temp_reg_22;
  157|  34.1k|    __m128i m_temp_reg_23;
  158|  34.1k|    __m128i m_temp_reg_30;
  159|  34.1k|    __m128i m_temp_reg_31;
  160|  34.1k|    __m128i m_temp_reg_32;
  161|  34.1k|    __m128i m_temp_reg_33;
  162|  34.1k|    __m128i m_temp_reg_34;
  163|  34.1k|    __m128i m_temp_reg_35;
  164|  34.1k|    __m128i m_temp_reg_36;
  165|  34.1k|    __m128i m_temp_reg_37;
  166|  34.1k|    __m128i m_temp_reg_40;
  167|  34.1k|    __m128i m_temp_reg_41;
  168|  34.1k|    __m128i m_temp_reg_42;
  169|  34.1k|    __m128i m_temp_reg_43;
  170|  34.1k|    __m128i m_temp_reg_44;
  171|  34.1k|    __m128i m_temp_reg_45;
  172|  34.1k|    __m128i m_temp_reg_46;
  173|  34.1k|    __m128i m_temp_reg_47;
  174|       |
  175|  34.1k|    __m128i m_temp_reg_70;
  176|  34.1k|    __m128i m_temp_reg_71;
  177|  34.1k|    __m128i m_temp_reg_72;
  178|  34.1k|    __m128i m_temp_reg_73;
  179|  34.1k|    __m128i m_temp_reg_74;
  180|  34.1k|    __m128i m_temp_reg_75;
  181|  34.1k|    __m128i m_temp_reg_76;
  182|  34.1k|    __m128i m_temp_reg_77;
  183|       |
  184|  34.1k|    __m128i m_temp_reg_80;
  185|  34.1k|    __m128i m_temp_reg_81;
  186|  34.1k|    __m128i m_temp_reg_82;
  187|  34.1k|    __m128i m_temp_reg_83;
  188|  34.1k|    __m128i m_temp_reg_84;
  189|  34.1k|    __m128i m_temp_reg_85;
  190|  34.1k|    __m128i m_temp_reg_86;
  191|  34.1k|    __m128i m_temp_reg_87;
  192|       |
  193|  34.1k|    __m128i m_temp_reg_90;
  194|  34.1k|    __m128i m_temp_reg_91;
  195|  34.1k|    __m128i m_temp_reg_92;
  196|  34.1k|    __m128i m_temp_reg_93;
  197|  34.1k|    __m128i m_temp_reg_94;
  198|  34.1k|    __m128i m_temp_reg_95;
  199|  34.1k|    __m128i m_temp_reg_96;
  200|  34.1k|    __m128i m_temp_reg_97;
  201|       |
  202|  34.1k|    __m128i m_rdng_factor;
  203|  34.1k|    __m128i m_count;
  204|  34.1k|    __m128i m_coeff1, m_coeff2, m_coeff3, m_coeff4;
  205|  34.1k|    __m128i m_coeff5, m_coeff6, m_coeff7, m_coeff8;
  206|       |
  207|  34.1k|    __m128i temp1, temp2, temp3, temp4;
  208|  34.1k|    __m128i temp5, temp6, temp7, temp8;
  209|       |
  210|  34.1k|    __m128i all_zero_reg;
  211|  34.1k|    WORD32 i;
  212|       |
  213|       |    /*Lokesh*/
  214|  34.1k|    WORD32  zero_last24_cols_stg1;
  215|  34.1k|    WORD32  zero_last24_rows_stg1;
  216|  34.1k|    WORD32  zero_last28_rows_stg1;
  217|       |
  218|  34.1k|    WORD32  zero_last28_rows_stg2;
  219|  34.1k|    WORD32  zero_last24_rows_stg2;
  220|       |
  221|  34.1k|    WORD32  trans_size_stg1;
  222|       |
  223|  34.1k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  34.1k|#define IT_SHIFT_STAGE_1 7
  ------------------
  224|  34.1k|    WORD32 trans_size = TRANS_SIZE_32;
  ------------------
  |  |  422|  34.1k|#define TRANS_SIZE_32 32
  ------------------
  225|       |
  226|       |
  227|       |    /* Last 8 cols of 16x16 block are skipped based on the below flag : Lokesh */
  228|  34.1k|    zero_last24_cols_stg1 = ((zero_cols & 0xFFFFFF00) == 0xFFFFFF00) ? 1 : 0;
  ------------------
  |  Branch (228:29): [True: 13.8k, False: 20.3k]
  ------------------
  229|  34.1k|    zero_last24_rows_stg1 = ((zero_rows & 0xFFFFFF00) == 0xFFFFFF00) ? 1 : 0;
  ------------------
  |  Branch (229:29): [True: 23.3k, False: 10.7k]
  ------------------
  230|  34.1k|    zero_last28_rows_stg1 = ((zero_rows & 0xFFFFFFF0) == 0xFFFFFFF0) ? 1 : 0;
  ------------------
  |  Branch (230:29): [True: 19.7k, False: 14.3k]
  ------------------
  231|       |
  232|  34.1k|    zero_last28_rows_stg2 = ((zero_cols & 0xFFFFFFF0) == 0xFFFFFFF0) ? 1 : 0;
  ------------------
  |  Branch (232:29): [True: 10.6k, False: 23.4k]
  ------------------
  233|  34.1k|    zero_last24_rows_stg2 = zero_last24_cols_stg1;
  234|       |
  235|  34.1k|    if((zero_last28_rows_stg2) || (zero_last24_cols_stg1))
  ------------------
  |  Branch (235:8): [True: 10.5k, False: 23.5k]
  |  Branch (235:35): [True: 3.18k, False: 20.3k]
  ------------------
  236|  13.8k|    {
  237|  13.8k|        trans_size_stg1 = 8;
  238|       |
  239|  13.8k|    }
  240|  20.2k|    else
  241|  20.2k|    {
  242|  20.2k|        trans_size_stg1 = 32;
  243|  20.2k|    }
  244|       |
  245|  34.1k|    all_zero_reg = _mm_setzero_si128();
  246|       |
  247|  34.1k|    o_temp_ptr  = pi2_tmp;
  248|  34.1k|    temp_ptr = (pi2_tmp + 1024);
  249|       |
  250|  34.1k|    pi2_tmp += 2048;
  251|  34.1k|    pi2_tmp_orig = pi2_tmp;
  252|       |
  253|   128k|    for(i = 0; i < trans_size_stg1; i += 8)
  ------------------
  |  Branch (253:16): [True: 94.5k, False: 34.1k]
  ------------------
  254|  94.5k|    {
  255|       |
  256|       |
  257|  94.5k|        {
  258|  94.5k|            WORD16 *pi2_tmp_src = pi2_src;
  259|       |
  260|  94.5k|            m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_tmp_src);
  261|  94.5k|            pi2_tmp_src += (src_strd << 1);
  262|  94.5k|            m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_tmp_src);
  263|  94.5k|            pi2_tmp_src += (src_strd << 1);
  264|  94.5k|            m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_tmp_src);
  265|  94.5k|            pi2_tmp_src += (src_strd << 1);
  266|  94.5k|            m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_tmp_src);
  267|  94.5k|            pi2_tmp_src += (src_strd << 1);
  268|  94.5k|            m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_tmp_src);
  269|  94.5k|            pi2_tmp_src += (src_strd << 1);
  270|  94.5k|            m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_tmp_src);
  271|  94.5k|            pi2_tmp_src += (src_strd << 1);
  272|  94.5k|            m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_tmp_src);
  273|  94.5k|            pi2_tmp_src += (src_strd << 1);
  274|  94.5k|            m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_tmp_src);
  275|  94.5k|            pi2_tmp_src += (src_strd << 1);
  276|       |
  277|  94.5k|            m_temp_reg_80 = _mm_load_si128((__m128i *)pi2_tmp_src);
  278|  94.5k|            pi2_tmp_src += (src_strd << 1);
  279|  94.5k|            m_temp_reg_81 = _mm_load_si128((__m128i *)pi2_tmp_src);
  280|  94.5k|            pi2_tmp_src += (src_strd << 1);
  281|  94.5k|            m_temp_reg_82 = _mm_load_si128((__m128i *)pi2_tmp_src);
  282|  94.5k|            pi2_tmp_src += (src_strd << 1);
  283|  94.5k|            m_temp_reg_83 = _mm_load_si128((__m128i *)pi2_tmp_src);
  284|  94.5k|            pi2_tmp_src += (src_strd << 1);
  285|  94.5k|            m_temp_reg_84 = _mm_load_si128((__m128i *)pi2_tmp_src);
  286|  94.5k|            pi2_tmp_src += (src_strd << 1);
  287|  94.5k|            m_temp_reg_85 = _mm_load_si128((__m128i *)pi2_tmp_src);
  288|  94.5k|            pi2_tmp_src += (src_strd << 1);
  289|  94.5k|            m_temp_reg_86 = _mm_load_si128((__m128i *)pi2_tmp_src);
  290|  94.5k|            pi2_tmp_src += (src_strd << 1);
  291|  94.5k|            m_temp_reg_87 = _mm_load_si128((__m128i *)pi2_tmp_src);
  292|  94.5k|        }
  293|       |
  294|  94.5k|        if(zero_last28_rows_stg1)
  ------------------
  |  Branch (294:12): [True: 52.8k, False: 41.6k]
  ------------------
  295|  52.8k|        {
  296|       |            /* eeo */
  297|       |            /* eeeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
  298|       |            /* eeeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
  299|  52.8k|            {
  300|  52.8k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64
  301|       |
  302|  52.8k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  303|       |
  304|  52.8k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  305|       |
  306|       |/* eeeo[0]= m_temp_reg_20  */
  307|       |/* eeeo[1]= m_temp_reg_21  */
  308|       |/* eeee[0]= m_temp_reg_22  */
  309|       |/* eeee[1]= m_temp_reg_23  */
  310|       |
  311|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  312|  52.8k|                m_temp_reg_40 = m_temp_reg_14;
  313|       |
  314|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  315|  52.8k|                m_temp_reg_43 = m_temp_reg_14;
  316|       |
  317|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  318|  52.8k|                m_temp_reg_42 = m_temp_reg_14; //m_temp_reg_16;
  319|       |
  320|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  321|  52.8k|                m_temp_reg_41 = m_temp_reg_14; //m_temp_reg_16;
  322|       |
  323|  52.8k|                m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
  324|       |
  325|  52.8k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  326|       |
  327|  52.8k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  328|       |
  329|       |/* eeeo[0]= m_temp_reg_20  */
  330|       |/* eeeo[1]= m_temp_reg_21  */
  331|       |/* eeee[0]= m_temp_reg_22  */
  332|       |/* eeee[1]= m_temp_reg_23  */
  333|       |
  334|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  335|  52.8k|                m_temp_reg_44 = m_temp_reg_14;
  336|       |
  337|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  338|  52.8k|                m_temp_reg_47 = m_temp_reg_14;
  339|       |
  340|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  341|  52.8k|                m_temp_reg_46 = m_temp_reg_14; //m_temp_reg_16;
  342|       |
  343|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  344|  52.8k|                m_temp_reg_45 = m_temp_reg_14; //m_temp_reg_16;
  345|       |
  346|       |
  347|  52.8k|            }
  348|       |            /* eo */
  349|  52.8k|            {
  350|  52.8k|                WORD16 *pi2_scratch = o_temp_ptr;
  351|       |
  352|  52.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90
  353|  52.8k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87
  354|  52.8k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80
  355|  52.8k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70
  356|  52.8k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57
  357|  52.8k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43
  358|  52.8k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25
  359|  52.8k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //9
  360|       |
  361|       |                //m_temp_reg_10 = _mm_cvtepi16_epi32(m_temp_reg_71);
  362|  52.8k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, all_zero_reg);
  363|       |
  364|  52.8k|                m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
  365|       |
  366|       |                /* eo0[0-3] */
  367|  52.8k|                {
  368|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  369|       |
  370|       |                    //m_temp_reg_14 = _mm_cvtepi16_epi32(m_temp_reg_71);
  371|  52.8k|                    m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_71, all_zero_reg);
  372|       |
  373|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  374|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  375|       |
  376|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  377|  52.8k|                    pi2_scratch += 8;
  378|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  379|  52.8k|                    pi2_scratch += 8;
  380|       |
  381|  52.8k|                }
  382|       |
  383|       |                /* eo0[4-7] */
  384|  52.8k|                {
  385|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  386|       |
  387|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  388|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  389|       |
  390|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  391|  52.8k|                    pi2_scratch += 8;
  392|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  393|  52.8k|                    pi2_scratch += 8;
  394|       |
  395|  52.8k|                }
  396|       |                /* eo1[0-3] */
  397|  52.8k|                {
  398|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
  399|       |
  400|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
  401|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
  402|       |
  403|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  404|  52.8k|                    pi2_scratch += 8;
  405|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  406|  52.8k|                    pi2_scratch += 8;
  407|       |
  408|  52.8k|                }
  409|       |
  410|       |                /* eo1[4-7] */
  411|  52.8k|                {
  412|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff2);
  413|       |
  414|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
  415|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
  416|       |
  417|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  418|  52.8k|                    pi2_scratch += 8;
  419|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  420|  52.8k|                    pi2_scratch += 8;
  421|       |
  422|  52.8k|                }
  423|       |
  424|       |                /* eo2[0-3] */
  425|  52.8k|                {
  426|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  427|       |
  428|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  429|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  430|       |
  431|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  432|  52.8k|                    pi2_scratch += 8;
  433|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  434|  52.8k|                    pi2_scratch += 8;
  435|       |
  436|  52.8k|                }
  437|       |
  438|       |                /* eo2[4-7] */
  439|  52.8k|                {
  440|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
  441|       |
  442|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  443|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  444|       |
  445|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  446|  52.8k|                    pi2_scratch += 8;
  447|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  448|  52.8k|                    pi2_scratch += 8;
  449|       |
  450|  52.8k|                }
  451|       |
  452|       |                /**************************************************************************/
  453|       |
  454|       |
  455|       |                /* eo3[0-3] */
  456|  52.8k|                {
  457|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
  458|       |
  459|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
  460|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
  461|       |
  462|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  463|  52.8k|                    pi2_scratch += 8;
  464|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  465|  52.8k|                    pi2_scratch += 8;
  466|       |
  467|  52.8k|                }
  468|       |
  469|       |                /* eo3[4-7] */
  470|  52.8k|                {
  471|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff4);
  472|       |
  473|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
  474|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
  475|       |
  476|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  477|  52.8k|                    pi2_scratch += 8;
  478|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  479|  52.8k|                    pi2_scratch += 8;
  480|       |
  481|  52.8k|                }
  482|       |
  483|       |
  484|       |                /* eo4[0-3] */
  485|  52.8k|                {
  486|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
  487|       |
  488|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
  489|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
  490|       |
  491|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  492|  52.8k|                    pi2_scratch += 8;
  493|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  494|  52.8k|                    pi2_scratch += 8;
  495|       |
  496|  52.8k|                }
  497|       |                /* eo4[4-7] */
  498|  52.8k|                {
  499|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
  500|       |
  501|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
  502|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
  503|       |
  504|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  505|  52.8k|                    pi2_scratch += 8;
  506|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  507|  52.8k|                    pi2_scratch += 8;
  508|       |
  509|  52.8k|                }
  510|       |
  511|       |                /***********************************************************************/
  512|       |
  513|       |                /* eo5[0-3] */
  514|  52.8k|                {
  515|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff6);
  516|       |
  517|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  518|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  519|       |
  520|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  521|  52.8k|                    pi2_scratch += 8;
  522|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  523|  52.8k|                    pi2_scratch += 8;
  524|       |
  525|  52.8k|                }
  526|       |
  527|       |
  528|       |                /* eo5[4-7] */
  529|  52.8k|                {
  530|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff6);
  531|       |
  532|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  533|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  534|       |
  535|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  536|  52.8k|                    pi2_scratch += 8;
  537|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  538|  52.8k|                    pi2_scratch += 8;
  539|       |
  540|  52.8k|                }
  541|       |
  542|       |                /* eo6[0-3] */
  543|  52.8k|                {
  544|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff7);
  545|       |
  546|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
  547|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
  548|       |
  549|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  550|  52.8k|                    pi2_scratch += 8;
  551|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  552|  52.8k|                    pi2_scratch += 8;
  553|       |
  554|  52.8k|                }
  555|       |
  556|       |
  557|       |                /* eo6[4-7] */
  558|  52.8k|                {
  559|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff7);
  560|       |
  561|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
  562|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
  563|       |
  564|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  565|  52.8k|                    pi2_scratch += 8;
  566|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  567|  52.8k|                    pi2_scratch += 8;
  568|       |
  569|  52.8k|                }
  570|       |
  571|       |
  572|       |                /* eo7[0-3] */
  573|  52.8k|                {
  574|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff8);
  575|       |
  576|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  577|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  578|       |
  579|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  580|  52.8k|                    pi2_scratch += 8;
  581|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  582|  52.8k|                    pi2_scratch += 8;
  583|       |
  584|  52.8k|                }
  585|       |
  586|       |
  587|       |                /* eo7[4-7] */
  588|  52.8k|                {
  589|  52.8k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff8);
  590|       |
  591|  52.8k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  592|  52.8k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  593|       |
  594|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  595|  52.8k|                    pi2_scratch += 8;
  596|  52.8k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  597|  52.8k|                    pi2_scratch += 8;
  598|       |
  599|  52.8k|                }
  600|       |
  601|  52.8k|            }
  602|  52.8k|        }
  603|  41.6k|        else if(zero_last24_rows_stg1)
  ------------------
  |  Branch (603:17): [True: 7.19k, False: 34.4k]
  ------------------
  604|  7.19k|        {
  605|  7.19k|            {
  606|       |                /* eeo */
  607|       |                /* eeeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
  608|       |                /* eeeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
  609|       |
  610|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83 36
  611|  7.19k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36 -83
  612|       |
  613|  7.19k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64 64
  614|       |
  615|  7.19k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  616|       |
  617|  7.19k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  618|       |
  619|       |                /* eeeo[0]= m_temp_reg_20  */
  620|       |                /* eeeo[1]= m_temp_reg_21  */
  621|       |                /* eeee[0]= m_temp_reg_22  */
  622|       |                /* eeee[1]= m_temp_reg_23  */
  623|       |
  624|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  625|  7.19k|                m_temp_reg_40 = m_temp_reg_14;
  626|       |
  627|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  628|  7.19k|                m_temp_reg_43 = m_temp_reg_14;
  629|       |
  630|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  631|  7.19k|                m_temp_reg_42 = m_temp_reg_14; //m_temp_reg_16;
  632|       |
  633|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  634|  7.19k|                m_temp_reg_41 = m_temp_reg_14; //m_temp_reg_16;
  635|       |
  636|       |                /* for row 4 to 7 */
  637|       |
  638|  7.19k|                m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
  639|       |
  640|  7.19k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
  641|       |
  642|  7.19k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
  643|       |
  644|       |                /* eeeo[0]= m_temp_reg_20  */
  645|       |                /* eeeo[1]= m_temp_reg_21  */
  646|       |                /* eeee[0]= m_temp_reg_22  */
  647|       |                /* eeee[1]= m_temp_reg_23  */
  648|       |
  649|       |                /* eee[0] = eeee[0] + eeeo[0]; */
  650|  7.19k|                m_temp_reg_44 = m_temp_reg_14;
  651|       |
  652|       |                /* eee[3] = eeee[0] - eeeo[0]; */
  653|  7.19k|                m_temp_reg_47 = m_temp_reg_14;
  654|       |
  655|       |                /* eee[2] = eeee[1] - eeeo[1]; */
  656|  7.19k|                m_temp_reg_46 = m_temp_reg_14; //m_temp_reg_16;
  657|       |
  658|       |                /* eee[1] = eeee[1] + eeeo[1];*/
  659|  7.19k|                m_temp_reg_45 = m_temp_reg_14; //m_temp_reg_16;
  660|       |
  661|       |
  662|       |                /* eeo[] */
  663|       |                /* for(k = 0; k < 4; k++) */
  664|       |
  665|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
  666|  7.19k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75
  667|  7.19k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18
  668|  7.19k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[5][0]); //50 18
  669|       |
  670|  7.19k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, all_zero_reg);
  671|       |
  672|  7.19k|                m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
  673|       |
  674|  7.19k|                m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_72, all_zero_reg);
  675|       |
  676|  7.19k|                m_temp_reg_33 = _mm_setzero_si128();
  677|       |
  678|       |                /* eeo */
  679|  7.19k|                {
  680|       |                    /* eeo0[0-3] */
  681|  7.19k|                    {
  682|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  683|       |
  684|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  685|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  686|       |
  687|  7.19k|                        m_temp_reg_90 = m_temp_reg_34;
  688|  7.19k|                        m_temp_reg_97 = m_temp_reg_35;
  689|  7.19k|                    }
  690|       |                    /* eeo0[4-7] */
  691|  7.19k|                    {
  692|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  693|       |
  694|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
  695|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
  696|       |
  697|  7.19k|                        m_temp_reg_91 = m_temp_reg_34;
  698|  7.19k|                        m_temp_reg_96 = m_temp_reg_35;
  699|       |
  700|  7.19k|                    }
  701|       |
  702|       |                    /* eeo1[0-3] */
  703|  7.19k|                    {
  704|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
  705|       |
  706|       |                        /* e[1][0-3] stored in pi2_tmp[2][0-7] */
  707|       |                        /* e[6][0-3] stored in pi2_tmp[2][8-15] */
  708|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
  709|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
  710|       |
  711|  7.19k|                        m_temp_reg_92 = m_temp_reg_34;
  712|  7.19k|                        m_temp_reg_95 = m_temp_reg_35;
  713|       |
  714|  7.19k|                    }
  715|       |
  716|       |                    /* eo1[4-7] */
  717|  7.19k|                    {
  718|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff2);
  719|       |
  720|       |                        /* e[1][4-7] stored in pi2_tmp[3][0-7] */
  721|       |                        /* e[6][4-7] stored in pi2_tmp[3][8-15] */
  722|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
  723|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
  724|       |
  725|  7.19k|                        m_temp_reg_93 = m_temp_reg_34;
  726|  7.19k|                        m_temp_reg_94 = m_temp_reg_35;
  727|       |
  728|       |
  729|  7.19k|                    }
  730|       |
  731|       |                    /* eo2[0-3] */
  732|  7.19k|                    {
  733|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
  734|       |
  735|       |                        /* e[2][0-3] stored in pi2_tmp[4][0-7] */
  736|       |                        /* e[5][0-3] stored in pi2_tmp[4][8-15] */
  737|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
  738|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
  739|       |
  740|  7.19k|                        temp1 = m_temp_reg_34;
  741|  7.19k|                        temp7 = m_temp_reg_35;
  742|       |
  743|  7.19k|                    }
  744|       |
  745|       |                    /* eo2[4-7] */
  746|  7.19k|                    {
  747|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff4);
  748|       |
  749|       |                        /* e[2][4-7] stored in pi2_tmp[5][0-7] */
  750|       |                        /* e[5][4-7] stored in pi2_tmp[5][8-15] */
  751|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
  752|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
  753|       |
  754|  7.19k|                        temp2 = m_temp_reg_34;
  755|  7.19k|                        temp6 = m_temp_reg_35;
  756|       |
  757|  7.19k|                    }
  758|       |
  759|       |                    /* eo3[0-3] */
  760|  7.19k|                    {
  761|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
  762|       |
  763|       |                        /* e[3][0-3] stored in pi2_tmp[6][0-7] */
  764|       |                        /* e[4][0-3] stored in pi2_tmp[6][8-15] */
  765|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
  766|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
  767|       |
  768|  7.19k|                        temp3 = m_temp_reg_34;
  769|  7.19k|                        temp5 = m_temp_reg_35;
  770|       |
  771|  7.19k|                    }
  772|       |
  773|       |
  774|       |                    /* eo3[4-7] */
  775|  7.19k|                    {
  776|  7.19k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
  777|       |
  778|       |                        /* e[3][4-7] stored in pi2_tmp[7][0-7] */
  779|       |                        /* e[4][4-7] stored in pi2_tmp[7][8-15] */
  780|  7.19k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
  781|  7.19k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
  782|       |
  783|  7.19k|                        temp4 = m_temp_reg_34;
  784|  7.19k|                        temp8 = m_temp_reg_35;
  785|       |
  786|       |
  787|  7.19k|                    }
  788|       |                    /* All values of ee[] array in pi2_temp */
  789|       |
  790|  7.19k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
  791|  7.19k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[1][0]); //80 70
  792|  7.19k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57 43
  793|  7.19k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25 9
  794|       |
  795|  7.19k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  796|       |
  797|  7.19k|                    m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
  798|  7.19k|                    m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
  799|       |
  800|  7.19k|                }
  801|  7.19k|            }
  802|       |            /* eo */
  803|  7.19k|            {
  804|  7.19k|                WORD16 *pi2_scratch = o_temp_ptr;
  805|       |
  806|       |                /* eo0[0-3] */
  807|  7.19k|                {
  808|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  809|       |
  810|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_30);
  811|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_30);
  812|       |
  813|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  814|  7.19k|                    pi2_scratch += 8;
  815|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  816|  7.19k|                    pi2_scratch += 8;
  817|       |
  818|  7.19k|                }
  819|       |
  820|       |
  821|       |                /* eo0[4-7] */
  822|  7.19k|                {
  823|  7.19k|                    m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  824|       |
  825|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  826|       |
  827|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_30);
  828|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_30);
  829|       |
  830|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  831|  7.19k|                    pi2_scratch += 8;
  832|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  833|  7.19k|                    pi2_scratch += 8;
  834|       |
  835|  7.19k|                }
  836|       |
  837|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
  838|       |
  839|       |                /* eo1[0-3] */
  840|  7.19k|                {
  841|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  842|       |
  843|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_30);
  844|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_30);
  845|       |
  846|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  847|  7.19k|                    pi2_scratch += 8;
  848|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  849|  7.19k|                    pi2_scratch += 8;
  850|       |
  851|  7.19k|                }
  852|       |
  853|       |
  854|       |                /* eo1[4-7] */
  855|  7.19k|                {
  856|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  857|       |
  858|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_30);
  859|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_30);
  860|       |
  861|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  862|  7.19k|                    pi2_scratch += 8;
  863|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  864|  7.19k|                    pi2_scratch += 8;
  865|       |
  866|  7.19k|                }
  867|       |
  868|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
  869|       |
  870|       |                /* eo2[0-3] */
  871|  7.19k|                {
  872|       |
  873|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  874|       |
  875|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp1, m_temp_reg_30);
  876|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp1, m_temp_reg_30);
  877|       |
  878|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  879|  7.19k|                    pi2_scratch += 8;
  880|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  881|  7.19k|                    pi2_scratch += 8;
  882|       |
  883|  7.19k|                }
  884|       |
  885|       |                /* eo2[4-7] */
  886|  7.19k|                {
  887|       |
  888|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  889|       |
  890|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp2, m_temp_reg_30);
  891|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp2, m_temp_reg_30);
  892|       |
  893|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  894|  7.19k|                    pi2_scratch += 8;
  895|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  896|  7.19k|                    pi2_scratch += 8;
  897|       |
  898|  7.19k|                }
  899|       |
  900|       |                /**************************************************************************/
  901|       |
  902|       |
  903|       |
  904|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
  905|       |
  906|       |                /* eo3[0-3] */
  907|  7.19k|                {
  908|       |
  909|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  910|       |
  911|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp3, m_temp_reg_30);
  912|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp3, m_temp_reg_30);
  913|       |
  914|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  915|  7.19k|                    pi2_scratch += 8;
  916|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  917|  7.19k|                    pi2_scratch += 8;
  918|       |
  919|  7.19k|                }
  920|       |
  921|       |
  922|       |                /* eo3[4-7] */
  923|  7.19k|                {
  924|       |
  925|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  926|       |
  927|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp4, m_temp_reg_30);
  928|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp4, m_temp_reg_30);
  929|       |
  930|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  931|  7.19k|                    pi2_scratch += 8;
  932|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  933|  7.19k|                    pi2_scratch += 8;
  934|       |
  935|  7.19k|                }
  936|       |
  937|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
  938|       |
  939|       |                /* eo4[0-3] */
  940|  7.19k|                {
  941|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  942|       |
  943|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp5, m_temp_reg_30);
  944|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp5, m_temp_reg_30);
  945|       |
  946|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  947|  7.19k|                    pi2_scratch += 8;
  948|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  949|  7.19k|                    pi2_scratch += 8;
  950|       |
  951|  7.19k|                }
  952|       |                /* eo4[4-7] */
  953|  7.19k|                {
  954|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  955|       |
  956|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp8, m_temp_reg_30);
  957|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp8, m_temp_reg_30);
  958|       |
  959|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  960|  7.19k|                    pi2_scratch += 8;
  961|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  962|  7.19k|                    pi2_scratch += 8;
  963|       |
  964|  7.19k|                }
  965|       |
  966|       |                /***********************************************************************/
  967|       |
  968|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
  969|       |
  970|       |                /* eo5[0-3] */
  971|  7.19k|                {
  972|       |
  973|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
  974|       |
  975|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp7, m_temp_reg_30);
  976|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp7, m_temp_reg_30);
  977|       |
  978|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  979|  7.19k|                    pi2_scratch += 8;
  980|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  981|  7.19k|                    pi2_scratch += 8;
  982|       |
  983|  7.19k|                }
  984|       |
  985|       |
  986|       |                /* eo5[4-7] */
  987|  7.19k|                {
  988|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
  989|       |
  990|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(temp6, m_temp_reg_30);
  991|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(temp6, m_temp_reg_30);
  992|       |
  993|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
  994|  7.19k|                    pi2_scratch += 8;
  995|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
  996|  7.19k|                    pi2_scratch += 8;
  997|       |
  998|  7.19k|                }
  999|       |
 1000|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 1001|       |
 1002|       |                /* eo6[0-3] */
 1003|  7.19k|                {
 1004|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1005|       |
 1006|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_30);
 1007|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_30);
 1008|       |
 1009|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1010|  7.19k|                    pi2_scratch += 8;
 1011|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1012|  7.19k|                    pi2_scratch += 8;
 1013|       |
 1014|  7.19k|                }
 1015|       |
 1016|       |
 1017|       |                /* eo6[4-7] */
 1018|  7.19k|                {
 1019|       |
 1020|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1021|       |
 1022|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_30);
 1023|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_30);
 1024|       |
 1025|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1026|  7.19k|                    pi2_scratch += 8;
 1027|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1028|  7.19k|                    pi2_scratch += 8;
 1029|       |
 1030|  7.19k|                }
 1031|       |
 1032|  7.19k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 1033|       |
 1034|       |                /* eo7[0-3] */
 1035|  7.19k|                {
 1036|       |
 1037|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1038|       |
 1039|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_30);
 1040|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_30);
 1041|       |
 1042|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1043|  7.19k|                    pi2_scratch += 8;
 1044|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1045|  7.19k|                    pi2_scratch += 8;
 1046|       |
 1047|  7.19k|                }
 1048|       |
 1049|       |
 1050|       |                /* eo7[4-7] */
 1051|  7.19k|                {
 1052|  7.19k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1053|       |
 1054|  7.19k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_30);
 1055|  7.19k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_30);
 1056|       |
 1057|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1058|  7.19k|                    pi2_scratch += 8;
 1059|  7.19k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1060|  7.19k|                    pi2_scratch += 8;
 1061|       |
 1062|  7.19k|                }
 1063|       |
 1064|  7.19k|            }
 1065|       |
 1066|  7.19k|        }
 1067|  34.4k|        else
 1068|  34.4k|        {
 1069|       |
 1070|  34.4k|            {
 1071|       |                /* eeo */
 1072|       |                /* eeeo[0] stored in m_temp_reg_20 and m_temp_reg_21 */
 1073|       |                /* eeeo[1] stored in m_temp_reg_22 and m_temp_reg_23 */
 1074|       |
 1075|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83 36
 1076|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36 -83
 1077|       |
 1078|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64 64
 1079|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[3][0]); //64 -64
 1080|       |
 1081|  34.4k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_84);
 1082|       |
 1083|  34.4k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_80);
 1084|       |
 1085|  34.4k|                m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);  /* eeeo[0] */
 1086|  34.4k|                m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);  /* eeeo[1] */
 1087|       |
 1088|  34.4k|                m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);  /* eeee[0] */
 1089|  34.4k|                m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);  /* eeee[1] */
 1090|       |
 1091|       |
 1092|       |                /* eeeo[0]= m_temp_reg_20  */
 1093|       |                /* eeeo[1]= m_temp_reg_21  */
 1094|       |                /* eeee[0]= m_temp_reg_22  */
 1095|       |                /* eeee[1]= m_temp_reg_23  */
 1096|       |
 1097|       |                /* eee[0] = eeee[0] + eeeo[0]; */
 1098|  34.4k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[0] */
 1099|       |
 1100|       |                /* eee[3] = eeee[0] - eeeo[0]; */
 1101|  34.4k|                m_temp_reg_43 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[1] */
 1102|       |
 1103|       |                /* eee[2] = eeee[1] - eeeo[1]; */
 1104|  34.4k|                m_temp_reg_42 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[1] */
 1105|       |
 1106|       |                /* eee[1] = eeee[1] + eeeo[1];*/
 1107|  34.4k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[0] */
 1108|       |
 1109|       |                /* for row 4 to 7 */
 1110|       |
 1111|  34.4k|                m_temp_reg_74 = _mm_srli_si128(m_temp_reg_74, 8);
 1112|  34.4k|                m_temp_reg_84 = _mm_srli_si128(m_temp_reg_84, 8);
 1113|       |
 1114|       |                /* Interleaving row 8 and row 24*/
 1115|  34.4k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_84);
 1116|       |
 1117|  34.4k|                m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 1118|  34.4k|                m_temp_reg_80 = _mm_srli_si128(m_temp_reg_80, 8);
 1119|       |
 1120|  34.4k|                m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_80);
 1121|       |
 1122|  34.4k|                m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);  /* eeeo[0] */
 1123|  34.4k|                m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);  /* eeeo[1] */
 1124|       |
 1125|  34.4k|                m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);  /* eeee[0] */
 1126|  34.4k|                m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);  /* eeee[1] */
 1127|       |
 1128|       |
 1129|       |                /* eeeo[0]= m_temp_reg_20  */
 1130|       |                /* eeeo[1]= m_temp_reg_21  */
 1131|       |                /* eeee[0]= m_temp_reg_22  */
 1132|       |                /* eeee[1]= m_temp_reg_23  */
 1133|       |
 1134|       |                /* eee[0] = eeee[0] + eeeo[0]; */
 1135|  34.4k|                m_temp_reg_44 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[0] */
 1136|       |
 1137|       |                /* eee[3] = eeee[0] - eeeo[0]; */
 1138|  34.4k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[1] */
 1139|       |
 1140|       |                /* eee[2] = eeee[1] - eeeo[1]; */
 1141|  34.4k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[1] */
 1142|       |
 1143|       |                /* eee[1] = eeee[1] + eeeo[1];*/
 1144|  34.4k|                m_temp_reg_45 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[0] */
 1145|       |
 1146|       |
 1147|       |                // eeo[]
 1148|       |                /* for(k = 0; k < 4; k++) */
 1149|       |
 1150|       |
 1151|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
 1152|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[5][0]); //50 18
 1153|       |
 1154|       |                /* eeo */
 1155|  34.4k|                {
 1156|       |                    /* eeo0[0-3] */
 1157|  34.4k|                    {
 1158|  34.4k|                        m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1159|  34.4k|                        m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_86);
 1160|       |
 1161|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1162|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1163|       |
 1164|  34.4k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1165|       |
 1166|  34.4k|                        m_temp_reg_90 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1167|  34.4k|                        m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1168|       |
 1169|  34.4k|                    }
 1170|       |
 1171|  34.4k|                    m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
 1172|  34.4k|                    m_temp_reg_76 = _mm_srli_si128(m_temp_reg_76, 8);
 1173|  34.4k|                    m_temp_reg_82 = _mm_srli_si128(m_temp_reg_82, 8);
 1174|  34.4k|                    m_temp_reg_86 = _mm_srli_si128(m_temp_reg_86, 8);
 1175|       |
 1176|       |                    /* eeo0[4-7] */
 1177|  34.4k|                    {
 1178|  34.4k|                        m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1179|  34.4k|                        m_temp_reg_15 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_86);
 1180|       |
 1181|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1182|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1183|       |
 1184|  34.4k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1185|       |
 1186|  34.4k|                        m_temp_reg_91 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_30);
 1187|  34.4k|                        m_temp_reg_96 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_30);
 1188|       |
 1189|  34.4k|                    }
 1190|       |
 1191|       |
 1192|  34.4k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75 -18
 1193|  34.4k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[7][0]); //89  50
 1194|       |
 1195|       |                    /* eeo1[0-3] */
 1196|  34.4k|                    {
 1197|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1198|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 1199|       |
 1200|  34.4k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_30);
 1201|  34.4k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_30);
 1202|       |
 1203|  34.4k|                        m_temp_reg_92 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_31);
 1204|  34.4k|                        m_temp_reg_95 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_31);
 1205|       |
 1206|  34.4k|                    }
 1207|       |
 1208|       |                    /* eeo1[4-7] */
 1209|  34.4k|                    {
 1210|       |
 1211|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1212|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff4);
 1213|       |
 1214|  34.4k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_30);
 1215|  34.4k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_30);
 1216|       |
 1217|  34.4k|                        m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_34, m_temp_reg_31);
 1218|  34.4k|                        m_temp_reg_94 = _mm_add_epi32(m_temp_reg_35, m_temp_reg_31);
 1219|       |
 1220|       |
 1221|  34.4k|                    }
 1222|       |
 1223|  34.4k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[8][0]); //50 -89
 1224|  34.4k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18  75
 1225|       |
 1226|       |                    /* eeo2[0-3] */
 1227|  34.4k|                    {
 1228|       |
 1229|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1230|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 1231|       |
 1232|       |                        /* e[2][0-3] stored in pi2_tmp[4][0-7] */
 1233|       |                        /* e[5][0-3] stored in pi2_tmp[4][8-15] */
 1234|       |
 1235|  34.4k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_30);
 1236|  34.4k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_30);
 1237|       |
 1238|  34.4k|                        temp1 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1239|  34.4k|                        temp7 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1240|       |
 1241|  34.4k|                    }
 1242|       |
 1243|       |                    /* eeo2[4-7] */
 1244|  34.4k|                    {
 1245|       |
 1246|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1247|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff4);
 1248|       |
 1249|       |                        /* e[2][4-7] stored in pi2_tmp[5][0-7] */
 1250|       |                        /* e[5][4-7] stored in pi2_tmp[5][8-15] */
 1251|       |
 1252|  34.4k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_30);
 1253|  34.4k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_30);
 1254|       |
 1255|  34.4k|                        temp2 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1256|  34.4k|                        temp6 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1257|       |
 1258|  34.4k|                    }
 1259|       |
 1260|  34.4k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[10][0]); //18 -50
 1261|  34.4k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[11][0]); //75  -89
 1262|       |
 1263|       |                    /* eeo3[0-3] */
 1264|  34.4k|                    {
 1265|       |
 1266|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 1267|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 1268|       |
 1269|       |                        /* e[3][0-3] stored in pi2_tmp[6][0-7] */
 1270|       |                        /* e[4][0-3] stored in pi2_tmp[6][8-15] */
 1271|       |
 1272|  34.4k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_30);
 1273|  34.4k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_30);
 1274|       |
 1275|  34.4k|                        temp3 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1276|  34.4k|                        temp5 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1277|       |
 1278|       |
 1279|  34.4k|                    }
 1280|       |
 1281|       |                    /* eeo3[4-7] */
 1282|  34.4k|                    {
 1283|       |
 1284|  34.4k|                        m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff3);
 1285|  34.4k|                        m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff4);
 1286|       |
 1287|       |                        /* e[3][4-7] stored in pi2_tmp[7][0-7] */
 1288|       |                        /* e[4][4-7] stored in pi2_tmp[7][8-15] */
 1289|       |
 1290|  34.4k|                        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_30);
 1291|  34.4k|                        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_30);
 1292|  34.4k|                        temp4 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_31);
 1293|  34.4k|                        temp8 = _mm_sub_epi32(m_temp_reg_35, m_temp_reg_31);
 1294|       |
 1295|  34.4k|                    }
 1296|       |
 1297|       |
 1298|       |                    /* All values of ee[] array in pi2_temp */
 1299|       |
 1300|       |                    /* for(k = 0; k < 8; k++) */
 1301|  34.4k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 1302|  34.4k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[1][0]); //80 70
 1303|  34.4k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57 43
 1304|  34.4k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25 9
 1305|  34.4k|                }
 1306|  34.4k|            }
 1307|       |            /* eo */
 1308|  34.4k|            {
 1309|  34.4k|                WORD16 *pi2_scratch = o_temp_ptr;
 1310|       |
 1311|  34.4k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1312|  34.4k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1313|  34.4k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_81, m_temp_reg_83);
 1314|  34.4k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_85, m_temp_reg_87);
 1315|       |
 1316|  34.4k|                m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 1317|  34.4k|                m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
 1318|  34.4k|                m_temp_reg_75 = _mm_srli_si128(m_temp_reg_75, 8);
 1319|  34.4k|                m_temp_reg_77 = _mm_srli_si128(m_temp_reg_77, 8);
 1320|       |
 1321|  34.4k|                m_temp_reg_81 = _mm_srli_si128(m_temp_reg_81, 8);
 1322|  34.4k|                m_temp_reg_83 = _mm_srli_si128(m_temp_reg_83, 8);
 1323|  34.4k|                m_temp_reg_85 = _mm_srli_si128(m_temp_reg_85, 8);
 1324|  34.4k|                m_temp_reg_87 = _mm_srli_si128(m_temp_reg_87, 8);
 1325|       |
 1326|       |                /* eo0[0-3] */
 1327|  34.4k|                {
 1328|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1329|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1330|       |
 1331|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1332|       |
 1333|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1334|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1335|       |
 1336|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1337|       |
 1338|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1339|       |
 1340|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_30);
 1341|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_30);
 1342|       |
 1343|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1344|  34.4k|                    pi2_scratch += 8;
 1345|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1346|  34.4k|                    pi2_scratch += 8;
 1347|       |
 1348|  34.4k|                }
 1349|       |                /* eo0[4-7] */
 1350|  34.4k|                {
 1351|  34.4k|                    m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1352|  34.4k|                    m_temp_reg_15 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1353|  34.4k|                    m_temp_reg_16 = _mm_unpacklo_epi16(m_temp_reg_81, m_temp_reg_83);
 1354|  34.4k|                    m_temp_reg_17 = _mm_unpacklo_epi16(m_temp_reg_85, m_temp_reg_87);
 1355|       |
 1356|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1357|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1358|       |
 1359|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1360|       |
 1361|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1362|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1363|       |
 1364|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1365|       |
 1366|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1367|       |
 1368|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_30);
 1369|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_30);
 1370|       |
 1371|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1372|  34.4k|                    pi2_scratch += 8;
 1373|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1374|  34.4k|                    pi2_scratch += 8;
 1375|       |
 1376|  34.4k|                }
 1377|       |
 1378|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
 1379|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //0  -43
 1380|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80  90
 1381|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70  25
 1382|       |
 1383|       |                /* eo1[0-3] */
 1384|  34.4k|                {
 1385|       |
 1386|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1387|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1388|       |
 1389|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1390|       |
 1391|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1392|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1393|       |
 1394|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1395|       |
 1396|  34.4k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_32);
 1397|       |
 1398|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_30);
 1399|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_30);
 1400|       |
 1401|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1402|  34.4k|                    pi2_scratch += 8;
 1403|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1404|  34.4k|                    pi2_scratch += 8;
 1405|       |
 1406|  34.4k|                }
 1407|       |
 1408|       |                /* eo1[4-7] */
 1409|  34.4k|                {
 1410|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1411|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1412|       |
 1413|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1414|       |
 1415|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1416|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1417|       |
 1418|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1419|       |
 1420|  34.4k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_32);
 1421|       |
 1422|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_30);
 1423|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_30);
 1424|       |
 1425|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1426|  34.4k|                    pi2_scratch += 8;
 1427|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1428|  34.4k|                    pi2_scratch += 8;
 1429|       |
 1430|  34.4k|                }
 1431|       |
 1432|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
 1433|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[9][0]); //70  87
 1434|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[10][0]); //-25  57
 1435|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[11][0]); //90  43
 1436|       |
 1437|       |                /* eo2[0-3] */
 1438|  34.4k|                {
 1439|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1440|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1441|       |
 1442|  34.4k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 1443|       |
 1444|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1445|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1446|       |
 1447|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1448|       |
 1449|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1450|       |
 1451|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp1, m_temp_reg_30);
 1452|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp1, m_temp_reg_30);
 1453|       |
 1454|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1455|  34.4k|                    pi2_scratch += 8;
 1456|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1457|  34.4k|                    pi2_scratch += 8;
 1458|       |
 1459|  34.4k|                }
 1460|       |
 1461|       |
 1462|       |                /* eo2[4-7] */
 1463|  34.4k|                {
 1464|       |
 1465|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1466|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1467|       |
 1468|  34.4k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 1469|       |
 1470|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1471|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1472|       |
 1473|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1474|       |
 1475|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1476|       |
 1477|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp2, m_temp_reg_30);
 1478|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp2, m_temp_reg_30);
 1479|       |
 1480|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1481|  34.4k|                    pi2_scratch += 8;
 1482|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1483|  34.4k|                    pi2_scratch += 8;
 1484|       |
 1485|  34.4k|                }
 1486|       |                /**************************************************************************/
 1487|       |
 1488|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
 1489|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[13][0]); //-87  9
 1490|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[14][0]); //90  25
 1491|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[15][0]); //80  57
 1492|       |
 1493|       |                /* eo3[0-3] */
 1494|  34.4k|                {
 1495|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1496|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1497|       |
 1498|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1499|       |
 1500|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1501|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1502|       |
 1503|  34.4k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_32, m_temp_reg_33);
 1504|       |
 1505|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1506|       |
 1507|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp3, m_temp_reg_30);
 1508|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp3, m_temp_reg_30);
 1509|       |
 1510|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1511|  34.4k|                    pi2_scratch += 8;
 1512|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1513|  34.4k|                    pi2_scratch += 8;
 1514|       |
 1515|  34.4k|                }
 1516|       |
 1517|       |
 1518|       |                /* eo3[4-7] */
 1519|  34.4k|                {
 1520|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1521|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1522|       |
 1523|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1524|       |
 1525|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1526|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1527|       |
 1528|  34.4k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_32, m_temp_reg_33);
 1529|       |
 1530|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1531|       |
 1532|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp4, m_temp_reg_30);
 1533|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp4, m_temp_reg_30);
 1534|       |
 1535|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1536|  34.4k|                    pi2_scratch += 8;
 1537|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1538|  34.4k|                    pi2_scratch += 8;
 1539|       |
 1540|  34.4k|                }
 1541|       |
 1542|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
 1543|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[17][0]); //-25  90
 1544|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[18][0]); //9  87
 1545|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43  70
 1546|       |
 1547|       |                /* eo4[0-3] */
 1548|  34.4k|                {
 1549|       |
 1550|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1551|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1552|       |
 1553|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1554|       |
 1555|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1556|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1557|       |
 1558|  34.4k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
 1559|       |
 1560|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1561|       |
 1562|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp5, m_temp_reg_30);
 1563|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp5, m_temp_reg_30);
 1564|       |
 1565|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1566|  34.4k|                    pi2_scratch += 8;
 1567|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1568|  34.4k|                    pi2_scratch += 8;
 1569|       |
 1570|  34.4k|                }
 1571|       |
 1572|       |
 1573|       |                /* eo4[4-7] */
 1574|  34.4k|                {
 1575|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1576|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1577|       |
 1578|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1579|       |
 1580|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1581|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1582|       |
 1583|  34.4k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
 1584|       |
 1585|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1586|       |
 1587|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp8, m_temp_reg_30);
 1588|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp8, m_temp_reg_30);
 1589|       |
 1590|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1591|  34.4k|                    pi2_scratch += 8;
 1592|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1593|  34.4k|                    pi2_scratch += 8;
 1594|       |
 1595|  34.4k|                }
 1596|       |
 1597|       |                /***********************************************************************/
 1598|       |
 1599|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
 1600|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[21][0]); //57  25
 1601|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[22][0]); //-87  70
 1602|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[23][0]); //9  -80
 1603|       |
 1604|       |                /* eo5[0-3] */
 1605|  34.4k|                {
 1606|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1607|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1608|       |
 1609|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1610|       |
 1611|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1612|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1613|       |
 1614|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1615|       |
 1616|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1617|       |
 1618|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp7, m_temp_reg_30);
 1619|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp7, m_temp_reg_30);
 1620|       |
 1621|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1622|  34.4k|                    pi2_scratch += 8;
 1623|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1624|  34.4k|                    pi2_scratch += 8;
 1625|       |
 1626|  34.4k|                }
 1627|       |
 1628|       |
 1629|       |                /* eo5[4-7] */
 1630|  34.4k|                {
 1631|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1632|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1633|       |
 1634|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1635|       |
 1636|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1637|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1638|       |
 1639|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1640|       |
 1641|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1642|       |
 1643|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(temp6, m_temp_reg_30);
 1644|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(temp6, m_temp_reg_30);
 1645|       |
 1646|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1647|  34.4k|                    pi2_scratch += 8;
 1648|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1649|  34.4k|                    pi2_scratch += 8;
 1650|       |
 1651|  34.4k|                }
 1652|       |
 1653|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 1654|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[25][0]); //90  -80
 1655|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[26][0]); //43  9
 1656|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[27][0]); //-57  87
 1657|       |
 1658|       |                /* eo6[0-3] */
 1659|  34.4k|                {
 1660|       |
 1661|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1662|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1663|       |
 1664|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1665|       |
 1666|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1667|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1668|       |
 1669|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1670|       |
 1671|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1672|       |
 1673|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_30);
 1674|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_30);
 1675|       |
 1676|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1677|  34.4k|                    pi2_scratch += 8;
 1678|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1679|  34.4k|                    pi2_scratch += 8;
 1680|       |
 1681|  34.4k|                }
 1682|       |
 1683|       |
 1684|       |                /* eo6[4-7] */
 1685|  34.4k|                {
 1686|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1687|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1688|       |
 1689|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1690|       |
 1691|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1692|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1693|       |
 1694|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1695|       |
 1696|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1697|       |
 1698|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_30);
 1699|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_30);
 1700|       |
 1701|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1702|  34.4k|                    pi2_scratch += 8;
 1703|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1704|  34.4k|                    pi2_scratch += 8;
 1705|       |
 1706|  34.4k|                }
 1707|       |
 1708|  34.4k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 1709|  34.4k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[29][0]); //43  -57
 1710|  34.4k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[30][0]); //70  -80
 1711|  34.4k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[31][0]); //87  -90
 1712|       |
 1713|       |                /* eo7[0-3] */
 1714|  34.4k|                {
 1715|       |
 1716|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1717|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 1718|       |
 1719|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1720|       |
 1721|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 1722|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 1723|       |
 1724|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1725|       |
 1726|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1727|       |
 1728|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_30);
 1729|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_30);
 1730|       |
 1731|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1732|  34.4k|                    pi2_scratch += 8;
 1733|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1734|  34.4k|                    pi2_scratch += 8;
 1735|       |
 1736|  34.4k|                }
 1737|       |
 1738|       |
 1739|       |                /* eo7[4-7] */
 1740|  34.4k|                {
 1741|       |
 1742|  34.4k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_14, m_coeff1);
 1743|  34.4k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_15, m_coeff2);
 1744|       |
 1745|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 1746|       |
 1747|  34.4k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_16, m_coeff3);
 1748|  34.4k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_17, m_coeff4);
 1749|       |
 1750|  34.4k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 1751|       |
 1752|  34.4k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 1753|       |
 1754|  34.4k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_30);
 1755|  34.4k|                    m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_30);
 1756|       |
 1757|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_34);
 1758|  34.4k|                    pi2_scratch += 8;
 1759|  34.4k|                    _mm_store_si128((__m128i *)pi2_scratch, m_temp_reg_35);
 1760|  34.4k|                    pi2_scratch += 8;
 1761|       |
 1762|  34.4k|                }
 1763|       |
 1764|  34.4k|            }
 1765|       |
 1766|  34.4k|        }
 1767|       |        /*  All e[] are done */
 1768|       |        /****************************/
 1769|       |
 1770|       |
 1771|  94.5k|        {
 1772|       |
 1773|  94.5k|            WORD16 *pi2_tmp_src = pi2_src + src_strd;
 1774|       |
 1775|  94.5k|            m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1776|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1777|  94.5k|            m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1778|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1779|  94.5k|            m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1780|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1781|  94.5k|            m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1782|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1783|  94.5k|            m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1784|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1785|  94.5k|            m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1786|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1787|  94.5k|            m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1788|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1789|  94.5k|            m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1790|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1791|       |
 1792|  94.5k|            m_temp_reg_80 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1793|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1794|  94.5k|            m_temp_reg_81 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1795|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1796|  94.5k|            m_temp_reg_82 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1797|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1798|  94.5k|            m_temp_reg_83 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1799|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1800|  94.5k|            m_temp_reg_84 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1801|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1802|  94.5k|            m_temp_reg_85 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1803|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1804|  94.5k|            m_temp_reg_86 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1805|  94.5k|            pi2_tmp_src += (src_strd << 1);
 1806|  94.5k|            m_temp_reg_87 = _mm_load_si128((__m128i *)pi2_tmp_src);
 1807|  94.5k|        }
 1808|       |
 1809|  94.5k|        if(zero_last28_rows_stg1)
  ------------------
  |  Branch (1809:12): [True: 53.1k, False: 41.3k]
  ------------------
 1810|  53.1k|        {
 1811|       |            /* o & stage 1 out */
 1812|  53.1k|            {
 1813|  53.1k|                WORD32 j;
 1814|  53.1k|                WORD16 *pi2_src_scratch = o_temp_ptr;
 1815|  53.1k|                WORD16 *pi2_dst_scratch = temp_ptr;
 1816|  53.1k|                WORD32 out_stride = (trans_size << 1);
 1817|  53.1k|                WORD32 in_stride = trans_size;
 1818|       |
 1819|   159k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (1819:28): [True: 106k, False: 53.1k]
  ------------------
 1820|   106k|                {
 1821|   106k|                    if(j)
  ------------------
  |  Branch (1821:24): [True: 53.3k, False: 53.1k]
  ------------------
 1822|  53.3k|                    {
 1823|  53.3k|                        m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 1824|  53.3k|                        m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 1825|  53.3k|                    }
 1826|       |
 1827|   106k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 1828|       |
 1829|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 1830|       |
 1831|       |                    /* o0[0-3] */
 1832|   106k|                    {
 1833|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1834|       |
 1835|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1836|   106k|                        pi2_src_scratch += in_stride;
 1837|       |
 1838|   106k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1839|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1840|       |
 1841|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1842|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1843|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1844|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1845|       |
 1846|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1847|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1848|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1849|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1850|       |
 1851|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1852|       |
 1853|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1854|   106k|                        pi2_dst_scratch += out_stride;
 1855|       |
 1856|   106k|                    }
 1857|       |
 1858|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 1859|       |
 1860|       |                    /* o1[0-3] */
 1861|   106k|                    {
 1862|       |
 1863|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1864|       |
 1865|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1866|   106k|                        pi2_src_scratch += in_stride;
 1867|       |
 1868|   106k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1869|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1870|       |
 1871|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1872|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1873|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1874|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1875|       |
 1876|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1877|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1878|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1879|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1880|       |
 1881|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1882|       |
 1883|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1884|   106k|                        pi2_dst_scratch += out_stride;
 1885|       |
 1886|   106k|                    }
 1887|       |
 1888|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 1889|       |
 1890|       |                    /* o2[0-3] */
 1891|   106k|                    {
 1892|       |
 1893|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1894|       |
 1895|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1896|   106k|                        pi2_src_scratch += in_stride;
 1897|       |
 1898|   106k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1899|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1900|       |
 1901|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1902|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1903|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1904|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1905|       |
 1906|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1907|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1908|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1909|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1910|       |
 1911|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1912|       |
 1913|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1914|   106k|                        pi2_dst_scratch += out_stride;
 1915|       |
 1916|   106k|                    }
 1917|       |
 1918|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 1919|       |
 1920|       |                    /* o3[0-3] */
 1921|   106k|                    {
 1922|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1923|       |
 1924|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1925|   106k|                        pi2_src_scratch += in_stride;
 1926|       |
 1927|   106k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1928|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1929|       |
 1930|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1931|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1932|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1933|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1934|       |
 1935|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1936|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1937|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1938|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1939|       |
 1940|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1941|       |
 1942|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1943|   106k|                        pi2_dst_scratch += out_stride;
 1944|       |
 1945|   106k|                    }
 1946|       |
 1947|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 1948|       |
 1949|       |                    /* o4[0-3] */
 1950|   106k|                    {
 1951|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1952|       |
 1953|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1954|   106k|                        pi2_src_scratch += in_stride;
 1955|       |
 1956|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1957|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1958|       |
 1959|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1960|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1961|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1962|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1963|       |
 1964|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1965|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1966|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1967|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1968|       |
 1969|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 1970|       |
 1971|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 1972|   106k|                        pi2_dst_scratch += out_stride;
 1973|       |
 1974|   106k|                    }
 1975|       |
 1976|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 1977|       |
 1978|       |                    /* o5[0-3] */
 1979|   106k|                    {
 1980|       |
 1981|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 1982|       |
 1983|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 1984|   106k|                        pi2_src_scratch += in_stride;
 1985|       |
 1986|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 1987|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 1988|       |
 1989|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1990|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 1991|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 1992|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 1993|       |
 1994|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 1995|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 1996|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 1997|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 1998|       |
 1999|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2000|       |
 2001|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2002|   106k|                        pi2_dst_scratch += out_stride;
 2003|       |
 2004|   106k|                    }
 2005|       |
 2006|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 2007|       |
 2008|       |                    /* o6[0-3] */
 2009|   106k|                    {
 2010|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2011|       |
 2012|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2013|   106k|                        pi2_src_scratch += in_stride;
 2014|       |
 2015|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2016|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2017|       |
 2018|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2019|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2020|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2021|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2022|       |
 2023|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2024|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2025|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2026|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2027|       |
 2028|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2029|       |
 2030|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2031|   106k|                        pi2_dst_scratch += out_stride;
 2032|       |
 2033|   106k|                    }
 2034|       |
 2035|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 2036|       |
 2037|       |                    /* o7[0-3] */
 2038|   106k|                    {
 2039|       |
 2040|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2041|       |
 2042|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2043|   106k|                        pi2_src_scratch += 8;
 2044|       |
 2045|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2046|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2047|       |
 2048|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2049|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2050|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2051|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2052|       |
 2053|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2054|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2055|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2056|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2057|       |
 2058|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2059|       |
 2060|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2061|   106k|                        pi2_dst_scratch += 8;
 2062|       |
 2063|   106k|                    }
 2064|       |
 2065|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 2066|       |
 2067|       |                    /* o8[0-3] */
 2068|   106k|                    {
 2069|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2070|       |
 2071|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2072|   106k|                        pi2_src_scratch -= in_stride;
 2073|       |
 2074|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2075|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2076|       |
 2077|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2078|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2079|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2080|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2081|       |
 2082|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2083|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2084|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2085|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2086|       |
 2087|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2088|       |
 2089|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2090|   106k|                        pi2_dst_scratch -= out_stride;
 2091|   106k|                    }
 2092|       |
 2093|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 2094|       |
 2095|       |                    /* o9[0-3] */
 2096|   106k|                    {
 2097|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2098|       |
 2099|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2100|   106k|                        pi2_src_scratch -= in_stride;
 2101|       |
 2102|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2103|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2104|       |
 2105|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2106|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2107|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2108|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2109|       |
 2110|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2111|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2112|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2113|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2114|       |
 2115|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2116|       |
 2117|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2118|   106k|                        pi2_dst_scratch -= out_stride;
 2119|   106k|                    }
 2120|       |
 2121|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 2122|       |
 2123|       |                    /* o10[0-3] */
 2124|   106k|                    {
 2125|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2126|       |
 2127|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2128|   106k|                        pi2_src_scratch -= in_stride;
 2129|       |
 2130|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2131|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2132|       |
 2133|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2134|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2135|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2136|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2137|       |
 2138|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2139|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2140|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2141|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2142|       |
 2143|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2144|       |
 2145|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2146|   106k|                        pi2_dst_scratch -= out_stride;
 2147|   106k|                    }
 2148|       |
 2149|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 2150|       |
 2151|       |                    /* o11[0-3] */
 2152|   106k|                    {
 2153|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2154|       |
 2155|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2156|   106k|                        pi2_src_scratch -= in_stride;
 2157|       |
 2158|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2159|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2160|       |
 2161|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2162|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2163|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2164|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2165|       |
 2166|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2167|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2168|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2169|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2170|       |
 2171|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2172|       |
 2173|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2174|   106k|                        pi2_dst_scratch -= out_stride;
 2175|       |
 2176|   106k|                    }
 2177|       |
 2178|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 2179|       |
 2180|       |                    /* o12[0-3] */
 2181|   106k|                    {
 2182|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2183|       |
 2184|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2185|   106k|                        pi2_src_scratch -= in_stride;
 2186|       |
 2187|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2188|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2189|       |
 2190|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2191|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2192|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2193|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2194|       |
 2195|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2196|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2197|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2198|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2199|       |
 2200|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2201|       |
 2202|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2203|   106k|                        pi2_dst_scratch -= out_stride;
 2204|       |
 2205|   106k|                    }
 2206|       |
 2207|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 2208|       |
 2209|       |                    /* o13[0-3] */
 2210|   106k|                    {
 2211|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2212|       |
 2213|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2214|   106k|                        pi2_src_scratch -= in_stride;
 2215|       |
 2216|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2217|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2218|       |
 2219|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2220|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2221|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2222|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2223|       |
 2224|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2225|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2226|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2227|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2228|       |
 2229|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2230|       |
 2231|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2232|   106k|                        pi2_dst_scratch -= out_stride;
 2233|   106k|                    }
 2234|       |
 2235|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 2236|       |
 2237|       |                    /* o14[0-3] */
 2238|   106k|                    {
 2239|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2240|       |
 2241|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2242|   106k|                        pi2_src_scratch -= in_stride;
 2243|       |
 2244|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2245|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2246|       |
 2247|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2248|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2249|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2250|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2251|       |
 2252|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2253|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2254|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2255|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2256|       |
 2257|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2258|       |
 2259|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2260|   106k|                        pi2_dst_scratch -= out_stride;
 2261|       |
 2262|   106k|                    }
 2263|       |
 2264|   106k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 2265|       |
 2266|       |                    /* o15[0-3] */
 2267|   106k|                    {
 2268|   106k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2269|       |
 2270|   106k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2271|   106k|                        pi2_src_scratch += 8;
 2272|       |
 2273|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2274|   106k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2275|       |
 2276|   106k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2277|   106k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2278|   106k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2279|   106k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2280|       |
 2281|   106k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2282|   106k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2283|   106k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2284|   106k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2285|       |
 2286|   106k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2287|       |
 2288|   106k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2289|   106k|                        pi2_dst_scratch += 8;
 2290|   106k|                    }
 2291|       |
 2292|   106k|                }
 2293|  53.1k|            }
 2294|  53.1k|        }
 2295|  41.3k|        else if(zero_last24_rows_stg1)
  ------------------
  |  Branch (2295:17): [True: 7.20k, False: 34.1k]
  ------------------
 2296|  7.20k|        {
 2297|       |            /* o & stage 1 out */
 2298|  7.20k|            {
 2299|  7.20k|                WORD32 j;
 2300|  7.20k|                WORD16 *pi2_src_scratch = o_temp_ptr;
 2301|  7.20k|                WORD16 *pi2_dst_scratch = temp_ptr;
 2302|  7.20k|                WORD32 out_stride = (trans_size << 1);
 2303|  7.20k|                WORD32 in_stride = trans_size;
 2304|       |
 2305|  21.5k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2305:28): [True: 14.3k, False: 7.20k]
  ------------------
 2306|  14.3k|                {
 2307|  14.3k|                    if(j)
  ------------------
  |  Branch (2307:24): [True: 7.19k, False: 7.19k]
  ------------------
 2308|  7.19k|                    {
 2309|  7.19k|                        m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 2310|  7.19k|                        m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 2311|  7.19k|                        m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
 2312|  7.19k|                        m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
 2313|  7.19k|                    }
 2314|       |
 2315|  14.3k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 2316|  14.3k|                    m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 interleaved
 2317|       |
 2318|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 2319|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 2320|       |
 2321|       |                    /* o0[0-3] */
 2322|  14.3k|                    {
 2323|       |
 2324|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2325|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2326|       |
 2327|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2328|       |
 2329|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2330|  14.3k|                        pi2_src_scratch += in_stride;
 2331|       |
 2332|  14.3k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2333|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2334|       |
 2335|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2336|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2337|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2338|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2339|       |
 2340|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2341|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2342|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2343|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2344|       |
 2345|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2346|       |
 2347|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2348|  14.3k|                        pi2_dst_scratch += out_stride;
 2349|       |
 2350|  14.3k|                    }
 2351|       |
 2352|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 2353|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 2354|       |
 2355|       |                    /* o1[0-3] */
 2356|  14.3k|                    {
 2357|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2358|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2359|       |
 2360|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2361|       |
 2362|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2363|  14.3k|                        pi2_src_scratch += in_stride;
 2364|       |
 2365|  14.3k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2366|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2367|       |
 2368|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2369|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2370|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2371|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2372|       |
 2373|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2374|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2375|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2376|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2377|       |
 2378|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2379|       |
 2380|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2381|  14.3k|                        pi2_dst_scratch += out_stride;
 2382|       |
 2383|  14.3k|                    }
 2384|       |
 2385|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 2386|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 2387|       |
 2388|       |                    /* o2[0-3] */
 2389|  14.3k|                    {
 2390|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2391|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2392|       |
 2393|  14.3k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 2394|       |
 2395|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2396|  14.3k|                        pi2_src_scratch += in_stride;
 2397|       |
 2398|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2399|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2400|       |
 2401|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2402|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2403|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2404|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2405|       |
 2406|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2407|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2408|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2409|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2410|       |
 2411|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2412|       |
 2413|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2414|  14.3k|                        pi2_dst_scratch += out_stride;
 2415|       |
 2416|  14.3k|                    }
 2417|       |
 2418|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 2419|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 2420|       |
 2421|       |                    /* o3[0-3] */
 2422|  14.3k|                    {
 2423|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2424|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2425|       |
 2426|  14.3k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 2427|       |
 2428|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2429|  14.3k|                        pi2_src_scratch += in_stride;
 2430|       |
 2431|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2432|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2433|       |
 2434|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2435|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2436|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2437|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2438|       |
 2439|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2440|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2441|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2442|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2443|       |
 2444|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2445|       |
 2446|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2447|  14.3k|                        pi2_dst_scratch += out_stride;
 2448|       |
 2449|  14.3k|                    }
 2450|       |
 2451|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 2452|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 2453|       |
 2454|       |                    /* o4[0-3] */
 2455|  14.3k|                    {
 2456|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2457|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2458|       |
 2459|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2460|       |
 2461|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2462|  14.3k|                        pi2_src_scratch += in_stride;
 2463|       |
 2464|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2465|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2466|       |
 2467|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2468|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2469|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2470|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2471|       |
 2472|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2473|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2474|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2475|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2476|       |
 2477|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2478|       |
 2479|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2480|  14.3k|                        pi2_dst_scratch += out_stride;
 2481|       |
 2482|  14.3k|                    }
 2483|       |
 2484|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 2485|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 2486|       |
 2487|       |                    /* o5[0-3] */
 2488|  14.3k|                    {
 2489|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2490|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2491|       |
 2492|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2493|       |
 2494|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2495|  14.3k|                        pi2_src_scratch += in_stride;
 2496|       |
 2497|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2498|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2499|       |
 2500|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2501|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2502|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2503|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2504|       |
 2505|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2506|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2507|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2508|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2509|       |
 2510|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2511|       |
 2512|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2513|  14.3k|                        pi2_dst_scratch += out_stride;
 2514|       |
 2515|  14.3k|                    }
 2516|       |
 2517|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 2518|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 2519|       |
 2520|       |                    /* o6[0-3] */
 2521|  14.3k|                    {
 2522|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2523|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2524|       |
 2525|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2526|       |
 2527|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2528|  14.3k|                        pi2_src_scratch += in_stride;
 2529|       |
 2530|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2531|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2532|       |
 2533|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2534|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2535|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2536|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2537|       |
 2538|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2539|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2540|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2541|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2542|       |
 2543|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2544|       |
 2545|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2546|  14.3k|                        pi2_dst_scratch += out_stride;
 2547|       |
 2548|  14.3k|                    }
 2549|       |
 2550|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 2551|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 2552|       |
 2553|       |                    /* o7[0-3] */
 2554|  14.3k|                    {
 2555|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2556|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2557|       |
 2558|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2559|       |
 2560|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2561|  14.3k|                        pi2_src_scratch += 8;
 2562|       |
 2563|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2564|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2565|       |
 2566|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2567|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2568|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2569|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2570|       |
 2571|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2572|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2573|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2574|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2575|       |
 2576|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2577|       |
 2578|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2579|  14.3k|                        pi2_dst_scratch += 8;
 2580|       |
 2581|  14.3k|                    }
 2582|       |
 2583|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 2584|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 2585|       |
 2586|       |                    /* o8[0-3] */
 2587|  14.3k|                    {
 2588|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2589|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2590|       |
 2591|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2592|       |
 2593|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2594|  14.3k|                        pi2_src_scratch -= in_stride;
 2595|       |
 2596|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2597|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2598|       |
 2599|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2600|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2601|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2602|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2603|       |
 2604|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2605|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2606|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2607|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2608|       |
 2609|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2610|       |
 2611|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2612|  14.3k|                        pi2_dst_scratch -= out_stride;
 2613|  14.3k|                    }
 2614|       |
 2615|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 2616|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 2617|       |
 2618|       |                    /* o9[0-3] */
 2619|  14.3k|                    {
 2620|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2621|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2622|       |
 2623|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2624|       |
 2625|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2626|  14.3k|                        pi2_src_scratch -= in_stride;
 2627|       |
 2628|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2629|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2630|       |
 2631|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2632|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2633|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2634|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2635|       |
 2636|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2637|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2638|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2639|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2640|       |
 2641|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2642|       |
 2643|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2644|  14.3k|                        pi2_dst_scratch -= out_stride;
 2645|  14.3k|                    }
 2646|       |
 2647|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 2648|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 2649|       |
 2650|       |                    /* o10[0-3] */
 2651|  14.3k|                    {
 2652|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2653|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2654|       |
 2655|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2656|       |
 2657|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2658|  14.3k|                        pi2_src_scratch -= in_stride;
 2659|       |
 2660|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2661|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2662|       |
 2663|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2664|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2665|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2666|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2667|       |
 2668|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2669|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2670|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2671|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2672|       |
 2673|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2674|       |
 2675|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2676|  14.3k|                        pi2_dst_scratch -= out_stride;
 2677|  14.3k|                    }
 2678|       |
 2679|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 2680|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 2681|       |
 2682|       |                    /* o11[0-3] */
 2683|  14.3k|                    {
 2684|       |
 2685|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2686|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2687|       |
 2688|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2689|       |
 2690|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2691|  14.3k|                        pi2_src_scratch -= in_stride;
 2692|       |
 2693|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2694|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2695|       |
 2696|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2697|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2698|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2699|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2700|       |
 2701|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2702|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2703|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2704|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2705|       |
 2706|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2707|       |
 2708|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2709|  14.3k|                        pi2_dst_scratch -= out_stride;
 2710|       |
 2711|  14.3k|                    }
 2712|       |
 2713|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 2714|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 2715|       |
 2716|       |                    /* o12[0-3] */
 2717|  14.3k|                    {
 2718|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2719|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2720|       |
 2721|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2722|       |
 2723|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2724|  14.3k|                        pi2_src_scratch -= in_stride;
 2725|       |
 2726|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2727|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2728|       |
 2729|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2730|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2731|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2732|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2733|       |
 2734|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2735|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2736|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2737|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2738|       |
 2739|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2740|       |
 2741|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2742|  14.3k|                        pi2_dst_scratch -= out_stride;
 2743|       |
 2744|  14.3k|                    }
 2745|       |
 2746|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 2747|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 2748|       |
 2749|       |                    /* o13[0-3] */
 2750|  14.3k|                    {
 2751|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2752|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2753|       |
 2754|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2755|       |
 2756|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2757|  14.3k|                        pi2_src_scratch -= in_stride;
 2758|       |
 2759|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2760|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2761|       |
 2762|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2763|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2764|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2765|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2766|       |
 2767|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2768|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2769|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2770|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2771|       |
 2772|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2773|       |
 2774|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2775|  14.3k|                        pi2_dst_scratch -= out_stride;
 2776|  14.3k|                    }
 2777|       |
 2778|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 2779|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 2780|       |
 2781|       |                    /* o14[0-3] */
 2782|  14.3k|                    {
 2783|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2784|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2785|       |
 2786|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2787|       |
 2788|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2789|  14.3k|                        pi2_src_scratch -= in_stride;
 2790|       |
 2791|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2792|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2793|       |
 2794|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2795|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2796|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2797|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2798|       |
 2799|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2800|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2801|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2802|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2803|       |
 2804|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2805|       |
 2806|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2807|  14.3k|                        pi2_dst_scratch -= out_stride;
 2808|       |
 2809|  14.3k|                    }
 2810|       |
 2811|  14.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 2812|  14.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 2813|       |
 2814|       |                    /* o15[0-3] */
 2815|  14.3k|                    {
 2816|  14.3k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2817|  14.3k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2818|       |
 2819|  14.3k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2820|       |
 2821|  14.3k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2822|  14.3k|                        pi2_src_scratch += 8;
 2823|       |
 2824|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2825|  14.3k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2826|       |
 2827|  14.3k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2828|  14.3k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2829|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2830|  14.3k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2831|       |
 2832|  14.3k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2833|  14.3k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2834|  14.3k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2835|  14.3k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2836|       |
 2837|  14.3k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2838|       |
 2839|  14.3k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2840|  14.3k|                        pi2_dst_scratch += 8;
 2841|  14.3k|                    }
 2842|       |
 2843|  14.3k|                }
 2844|  7.20k|            }
 2845|  7.20k|        }
 2846|  34.1k|        else
 2847|  34.1k|        {
 2848|       |            /* o & stage 1 out */
 2849|  34.1k|            {
 2850|  34.1k|                WORD32 j;
 2851|  34.1k|                WORD16 *pi2_src_scratch = o_temp_ptr;
 2852|  34.1k|                WORD16 *pi2_dst_scratch = temp_ptr;
 2853|  34.1k|                WORD32 out_stride = (trans_size << 1);
 2854|  34.1k|                WORD32 in_stride = trans_size;
 2855|       |
 2856|       |
 2857|   103k|                for(j = 0; j < 2; j++)
  ------------------
  |  Branch (2857:28): [True: 68.8k, False: 34.1k]
  ------------------
 2858|  68.8k|                {
 2859|  68.8k|                    if(j)
  ------------------
  |  Branch (2859:24): [True: 34.4k, False: 34.3k]
  ------------------
 2860|  34.4k|                    {
 2861|  34.4k|                        m_temp_reg_70 = _mm_srli_si128(m_temp_reg_70, 8);
 2862|  34.4k|                        m_temp_reg_71 = _mm_srli_si128(m_temp_reg_71, 8);
 2863|  34.4k|                        m_temp_reg_72 = _mm_srli_si128(m_temp_reg_72, 8);
 2864|  34.4k|                        m_temp_reg_73 = _mm_srli_si128(m_temp_reg_73, 8);
 2865|  34.4k|                        m_temp_reg_74 = _mm_srli_si128(m_temp_reg_74, 8);
 2866|  34.4k|                        m_temp_reg_75 = _mm_srli_si128(m_temp_reg_75, 8);
 2867|  34.4k|                        m_temp_reg_76 = _mm_srli_si128(m_temp_reg_76, 8);
 2868|  34.4k|                        m_temp_reg_77 = _mm_srli_si128(m_temp_reg_77, 8);
 2869|       |
 2870|  34.4k|                        m_temp_reg_80 = _mm_srli_si128(m_temp_reg_80, 8);
 2871|  34.4k|                        m_temp_reg_81 = _mm_srli_si128(m_temp_reg_81, 8);
 2872|  34.4k|                        m_temp_reg_82 = _mm_srli_si128(m_temp_reg_82, 8);
 2873|  34.4k|                        m_temp_reg_83 = _mm_srli_si128(m_temp_reg_83, 8);
 2874|  34.4k|                        m_temp_reg_84 = _mm_srli_si128(m_temp_reg_84, 8);
 2875|  34.4k|                        m_temp_reg_85 = _mm_srli_si128(m_temp_reg_85, 8);
 2876|  34.4k|                        m_temp_reg_86 = _mm_srli_si128(m_temp_reg_86, 8);
 2877|  34.4k|                        m_temp_reg_87 = _mm_srli_si128(m_temp_reg_87, 8);
 2878|  34.4k|                    }
 2879|       |
 2880|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 2881|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 2882|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[2][0]);
 2883|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[3][0]);
 2884|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[4][0]);
 2885|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[5][0]);
 2886|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[6][0]);
 2887|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[7][0]);
 2888|       |
 2889|  68.8k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 2890|  68.8k|                    m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 interleaved
 2891|  68.8k|                    m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 interleaved
 2892|  68.8k|                    m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 interleaved
 2893|  68.8k|                    temp1 = _mm_unpacklo_epi16(m_temp_reg_80, m_temp_reg_81); //row 17 and row 19 interleaved
 2894|  68.8k|                    temp2 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_83); //row 21 and row 23 interleaved
 2895|  68.8k|                    temp3 = _mm_unpacklo_epi16(m_temp_reg_84, m_temp_reg_85); //row 25 and row 27 interleaved
 2896|  68.8k|                    temp4 = _mm_unpacklo_epi16(m_temp_reg_86, m_temp_reg_87); //row 29 and row 31 interleaved
 2897|       |
 2898|       |
 2899|       |                    /* o0[0-3] */
 2900|  68.8k|                    {
 2901|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2902|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2903|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 2904|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2905|       |
 2906|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2907|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 2908|       |
 2909|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 2910|       |
 2911|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 2912|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 2913|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 2914|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 2915|       |
 2916|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 2917|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 2918|       |
 2919|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 2920|       |
 2921|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 2922|       |
 2923|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2924|  68.8k|                        pi2_src_scratch += in_stride;
 2925|       |
 2926|  68.8k|                        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2927|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2928|       |
 2929|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2930|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2931|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2932|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2933|       |
 2934|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2935|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2936|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2937|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2938|       |
 2939|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2940|       |
 2941|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2942|  68.8k|                        pi2_dst_scratch += out_stride;
 2943|       |
 2944|  68.8k|                    }
 2945|       |
 2946|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 2947|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 2948|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[10][0]);
 2949|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[11][0]);
 2950|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[12][0]);
 2951|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[13][0]);
 2952|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[14][0]);
 2953|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[15][0]);
 2954|       |
 2955|       |
 2956|       |                    /* o1[0-3] */
 2957|  68.8k|                    {
 2958|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 2959|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 2960|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 2961|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 2962|       |
 2963|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 2964|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 2965|       |
 2966|  68.8k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_20);
 2967|       |
 2968|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 2969|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 2970|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 2971|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 2972|       |
 2973|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 2974|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 2975|       |
 2976|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 2977|       |
 2978|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 2979|       |
 2980|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 2981|  68.8k|                        pi2_src_scratch += in_stride;
 2982|       |
 2983|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 2984|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 2985|       |
 2986|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2987|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 2988|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 2989|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 2990|       |
 2991|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 2992|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 2993|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 2994|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 2995|       |
 2996|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 2997|       |
 2998|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 2999|  68.8k|                        pi2_dst_scratch += out_stride;
 3000|       |
 3001|  68.8k|                    }
 3002|       |
 3003|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 3004|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 3005|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[18][0]);
 3006|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[19][0]);
 3007|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[20][0]);
 3008|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[21][0]);
 3009|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[22][0]);
 3010|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[23][0]);
 3011|       |
 3012|       |                    /* o2[0-3] */
 3013|  68.8k|                    {
 3014|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3015|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3016|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3017|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3018|       |
 3019|  68.8k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 3020|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3021|       |
 3022|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3023|       |
 3024|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3025|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3026|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3027|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3028|       |
 3029|  68.8k|                        m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_41);
 3030|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3031|       |
 3032|  68.8k|                        m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_42);
 3033|       |
 3034|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3035|       |
 3036|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3037|  68.8k|                        pi2_src_scratch += in_stride;
 3038|       |
 3039|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3040|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3041|       |
 3042|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3043|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3044|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3045|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3046|       |
 3047|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3048|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3049|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3050|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3051|       |
 3052|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3053|       |
 3054|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3055|  68.8k|                        pi2_dst_scratch += out_stride;
 3056|       |
 3057|  68.8k|                    }
 3058|       |
 3059|       |
 3060|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 3061|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 3062|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[26][0]);
 3063|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[27][0]);
 3064|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[28][0]);
 3065|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[29][0]);
 3066|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[30][0]);
 3067|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[31][0]);
 3068|       |
 3069|       |                    /* o3[0-3] */
 3070|  68.8k|                    {
 3071|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3072|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3073|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3074|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3075|       |
 3076|  68.8k|                        m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 3077|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3078|       |
 3079|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3080|       |
 3081|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3082|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3083|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3084|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3085|       |
 3086|  68.8k|                        m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_40);
 3087|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3088|       |
 3089|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3090|       |
 3091|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3092|       |
 3093|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3094|  68.8k|                        pi2_src_scratch += in_stride;
 3095|       |
 3096|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3097|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3098|       |
 3099|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3100|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3101|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3102|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3103|       |
 3104|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3105|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3106|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3107|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3108|       |
 3109|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3110|       |
 3111|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3112|  68.8k|                        pi2_dst_scratch += out_stride;
 3113|       |
 3114|  68.8k|                    }
 3115|       |
 3116|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 3117|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 3118|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[34][0]);
 3119|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[35][0]);
 3120|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[36][0]);
 3121|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[37][0]);
 3122|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[38][0]);
 3123|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[39][0]);
 3124|       |
 3125|       |                    /* o4[0-3] */
 3126|  68.8k|                    {
 3127|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3128|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3129|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3130|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3131|       |
 3132|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3133|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3134|       |
 3135|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3136|       |
 3137|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3138|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3139|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3140|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3141|       |
 3142|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3143|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3144|       |
 3145|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3146|       |
 3147|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3148|       |
 3149|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3150|  68.8k|                        pi2_src_scratch += in_stride;
 3151|       |
 3152|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3153|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3154|       |
 3155|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3156|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3157|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3158|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3159|       |
 3160|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3161|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3162|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3163|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3164|       |
 3165|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3166|       |
 3167|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3168|  68.8k|                        pi2_dst_scratch += out_stride;
 3169|       |
 3170|  68.8k|                    }
 3171|       |
 3172|       |
 3173|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 3174|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 3175|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[42][0]);
 3176|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[43][0]);
 3177|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[44][0]);
 3178|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[45][0]);
 3179|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[46][0]);
 3180|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[47][0]);
 3181|       |
 3182|       |                    /* o5[0-3] */
 3183|  68.8k|                    {
 3184|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3185|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3186|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3187|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3188|       |
 3189|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3190|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3191|       |
 3192|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3193|       |
 3194|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3195|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3196|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3197|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3198|       |
 3199|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3200|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3201|       |
 3202|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3203|       |
 3204|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3205|       |
 3206|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3207|  68.8k|                        pi2_src_scratch += in_stride;
 3208|       |
 3209|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3210|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3211|       |
 3212|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3213|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3214|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3215|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3216|       |
 3217|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3218|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3219|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3220|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3221|       |
 3222|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3223|       |
 3224|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3225|  68.8k|                        pi2_dst_scratch += out_stride;
 3226|       |
 3227|  68.8k|                    }
 3228|       |
 3229|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 3230|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 3231|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[50][0]);
 3232|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[51][0]);
 3233|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[52][0]);
 3234|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[53][0]);
 3235|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[54][0]);
 3236|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[55][0]);
 3237|       |
 3238|       |
 3239|       |                    /* o6[0-3] */
 3240|  68.8k|                    {
 3241|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3242|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3243|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3244|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3245|       |
 3246|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3247|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3248|       |
 3249|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3250|       |
 3251|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3252|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3253|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3254|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3255|       |
 3256|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3257|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3258|       |
 3259|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3260|       |
 3261|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3262|       |
 3263|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3264|  68.8k|                        pi2_src_scratch += in_stride;
 3265|       |
 3266|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3267|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3268|       |
 3269|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3270|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3271|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3272|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3273|       |
 3274|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3275|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3276|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3277|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3278|       |
 3279|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3280|       |
 3281|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3282|  68.8k|                        pi2_dst_scratch += out_stride;
 3283|       |
 3284|  68.8k|                    }
 3285|       |
 3286|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 3287|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 3288|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[58][0]);
 3289|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[59][0]);
 3290|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[60][0]);
 3291|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[61][0]);
 3292|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[62][0]);
 3293|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[63][0]);
 3294|       |
 3295|       |                    /* o7[0-3] */
 3296|  68.8k|                    {
 3297|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3298|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3299|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3300|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3301|       |
 3302|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3303|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3304|       |
 3305|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3306|       |
 3307|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3308|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3309|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3310|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3311|       |
 3312|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3313|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3314|       |
 3315|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3316|       |
 3317|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3318|       |
 3319|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3320|  68.8k|                        pi2_src_scratch += 8;
 3321|       |
 3322|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3323|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3324|       |
 3325|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3326|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3327|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3328|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3329|       |
 3330|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3331|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3332|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3333|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3334|       |
 3335|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3336|       |
 3337|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3338|  68.8k|                        pi2_dst_scratch += 8;
 3339|       |
 3340|  68.8k|                    }
 3341|       |
 3342|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 3343|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 3344|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[66][0]);
 3345|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[67][0]);
 3346|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[68][0]);
 3347|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[69][0]);
 3348|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[70][0]);
 3349|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[71][0]);
 3350|       |
 3351|       |
 3352|       |                    /* o8[0-3] */
 3353|  68.8k|                    {
 3354|       |
 3355|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3356|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3357|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3358|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3359|       |
 3360|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3361|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3362|       |
 3363|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3364|       |
 3365|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3366|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3367|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3368|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3369|       |
 3370|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3371|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3372|       |
 3373|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3374|       |
 3375|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3376|       |
 3377|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3378|  68.8k|                        pi2_src_scratch -= in_stride;
 3379|       |
 3380|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3381|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3382|       |
 3383|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3384|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3385|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3386|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3387|       |
 3388|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3389|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3390|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3391|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3392|       |
 3393|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3394|       |
 3395|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3396|  68.8k|                        pi2_dst_scratch -= out_stride;
 3397|  68.8k|                    }
 3398|       |
 3399|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 3400|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 3401|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[74][0]);
 3402|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[75][0]);
 3403|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[76][0]);
 3404|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[77][0]);
 3405|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[78][0]);
 3406|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[79][0]);
 3407|       |
 3408|       |
 3409|       |                    /* o9[0-3] */
 3410|  68.8k|                    {
 3411|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3412|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3413|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3414|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3415|       |
 3416|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3417|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3418|       |
 3419|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3420|       |
 3421|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3422|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3423|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3424|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3425|       |
 3426|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3427|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3428|       |
 3429|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3430|       |
 3431|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3432|       |
 3433|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3434|  68.8k|                        pi2_src_scratch -= in_stride;
 3435|       |
 3436|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3437|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3438|       |
 3439|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3440|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3441|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3442|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3443|       |
 3444|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3445|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3446|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3447|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3448|       |
 3449|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3450|       |
 3451|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3452|  68.8k|                        pi2_dst_scratch -= out_stride;
 3453|  68.8k|                    }
 3454|       |
 3455|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 3456|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 3457|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[82][0]);
 3458|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[83][0]);
 3459|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[84][0]);
 3460|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[85][0]);
 3461|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[86][0]);
 3462|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[87][0]);
 3463|       |
 3464|       |                    /* o10[0-3] */
 3465|  68.8k|                    {
 3466|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3467|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3468|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3469|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3470|       |
 3471|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3472|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3473|       |
 3474|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3475|       |
 3476|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3477|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3478|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3479|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3480|       |
 3481|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3482|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3483|       |
 3484|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3485|       |
 3486|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3487|       |
 3488|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3489|  68.8k|                        pi2_src_scratch -= in_stride;
 3490|       |
 3491|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3492|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3493|       |
 3494|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3495|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3496|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3497|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3498|       |
 3499|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3500|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3501|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3502|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3503|       |
 3504|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3505|       |
 3506|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3507|  68.8k|                        pi2_dst_scratch -= out_stride;
 3508|  68.8k|                    }
 3509|       |
 3510|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 3511|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 3512|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[90][0]);
 3513|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[91][0]);
 3514|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[92][0]);
 3515|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[93][0]);
 3516|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[94][0]);
 3517|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[95][0]);
 3518|       |
 3519|       |                    /* o11[0-3] */
 3520|  68.8k|                    {
 3521|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3522|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3523|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3524|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3525|       |
 3526|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3527|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3528|       |
 3529|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3530|       |
 3531|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3532|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3533|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3534|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3535|       |
 3536|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3537|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3538|       |
 3539|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3540|       |
 3541|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3542|       |
 3543|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3544|  68.8k|                        pi2_src_scratch -= in_stride;
 3545|       |
 3546|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3547|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3548|       |
 3549|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3550|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3551|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3552|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3553|       |
 3554|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3555|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3556|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3557|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3558|       |
 3559|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3560|       |
 3561|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3562|  68.8k|                        pi2_dst_scratch -= out_stride;
 3563|       |
 3564|  68.8k|                    }
 3565|       |
 3566|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 3567|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 3568|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[98][0]);
 3569|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[99][0]);
 3570|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[100][0]);
 3571|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[101][0]);
 3572|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[102][0]);
 3573|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[103][0]);
 3574|       |
 3575|       |
 3576|       |                    /* o12[0-3] */
 3577|  68.8k|                    {
 3578|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3579|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3580|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3581|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3582|       |
 3583|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3584|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3585|       |
 3586|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3587|       |
 3588|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3589|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3590|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3591|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3592|       |
 3593|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3594|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3595|       |
 3596|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3597|       |
 3598|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3599|       |
 3600|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3601|  68.8k|                        pi2_src_scratch -= in_stride;
 3602|       |
 3603|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3604|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3605|       |
 3606|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3607|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3608|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3609|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3610|       |
 3611|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3612|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3613|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3614|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3615|       |
 3616|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3617|       |
 3618|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3619|  68.8k|                        pi2_dst_scratch -= out_stride;
 3620|       |
 3621|  68.8k|                    }
 3622|       |
 3623|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 3624|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 3625|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[106][0]);
 3626|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[107][0]);
 3627|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[108][0]);
 3628|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[109][0]);
 3629|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[110][0]);
 3630|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[111][0]);
 3631|       |
 3632|       |
 3633|       |                    /* o13[0-3] */
 3634|  68.8k|                    {
 3635|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3636|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3637|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3638|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3639|       |
 3640|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3641|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3642|       |
 3643|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3644|       |
 3645|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3646|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3647|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3648|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3649|       |
 3650|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3651|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3652|       |
 3653|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3654|       |
 3655|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3656|       |
 3657|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3658|  68.8k|                        pi2_src_scratch -= in_stride;
 3659|       |
 3660|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3661|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3662|       |
 3663|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3664|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3665|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3666|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3667|       |
 3668|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3669|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3670|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3671|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3672|       |
 3673|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3674|       |
 3675|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3676|  68.8k|                        pi2_dst_scratch -= out_stride;
 3677|  68.8k|                    }
 3678|       |
 3679|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 3680|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 3681|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[114][0]);
 3682|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[115][0]);
 3683|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[116][0]);
 3684|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[117][0]);
 3685|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[118][0]);
 3686|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[119][0]);
 3687|       |
 3688|       |
 3689|       |                    /* o14[0-3] */
 3690|  68.8k|                    {
 3691|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3692|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3693|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3694|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3695|       |
 3696|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3697|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3698|       |
 3699|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3700|       |
 3701|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3702|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3703|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3704|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3705|       |
 3706|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3707|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3708|       |
 3709|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3710|       |
 3711|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3712|       |
 3713|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3714|  68.8k|                        pi2_src_scratch -= in_stride;
 3715|       |
 3716|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3717|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3718|       |
 3719|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3720|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3721|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3722|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3723|       |
 3724|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3725|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3726|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3727|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3728|       |
 3729|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3730|       |
 3731|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3732|  68.8k|                        pi2_dst_scratch -= out_stride;
 3733|       |
 3734|  68.8k|                    }
 3735|       |
 3736|  68.8k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 3737|  68.8k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 3738|  68.8k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[122][0]);
 3739|  68.8k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[123][0]);
 3740|  68.8k|                    m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[124][0]);
 3741|  68.8k|                    m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[125][0]);
 3742|  68.8k|                    m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[126][0]);
 3743|  68.8k|                    m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[127][0]);
 3744|       |
 3745|       |                    /* o15[0-3] */
 3746|  68.8k|                    {
 3747|  68.8k|                        m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 3748|  68.8k|                        m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 3749|  68.8k|                        m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 3750|  68.8k|                        m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 3751|       |
 3752|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 3753|  68.8k|                        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 3754|       |
 3755|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 3756|       |
 3757|  68.8k|                        m_temp_reg_40 = _mm_madd_epi16(temp1, m_coeff5);
 3758|  68.8k|                        m_temp_reg_41 = _mm_madd_epi16(temp2, m_coeff6);
 3759|  68.8k|                        m_temp_reg_42 = _mm_madd_epi16(temp3, m_coeff7);
 3760|  68.8k|                        m_temp_reg_43 = _mm_madd_epi16(temp4, m_coeff8);
 3761|       |
 3762|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 3763|  68.8k|                        m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 3764|       |
 3765|  68.8k|                        m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 3766|       |
 3767|  68.8k|                        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 3768|       |
 3769|  68.8k|                        m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3770|  68.8k|                        pi2_src_scratch += 8;
 3771|       |
 3772|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_20);
 3773|  68.8k|                        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_20);
 3774|       |
 3775|  68.8k|                        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 3776|  68.8k|                        m_count = _mm_cvtsi32_si128(i4_shift);
 3777|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 3778|  68.8k|                        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 3779|       |
 3780|  68.8k|                        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 3781|  68.8k|                        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 3782|  68.8k|                        m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 3783|  68.8k|                        m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 3784|       |
 3785|  68.8k|                        m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 3786|       |
 3787|  68.8k|                        _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 3788|  68.8k|                        pi2_dst_scratch += 8;
 3789|  68.8k|                    }
 3790|       |
 3791|  68.8k|                }
 3792|  34.1k|            }
 3793|  34.1k|        }
 3794|       |        /* Transpose */
 3795|  94.5k|        {
 3796|  94.5k|            WORD16 *pi2_src_scratch = temp_ptr;
 3797|  94.5k|            WORD16 *pi2_dst_scratch = pi2_tmp;
 3798|  94.5k|            WORD32 in_stride = (trans_size << 1);
 3799|       |
 3800|   283k|            for(j = 0; j < 2; j++)
  ------------------
  |  Branch (3800:24): [True: 189k, False: 94.5k]
  ------------------
 3801|   189k|            {
 3802|   189k|                m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3803|   189k|                pi2_src_scratch += in_stride;
 3804|   189k|                m_temp_reg_31 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3805|   189k|                pi2_src_scratch += in_stride;
 3806|   189k|                m_temp_reg_32 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3807|   189k|                pi2_src_scratch += in_stride;
 3808|   189k|                m_temp_reg_33 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3809|   189k|                pi2_src_scratch += in_stride;
 3810|   189k|                m_temp_reg_34 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3811|   189k|                pi2_src_scratch += in_stride;
 3812|   189k|                m_temp_reg_35 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3813|   189k|                pi2_src_scratch += in_stride;
 3814|   189k|                m_temp_reg_36 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3815|   189k|                pi2_src_scratch += in_stride;
 3816|   189k|                m_temp_reg_37 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3817|   189k|                pi2_src_scratch += 8;
 3818|       |
 3819|   189k|                m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3820|   189k|                pi2_src_scratch -= in_stride;
 3821|   189k|                m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3822|   189k|                pi2_src_scratch -= in_stride;
 3823|   189k|                m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3824|   189k|                pi2_src_scratch -= in_stride;
 3825|   189k|                m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3826|   189k|                pi2_src_scratch -= in_stride;
 3827|   189k|                m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3828|   189k|                pi2_src_scratch -= in_stride;
 3829|   189k|                m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3830|   189k|                pi2_src_scratch -= in_stride;
 3831|   189k|                m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3832|   189k|                pi2_src_scratch -= in_stride;
 3833|   189k|                m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_src_scratch);
 3834|   189k|                pi2_src_scratch += 8;
 3835|       |
 3836|       |
 3837|   189k|                m_temp_reg_40 = _mm_unpacklo_epi16(m_temp_reg_30, m_temp_reg_31);
 3838|   189k|                m_temp_reg_41 = _mm_unpackhi_epi16(m_temp_reg_31, m_temp_reg_30);
 3839|       |
 3840|   189k|                m_temp_reg_42 = _mm_unpacklo_epi16(m_temp_reg_32, m_temp_reg_33);
 3841|   189k|                m_temp_reg_43 = _mm_unpackhi_epi16(m_temp_reg_33, m_temp_reg_32);
 3842|       |
 3843|   189k|                m_temp_reg_44 = _mm_unpacklo_epi16(m_temp_reg_34, m_temp_reg_35);
 3844|   189k|                m_temp_reg_45 = _mm_unpackhi_epi16(m_temp_reg_35, m_temp_reg_34);
 3845|       |
 3846|   189k|                m_temp_reg_46 = _mm_unpacklo_epi16(m_temp_reg_36, m_temp_reg_37);
 3847|   189k|                m_temp_reg_47 = _mm_unpackhi_epi16(m_temp_reg_37, m_temp_reg_36);
 3848|       |
 3849|   189k|                m_temp_reg_80 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 3850|   189k|                m_temp_reg_81 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_70);
 3851|       |
 3852|   189k|                m_temp_reg_82 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73);
 3853|   189k|                m_temp_reg_83 = _mm_unpackhi_epi16(m_temp_reg_73, m_temp_reg_72);
 3854|       |
 3855|   189k|                m_temp_reg_84 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75);
 3856|   189k|                m_temp_reg_85 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_74);
 3857|       |
 3858|   189k|                m_temp_reg_86 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77);
 3859|   189k|                m_temp_reg_87 = _mm_unpackhi_epi16(m_temp_reg_77, m_temp_reg_76);
 3860|       |
 3861|       |                /****************/
 3862|       |
 3863|   189k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_40, m_temp_reg_42);
 3864|   189k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_40, m_temp_reg_42);
 3865|       |
 3866|   189k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_44, m_temp_reg_46);
 3867|   189k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_44, m_temp_reg_46);
 3868|       |
 3869|   189k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_80, m_temp_reg_82);
 3870|   189k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_80, m_temp_reg_82);
 3871|       |
 3872|   189k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_84, m_temp_reg_86);
 3873|   189k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_84, m_temp_reg_86);
 3874|       |
 3875|   189k|                m_temp_reg_90 = _mm_unpacklo_epi32(m_temp_reg_43, m_temp_reg_41);
 3876|   189k|                m_temp_reg_91 = _mm_unpackhi_epi32(m_temp_reg_43, m_temp_reg_41);
 3877|       |
 3878|   189k|                m_temp_reg_92 = _mm_unpacklo_epi32(m_temp_reg_47, m_temp_reg_45);
 3879|   189k|                m_temp_reg_93 = _mm_unpackhi_epi32(m_temp_reg_47, m_temp_reg_45);
 3880|       |
 3881|   189k|                m_temp_reg_94 = _mm_unpacklo_epi32(m_temp_reg_83, m_temp_reg_81);
 3882|   189k|                m_temp_reg_95 = _mm_unpackhi_epi32(m_temp_reg_83, m_temp_reg_81);
 3883|       |
 3884|   189k|                m_temp_reg_96 = _mm_unpacklo_epi32(m_temp_reg_87, m_temp_reg_85);
 3885|   189k|                m_temp_reg_97 = _mm_unpackhi_epi32(m_temp_reg_87, m_temp_reg_85);
 3886|       |
 3887|       |                /******************/
 3888|       |
 3889|   189k|                m_temp_reg_30 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_2);
 3890|   189k|                m_temp_reg_31 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_2);
 3891|       |
 3892|   189k|                m_temp_reg_32 = _mm_unpacklo_epi64(m_temp_reg_92, m_temp_reg_90);
 3893|   189k|                m_temp_reg_33 = _mm_unpackhi_epi64(m_temp_reg_92, m_temp_reg_90);
 3894|       |
 3895|   189k|                m_temp_reg_34 = _mm_unpacklo_epi64(m_temp_reg_4, m_temp_reg_6);
 3896|   189k|                m_temp_reg_35 = _mm_unpackhi_epi64(m_temp_reg_4, m_temp_reg_6);
 3897|       |
 3898|   189k|                m_temp_reg_36 = _mm_unpacklo_epi64(m_temp_reg_96, m_temp_reg_94);
 3899|   189k|                m_temp_reg_37 = _mm_unpackhi_epi64(m_temp_reg_96, m_temp_reg_94);
 3900|       |
 3901|   189k|                m_temp_reg_80 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_3);
 3902|   189k|                m_temp_reg_81 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_3);
 3903|       |
 3904|   189k|                m_temp_reg_82 = _mm_unpacklo_epi64(m_temp_reg_93, m_temp_reg_91);
 3905|   189k|                m_temp_reg_83 = _mm_unpackhi_epi64(m_temp_reg_93, m_temp_reg_91);
 3906|       |
 3907|   189k|                m_temp_reg_84 = _mm_unpacklo_epi64(m_temp_reg_5, m_temp_reg_7);
 3908|   189k|                m_temp_reg_85 = _mm_unpackhi_epi64(m_temp_reg_5, m_temp_reg_7);
 3909|       |
 3910|   189k|                m_temp_reg_86 = _mm_unpacklo_epi64(m_temp_reg_97, m_temp_reg_95);
 3911|   189k|                m_temp_reg_87 = _mm_unpackhi_epi64(m_temp_reg_97, m_temp_reg_95);
 3912|       |
 3913|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size), m_temp_reg_30);
 3914|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 8), m_temp_reg_34);
 3915|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 16), m_temp_reg_36);
 3916|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 24), m_temp_reg_32);
 3917|       |
 3918|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size), m_temp_reg_31);
 3919|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 8), m_temp_reg_35);
 3920|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 16), m_temp_reg_37);
 3921|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 24), m_temp_reg_33);
 3922|       |
 3923|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size), m_temp_reg_80);
 3924|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 8), m_temp_reg_84);
 3925|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 16), m_temp_reg_86);
 3926|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 24), m_temp_reg_82);
 3927|       |
 3928|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size), m_temp_reg_81);
 3929|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 8), m_temp_reg_85);
 3930|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 16), m_temp_reg_87);
 3931|   189k|                _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 24), m_temp_reg_83);
 3932|       |
 3933|   189k|                pi2_dst_scratch += 4 * trans_size;
 3934|   189k|            }
 3935|  94.5k|        }
 3936|  94.5k|        pi2_src += 8;
 3937|       |//      pi2_dequant_coeff +=8;
 3938|  94.5k|        pi2_tmp += 8 * trans_size;
 3939|  94.5k|        zero_cols = zero_cols >> 1;
 3940|  94.5k|    }
 3941|       |
 3942|  34.1k|    if(trans_size_stg1 != TRANS_SIZE_32)
  ------------------
  |  |  422|  34.1k|#define TRANS_SIZE_32 32
  ------------------
  |  Branch (3942:8): [True: 13.8k, False: 20.2k]
  ------------------
 3943|  13.8k|    {
 3944|  13.8k|        m_temp_reg_10 = _mm_setzero_si128();
 3945|       |
 3946|  55.4k|        for(i = trans_size_stg1; i < 32; i += 8)
  ------------------
  |  Branch (3946:34): [True: 41.5k, False: 13.8k]
  ------------------
 3947|  41.5k|        {
 3948|  41.5k|            WORD16 *pi2_dst_scratch = pi2_tmp;
 3949|       |
 3950|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size), m_temp_reg_10);
 3951|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 8), m_temp_reg_10);
 3952|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 16), m_temp_reg_10);
 3953|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 0 * trans_size + 24), m_temp_reg_10);
 3954|       |
 3955|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size), m_temp_reg_10);
 3956|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 8), m_temp_reg_10);
 3957|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 16), m_temp_reg_10);
 3958|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 1 * trans_size + 24), m_temp_reg_10);
 3959|       |
 3960|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size), m_temp_reg_10);
 3961|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 8), m_temp_reg_10);
 3962|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 16), m_temp_reg_10);
 3963|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 2 * trans_size + 24), m_temp_reg_10);
 3964|       |
 3965|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size), m_temp_reg_10);
 3966|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 8), m_temp_reg_10);
 3967|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 16), m_temp_reg_10);
 3968|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 3 * trans_size + 24), m_temp_reg_10);
 3969|       |
 3970|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size), m_temp_reg_10);
 3971|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size + 8), m_temp_reg_10);
 3972|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size + 16), m_temp_reg_10);
 3973|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 4 * trans_size + 24), m_temp_reg_10);
 3974|       |
 3975|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size), m_temp_reg_10);
 3976|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size + 8), m_temp_reg_10);
 3977|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size + 16), m_temp_reg_10);
 3978|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 5 * trans_size + 24), m_temp_reg_10);
 3979|       |
 3980|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size), m_temp_reg_10);
 3981|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size + 8), m_temp_reg_10);
 3982|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size + 16), m_temp_reg_10);
 3983|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 6 * trans_size + 24), m_temp_reg_10);
 3984|       |
 3985|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size), m_temp_reg_10);
 3986|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size + 8), m_temp_reg_10);
 3987|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size + 16), m_temp_reg_10);
 3988|  41.5k|            _mm_store_si128((__m128i *)(pi2_dst_scratch + 7 * trans_size + 24), m_temp_reg_10);
 3989|       |
 3990|  41.5k|            pi2_tmp += 8 * trans_size;
 3991|  41.5k|        }
 3992|  13.8k|    }
 3993|       |
 3994|  34.1k|    pi2_tmp = pi2_tmp_orig;
 3995|       |
 3996|       |    /* Inverse Transform 2nd stage */
 3997|       |
 3998|   305k|    for(j = 0; j < trans_size; j += 4)
  ------------------
  |  Branch (3998:16): [True: 271k, False: 34.1k]
  ------------------
 3999|   271k|    {
 4000|   271k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   271k|#define IT_SHIFT_STAGE_2 12
  ------------------
 4001|       |
 4002|       |        /* Utilizing symmetry properties to the maximum to minimize the number of multiplications */
 4003|   271k|        if(zero_last28_rows_stg2)
  ------------------
  |  Branch (4003:12): [True: 84.8k, False: 186k]
  ------------------
 4004|  84.8k|        {
 4005|  84.8k|            {
 4006|       |
 4007|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 4008|  84.8k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87
 4009|  84.8k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80
 4010|  84.8k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70
 4011|  84.8k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57
 4012|  84.8k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43
 4013|  84.8k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25
 4014|  84.8k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //9
 4015|       |
 4016|  84.8k|                m_temp_reg_10 = _mm_loadu_si128((__m128i *)&pi2_tmp[2 * trans_size]);
 4017|       |
 4018|  84.8k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_10, all_zero_reg);
 4019|       |
 4020|       |                /* eo0[0-3] */
 4021|  84.8k|                {
 4022|  84.8k|                    m_temp_reg_90 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4023|       |
 4024|  84.8k|                }
 4025|       |                /* eo1[0-3] */
 4026|  84.8k|                {
 4027|  84.8k|                    m_temp_reg_91 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
 4028|       |
 4029|  84.8k|                }
 4030|       |                /* eo2[0-3] */
 4031|  84.8k|                {
 4032|  84.8k|                    m_temp_reg_92 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 4033|  84.8k|                }
 4034|       |
 4035|       |                /* eo3[0-3] */
 4036|  84.8k|                {
 4037|  84.8k|                    m_temp_reg_93 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
 4038|  84.8k|                }
 4039|       |                /* eo4[0-3] */
 4040|  84.8k|                {
 4041|  84.8k|                    m_temp_reg_94 = _mm_madd_epi16(m_temp_reg_10, m_coeff5);
 4042|  84.8k|                }
 4043|       |
 4044|       |                /* eo5[0-3] */
 4045|  84.8k|                {
 4046|  84.8k|                    m_temp_reg_95 = _mm_madd_epi16(m_temp_reg_10, m_coeff6);
 4047|  84.8k|                }
 4048|       |
 4049|       |                /* eo6[0-3] */
 4050|  84.8k|                {
 4051|  84.8k|                    m_temp_reg_96 = _mm_madd_epi16(m_temp_reg_10, m_coeff7);
 4052|  84.8k|                }
 4053|       |                /* eo7[0-3] */
 4054|  84.8k|                {
 4055|  84.8k|                    m_temp_reg_97 = _mm_madd_epi16(m_temp_reg_10, m_coeff8);
 4056|  84.8k|                }
 4057|  84.8k|            }
 4058|       |
 4059|  84.8k|            m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64
 4060|       |
 4061|  84.8k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[0 * trans_size]);
 4062|       |
 4063|  84.8k|            m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
 4064|       |
 4065|  84.8k|            m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4066|       |
 4067|  84.8k|            m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4068|       |
 4069|       |            /* e[]*/
 4070|       |
 4071|  84.8k|            temp1 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_90);  /* ee[0] */
 4072|  84.8k|            temp2 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_90);  /* ee[15] */
 4073|       |
 4074|  84.8k|            temp3 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_91);  /* ee[1] */
 4075|  84.8k|            temp4 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_91);  /* ee[14] */
 4076|       |
 4077|  84.8k|            temp5 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_92);  /* ee[2] */
 4078|  84.8k|            temp6 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_92);  /* ee[13] */
 4079|       |
 4080|  84.8k|            temp7 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_93);  /* ee[3] */
 4081|  84.8k|            temp8 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_93);  /* ee[12] */
 4082|       |
 4083|  84.8k|            m_temp_reg_90 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_94);  /* ee[4] */
 4084|  84.8k|            m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_94);  /* ee[11] */
 4085|       |
 4086|  84.8k|            m_temp_reg_92 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_95);  /* ee[5] */
 4087|  84.8k|            m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_95);  /* ee[10] */
 4088|       |
 4089|  84.8k|            m_temp_reg_94 = _mm_add_epi32(m_temp_reg_16, m_temp_reg_96);  /* ee[6] */
 4090|  84.8k|            m_temp_reg_95 = _mm_sub_epi32(m_temp_reg_16, m_temp_reg_96);  /* ee[9] */
 4091|       |
 4092|  84.8k|            m_temp_reg_96 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_97);  /* ee[7] */
 4093|  84.8k|            m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_14, m_temp_reg_97);  /* ee[8] */
 4094|       |
 4095|       |            /*o[k]*/
 4096|  84.8k|            {
 4097|       |
 4098|  84.8k|                WORD16 *pi2_dst_scratch = temp_ptr;
 4099|  84.8k|                WORD32 out_stride = 8;
 4100|       |
 4101|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 4102|       |
 4103|  84.8k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[trans_size]);
 4104|  84.8k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)&pi2_tmp[3 * trans_size]);
 4105|       |
 4106|  84.8k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 4107|       |
 4108|       |
 4109|       |                /* o0[0-3] */
 4110|  84.8k|                {
 4111|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4112|       |
 4113|  84.8k|                    m_temp_reg_31 = _mm_sub_epi32(temp1, m_temp_reg_20);
 4114|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(temp1, m_temp_reg_20);
 4115|       |
 4116|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4117|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4118|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4119|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4120|       |
 4121|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4122|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4123|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4124|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4125|       |
 4126|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4127|       |
 4128|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4129|  84.8k|                    pi2_dst_scratch += out_stride;
 4130|       |
 4131|  84.8k|                }
 4132|       |
 4133|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 4134|       |
 4135|       |                /* o1[0-3] */
 4136|  84.8k|                {
 4137|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4138|       |
 4139|  84.8k|                    m_temp_reg_31 = _mm_sub_epi32(temp3, m_temp_reg_20);
 4140|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(temp3, m_temp_reg_20);
 4141|       |
 4142|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4143|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4144|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4145|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4146|       |
 4147|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4148|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4149|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4150|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4151|       |
 4152|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4153|       |
 4154|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4155|  84.8k|                    pi2_dst_scratch += out_stride;
 4156|       |
 4157|  84.8k|                }
 4158|       |
 4159|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 4160|       |
 4161|       |                /* o2[0-3] */
 4162|  84.8k|                {
 4163|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4164|       |
 4165|  84.8k|                    m_temp_reg_31 = _mm_sub_epi32(temp5, m_temp_reg_20);
 4166|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(temp5, m_temp_reg_20);
 4167|       |
 4168|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4169|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4170|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4171|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4172|       |
 4173|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4174|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4175|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4176|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4177|       |
 4178|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4179|       |
 4180|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4181|  84.8k|                    pi2_dst_scratch += out_stride;
 4182|       |
 4183|  84.8k|                }
 4184|       |
 4185|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 4186|       |
 4187|       |                /* o3[0-3] */
 4188|  84.8k|                {
 4189|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4190|       |
 4191|  84.8k|                    m_temp_reg_31 = _mm_sub_epi32(temp7, m_temp_reg_20);
 4192|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(temp7, m_temp_reg_20);
 4193|       |
 4194|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4195|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4196|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4197|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4198|       |
 4199|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4200|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4201|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4202|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4203|       |
 4204|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4205|       |
 4206|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4207|  84.8k|                    pi2_dst_scratch += out_stride;
 4208|       |
 4209|  84.8k|                }
 4210|       |
 4211|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 4212|       |
 4213|       |                /* o4[0-3] */
 4214|  84.8k|                {
 4215|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4216|       |
 4217|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_20);
 4218|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_20);
 4219|       |
 4220|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4221|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4222|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4223|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4224|       |
 4225|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4226|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4227|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4228|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4229|       |
 4230|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4231|       |
 4232|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4233|  84.8k|                    pi2_dst_scratch += out_stride;
 4234|       |
 4235|  84.8k|                }
 4236|       |
 4237|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 4238|       |
 4239|       |                /* o5[0-3] */
 4240|  84.8k|                {
 4241|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4242|       |
 4243|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_20);
 4244|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_20);
 4245|       |
 4246|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4247|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4248|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4249|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4250|       |
 4251|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4252|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4253|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4254|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4255|       |
 4256|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4257|       |
 4258|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4259|  84.8k|                    pi2_dst_scratch += out_stride;
 4260|       |
 4261|  84.8k|                }
 4262|       |
 4263|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 4264|       |
 4265|       |                /* o6[0-3] */
 4266|  84.8k|                {
 4267|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4268|       |
 4269|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_20);
 4270|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_20);
 4271|       |
 4272|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4273|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4274|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4275|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4276|       |
 4277|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4278|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4279|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4280|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4281|       |
 4282|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4283|       |
 4284|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4285|  84.8k|                    pi2_dst_scratch += out_stride;
 4286|       |
 4287|  84.8k|                }
 4288|       |
 4289|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 4290|       |
 4291|       |                /* o7[0-3] */
 4292|  84.8k|                {
 4293|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4294|       |
 4295|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_20);
 4296|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_20);
 4297|       |
 4298|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4299|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4300|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4301|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4302|       |
 4303|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4304|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4305|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4306|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4307|       |
 4308|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4309|       |
 4310|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4311|  84.8k|                    pi2_dst_scratch += 8;
 4312|       |
 4313|  84.8k|                }
 4314|       |
 4315|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 4316|       |
 4317|       |                /* o8[0-3] */
 4318|  84.8k|                {
 4319|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4320|       |
 4321|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_20);
 4322|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_20);
 4323|       |
 4324|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4325|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4326|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4327|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4328|       |
 4329|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4330|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4331|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4332|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4333|       |
 4334|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4335|       |
 4336|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4337|  84.8k|                    pi2_dst_scratch += out_stride;
 4338|  84.8k|                }
 4339|       |
 4340|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 4341|       |
 4342|       |                /* o9[0-3] */
 4343|  84.8k|                {
 4344|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4345|       |
 4346|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_20);
 4347|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_20);
 4348|       |
 4349|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4350|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4351|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4352|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4353|       |
 4354|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4355|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4356|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4357|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4358|       |
 4359|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4360|       |
 4361|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4362|  84.8k|                    pi2_dst_scratch += out_stride;
 4363|       |
 4364|  84.8k|                }
 4365|       |
 4366|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 4367|       |
 4368|       |                /* o10[0-3] */
 4369|  84.8k|                {
 4370|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4371|       |
 4372|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_20);
 4373|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_20);
 4374|       |
 4375|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4376|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4377|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4378|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4379|       |
 4380|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4381|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4382|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4383|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4384|       |
 4385|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4386|       |
 4387|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4388|  84.8k|                    pi2_dst_scratch += out_stride;
 4389|  84.8k|                }
 4390|       |
 4391|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 4392|       |
 4393|       |                /* o11[0-3] */
 4394|  84.8k|                {
 4395|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4396|       |
 4397|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_20);
 4398|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_20);
 4399|       |
 4400|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4401|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4402|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4403|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4404|       |
 4405|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4406|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4407|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4408|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4409|       |
 4410|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4411|       |
 4412|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4413|  84.8k|                    pi2_dst_scratch += out_stride;
 4414|       |
 4415|  84.8k|                }
 4416|       |
 4417|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 4418|       |
 4419|       |                /* o12[0-3] */
 4420|  84.8k|                {
 4421|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4422|       |
 4423|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(temp8, m_temp_reg_20);
 4424|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(temp8, m_temp_reg_20);
 4425|       |
 4426|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4427|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4428|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4429|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4430|       |
 4431|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4432|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4433|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4434|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4435|       |
 4436|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4437|       |
 4438|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4439|  84.8k|                    pi2_dst_scratch += out_stride;
 4440|       |
 4441|  84.8k|                }
 4442|       |
 4443|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 4444|       |
 4445|       |                /* o13[0-3] */
 4446|  84.8k|                {
 4447|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4448|       |
 4449|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(temp6, m_temp_reg_20);
 4450|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(temp6, m_temp_reg_20);
 4451|       |
 4452|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4453|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4454|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4455|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4456|       |
 4457|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4458|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4459|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4460|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4461|       |
 4462|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4463|       |
 4464|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4465|  84.8k|                    pi2_dst_scratch += out_stride;
 4466|  84.8k|                }
 4467|       |
 4468|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 4469|       |
 4470|       |                /* o14[0-3] */
 4471|  84.8k|                {
 4472|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4473|       |
 4474|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(temp4, m_temp_reg_20);
 4475|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(temp4, m_temp_reg_20);
 4476|       |
 4477|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4478|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4479|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4480|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4481|       |
 4482|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4483|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4484|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4485|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4486|       |
 4487|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4488|       |
 4489|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4490|  84.8k|                    pi2_dst_scratch += out_stride;
 4491|       |
 4492|  84.8k|                }
 4493|       |
 4494|  84.8k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 4495|       |
 4496|       |                /* o15[0-3] */
 4497|  84.8k|                {
 4498|  84.8k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4499|       |
 4500|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(temp2, m_temp_reg_20);
 4501|  84.8k|                    m_temp_reg_30 = _mm_sub_epi32(temp2, m_temp_reg_20);
 4502|       |
 4503|  84.8k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4504|  84.8k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4505|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4506|  84.8k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4507|       |
 4508|  84.8k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4509|  84.8k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4510|  84.8k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4511|  84.8k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4512|       |
 4513|  84.8k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4514|       |
 4515|  84.8k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4516|  84.8k|                    pi2_dst_scratch += 8;
 4517|  84.8k|                }
 4518|       |
 4519|  84.8k|            }
 4520|       |
 4521|  84.8k|        }
 4522|   186k|        else if(zero_last24_rows_stg2)
  ------------------
  |  Branch (4522:17): [True: 25.5k, False: 160k]
  ------------------
 4523|  25.5k|        {
 4524|       |            /* eo */
 4525|  25.5k|            {
 4526|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 4527|       |
 4528|  25.5k|                m_temp_reg_10 = _mm_loadu_si128((__m128i *)&pi2_tmp[2 * trans_size]);
 4529|  25.5k|                m_temp_reg_11 = _mm_loadu_si128((__m128i *)&pi2_tmp[6 * trans_size]);
 4530|       |
 4531|  25.5k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_10, m_temp_reg_11);
 4532|       |
 4533|       |
 4534|       |                /* eo0[0-3] */
 4535|  25.5k|                {
 4536|  25.5k|                    m_temp_reg_90 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4537|       |
 4538|  25.5k|                }
 4539|       |
 4540|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
 4541|       |
 4542|       |                /* eo1[0-3] */
 4543|  25.5k|                {
 4544|  25.5k|                    m_temp_reg_91 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4545|       |
 4546|  25.5k|                }
 4547|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
 4548|       |
 4549|       |                /* eo2[0-3] */
 4550|  25.5k|                {
 4551|  25.5k|                    m_temp_reg_92 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4552|       |
 4553|  25.5k|                }
 4554|       |
 4555|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
 4556|       |
 4557|       |                /* eo3[0-3] */
 4558|  25.5k|                {
 4559|       |
 4560|  25.5k|                    m_temp_reg_93 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4561|       |
 4562|  25.5k|                }
 4563|       |
 4564|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
 4565|       |
 4566|       |                /* eo4[0-3] */
 4567|  25.5k|                {
 4568|  25.5k|                    m_temp_reg_94 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4569|       |
 4570|  25.5k|                }
 4571|       |
 4572|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
 4573|       |
 4574|       |                /* eo5[0-3] */
 4575|  25.5k|                {
 4576|  25.5k|                    m_temp_reg_95 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4577|  25.5k|                }
 4578|       |
 4579|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 4580|       |                /* eo6[0-3] */
 4581|  25.5k|                {
 4582|  25.5k|                    m_temp_reg_96 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4583|  25.5k|                }
 4584|       |
 4585|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 4586|       |                /* eo7[0-3] */
 4587|  25.5k|                {
 4588|  25.5k|                    m_temp_reg_97 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4589|       |
 4590|  25.5k|                }
 4591|       |
 4592|  25.5k|            }
 4593|       |
 4594|       |            /* eeo */
 4595|  25.5k|            {
 4596|       |
 4597|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
 4598|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75
 4599|  25.5k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18
 4600|  25.5k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[8][0]); //50
 4601|       |
 4602|  25.5k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[4 * trans_size]);
 4603|       |
 4604|  25.5k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, all_zero_reg);
 4605|       |
 4606|       |                /* eeo0[0-3] */
 4607|  25.5k|                {
 4608|  25.5k|                    temp1 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4609|       |
 4610|  25.5k|                }
 4611|       |
 4612|       |                /* eeo1[0-3] */
 4613|  25.5k|                {
 4614|  25.5k|                    temp2 = _mm_madd_epi16(m_temp_reg_10, m_coeff2);
 4615|       |
 4616|  25.5k|                }
 4617|       |
 4618|       |                /* eo2[0-3] */
 4619|  25.5k|                {
 4620|  25.5k|                    temp3 = _mm_madd_epi16(m_temp_reg_10, m_coeff4);
 4621|       |
 4622|  25.5k|                }
 4623|       |
 4624|       |
 4625|       |                /* eo3[0-3] */
 4626|  25.5k|                {
 4627|  25.5k|                    temp4 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 4628|       |
 4629|  25.5k|                }
 4630|       |
 4631|  25.5k|            }
 4632|       |
 4633|  25.5k|            m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83
 4634|  25.5k|            m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36
 4635|  25.5k|            m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64
 4636|       |
 4637|  25.5k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[0 * trans_size]);
 4638|       |
 4639|       |            //m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_70);
 4640|  25.5k|            m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, all_zero_reg);
 4641|       |
 4642|  25.5k|            m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4643|  25.5k|            m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 4644|       |
 4645|  25.5k|            m_temp_reg_70 = _mm_add_epi32(m_temp_reg_14, temp1);  /* ee[0] */
 4646|  25.5k|            m_temp_reg_71 = _mm_sub_epi32(m_temp_reg_14, temp1);  /* ee[7] */
 4647|       |
 4648|  25.5k|            m_temp_reg_72 = _mm_add_epi32(m_temp_reg_16, temp2);  /* ee[1] */
 4649|  25.5k|            m_temp_reg_73 = _mm_sub_epi32(m_temp_reg_16, temp2);  /* ee[6] */
 4650|       |
 4651|  25.5k|            m_temp_reg_74 = _mm_add_epi32(m_temp_reg_16, temp3);  /* ee[2] */
 4652|  25.5k|            m_temp_reg_75 = _mm_sub_epi32(m_temp_reg_16, temp3);  /* ee[5] */
 4653|       |
 4654|  25.5k|            m_temp_reg_76 = _mm_add_epi32(m_temp_reg_14, temp4);  /* ee[3] */
 4655|  25.5k|            m_temp_reg_77 = _mm_sub_epi32(m_temp_reg_14, temp4);  /* ee[4] */
 4656|       |
 4657|       |            /* e[]*/
 4658|       |
 4659|  25.5k|            temp1 = _mm_add_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[0] */
 4660|  25.5k|            temp2 = _mm_sub_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[15] */
 4661|       |
 4662|  25.5k|            temp3 = _mm_add_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[1] */
 4663|  25.5k|            temp4 = _mm_sub_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[14] */
 4664|       |
 4665|  25.5k|            temp5 = _mm_add_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[2] */
 4666|  25.5k|            temp6 = _mm_sub_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[13] */
 4667|       |
 4668|  25.5k|            temp7 = _mm_add_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[3] */
 4669|  25.5k|            temp8 = _mm_sub_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[12] */
 4670|       |
 4671|  25.5k|            m_temp_reg_90 = _mm_add_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[4] */
 4672|  25.5k|            m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[11] */
 4673|       |
 4674|  25.5k|            m_temp_reg_92 = _mm_add_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[5] */
 4675|  25.5k|            m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[10] */
 4676|       |
 4677|  25.5k|            m_temp_reg_94 = _mm_add_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[6] */
 4678|  25.5k|            m_temp_reg_95 = _mm_sub_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[9] */
 4679|       |
 4680|  25.5k|            m_temp_reg_96 = _mm_add_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[7] */
 4681|  25.5k|            m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[8] */
 4682|       |
 4683|       |            /*o[k] */
 4684|  25.5k|            {
 4685|       |
 4686|  25.5k|                WORD16 *pi2_dst_scratch = temp_ptr;
 4687|  25.5k|                WORD32 out_stride = 8;
 4688|       |
 4689|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 4690|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 4691|       |
 4692|  25.5k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[trans_size]);
 4693|  25.5k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)&pi2_tmp[3 * trans_size]);
 4694|  25.5k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[5 * trans_size]);
 4695|  25.5k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)&pi2_tmp[7 * trans_size]);
 4696|       |
 4697|  25.5k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 4698|  25.5k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73);
 4699|       |
 4700|       |                /* o0[0-3] */
 4701|  25.5k|                {
 4702|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4703|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4704|       |
 4705|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 4706|       |
 4707|  25.5k|                    m_temp_reg_31 = _mm_sub_epi32(temp1, m_temp_reg_20);
 4708|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(temp1, m_temp_reg_20);
 4709|       |
 4710|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4711|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4712|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4713|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4714|       |
 4715|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4716|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4717|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4718|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4719|       |
 4720|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4721|       |
 4722|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4723|  25.5k|                    pi2_dst_scratch += out_stride;
 4724|       |
 4725|  25.5k|                }
 4726|       |
 4727|       |
 4728|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 4729|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 4730|       |
 4731|       |                /* o1[0-3] */
 4732|  25.5k|                {
 4733|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4734|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4735|       |
 4736|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 4737|       |
 4738|  25.5k|                    m_temp_reg_31 = _mm_sub_epi32(temp3, m_temp_reg_20);
 4739|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(temp3, m_temp_reg_20);
 4740|       |
 4741|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4742|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4743|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4744|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4745|       |
 4746|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4747|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4748|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4749|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4750|       |
 4751|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4752|       |
 4753|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4754|  25.5k|                    pi2_dst_scratch += out_stride;
 4755|       |
 4756|  25.5k|                }
 4757|       |
 4758|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 4759|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 4760|       |
 4761|       |                /* o2[0-3] */
 4762|  25.5k|                {
 4763|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4764|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4765|       |
 4766|  25.5k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 4767|       |
 4768|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(temp5, m_temp_reg_20);
 4769|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(temp5, m_temp_reg_20);
 4770|       |
 4771|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4772|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4773|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4774|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4775|       |
 4776|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4777|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4778|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4779|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4780|       |
 4781|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4782|       |
 4783|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4784|  25.5k|                    pi2_dst_scratch += out_stride;
 4785|       |
 4786|  25.5k|                }
 4787|       |
 4788|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 4789|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 4790|       |
 4791|       |                /* o3[0-3] */
 4792|  25.5k|                {
 4793|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4794|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4795|       |
 4796|  25.5k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 4797|       |
 4798|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(temp7, m_temp_reg_20);
 4799|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(temp7, m_temp_reg_20);
 4800|       |
 4801|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4802|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4803|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4804|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4805|       |
 4806|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4807|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4808|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4809|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4810|       |
 4811|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4812|       |
 4813|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4814|  25.5k|                    pi2_dst_scratch += out_stride;
 4815|       |
 4816|  25.5k|                }
 4817|       |
 4818|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 4819|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 4820|       |
 4821|       |                /* o4[0-3] */
 4822|  25.5k|                {
 4823|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4824|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4825|       |
 4826|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4827|       |
 4828|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_20);
 4829|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_20);
 4830|       |
 4831|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4832|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4833|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4834|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4835|       |
 4836|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4837|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4838|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4839|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4840|       |
 4841|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4842|       |
 4843|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4844|  25.5k|                    pi2_dst_scratch += out_stride;
 4845|       |
 4846|  25.5k|                }
 4847|       |
 4848|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 4849|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 4850|       |
 4851|       |                /* o5[0-3] */
 4852|  25.5k|                {
 4853|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4854|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4855|       |
 4856|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4857|       |
 4858|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_20);
 4859|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_20);
 4860|       |
 4861|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4862|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4863|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4864|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4865|       |
 4866|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4867|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4868|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4869|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4870|       |
 4871|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4872|       |
 4873|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4874|  25.5k|                    pi2_dst_scratch += out_stride;
 4875|       |
 4876|  25.5k|                }
 4877|       |
 4878|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 4879|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 4880|       |
 4881|       |                /* o6[0-3] */
 4882|  25.5k|                {
 4883|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4884|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4885|       |
 4886|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4887|       |
 4888|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_20);
 4889|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_20);
 4890|       |
 4891|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4892|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4893|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4894|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4895|       |
 4896|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4897|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4898|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4899|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4900|       |
 4901|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4902|       |
 4903|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4904|  25.5k|                    pi2_dst_scratch += out_stride;
 4905|       |
 4906|  25.5k|                }
 4907|       |
 4908|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 4909|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 4910|       |
 4911|       |                /* o7[0-3] */
 4912|  25.5k|                {
 4913|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4914|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4915|       |
 4916|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4917|       |
 4918|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_20);
 4919|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_20);
 4920|       |
 4921|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4922|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4923|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4924|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4925|       |
 4926|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4927|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4928|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4929|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4930|       |
 4931|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4932|       |
 4933|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4934|  25.5k|                    pi2_dst_scratch += 8;
 4935|       |
 4936|  25.5k|                }
 4937|       |
 4938|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 4939|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 4940|       |
 4941|       |                /* o8[0-3] */
 4942|  25.5k|                {
 4943|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4944|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4945|       |
 4946|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4947|       |
 4948|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_20);
 4949|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_20);
 4950|       |
 4951|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4952|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4953|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4954|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4955|       |
 4956|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4957|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4958|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4959|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4960|       |
 4961|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4962|       |
 4963|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4964|  25.5k|                    pi2_dst_scratch += out_stride;
 4965|  25.5k|                }
 4966|       |
 4967|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 4968|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 4969|       |
 4970|       |                /* o9[0-3] */
 4971|  25.5k|                {
 4972|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 4973|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 4974|       |
 4975|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 4976|       |
 4977|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_20);
 4978|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_20);
 4979|       |
 4980|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 4981|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 4982|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 4983|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 4984|       |
 4985|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 4986|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 4987|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 4988|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 4989|       |
 4990|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 4991|       |
 4992|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 4993|  25.5k|                    pi2_dst_scratch += out_stride;
 4994|  25.5k|                }
 4995|       |
 4996|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 4997|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 4998|       |
 4999|       |                /* o10[0-3] */
 5000|  25.5k|                {
 5001|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5002|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5003|       |
 5004|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5005|       |
 5006|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_20);
 5007|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_20);
 5008|       |
 5009|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5010|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5011|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5012|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5013|       |
 5014|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5015|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5016|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5017|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5018|       |
 5019|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5020|       |
 5021|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5022|  25.5k|                    pi2_dst_scratch += out_stride;
 5023|  25.5k|                }
 5024|       |
 5025|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 5026|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 5027|       |
 5028|       |                /* o11[0-3] */
 5029|  25.5k|                {
 5030|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5031|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5032|       |
 5033|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5034|       |
 5035|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_20);
 5036|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_20);
 5037|       |
 5038|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5039|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5040|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5041|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5042|       |
 5043|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5044|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5045|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5046|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5047|       |
 5048|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5049|       |
 5050|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5051|  25.5k|                    pi2_dst_scratch += out_stride;
 5052|       |
 5053|  25.5k|                }
 5054|       |
 5055|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 5056|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 5057|       |
 5058|       |                /* o12[0-3] */
 5059|  25.5k|                {
 5060|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5061|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5062|       |
 5063|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5064|       |
 5065|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(temp8, m_temp_reg_20);
 5066|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(temp8, m_temp_reg_20);
 5067|       |
 5068|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5069|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5070|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5071|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5072|       |
 5073|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5074|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5075|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5076|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5077|       |
 5078|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5079|       |
 5080|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5081|  25.5k|                    pi2_dst_scratch += out_stride;
 5082|       |
 5083|  25.5k|                }
 5084|       |
 5085|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 5086|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 5087|       |
 5088|       |                /* o13[0-3] */
 5089|  25.5k|                {
 5090|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5091|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5092|       |
 5093|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5094|       |
 5095|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(temp6, m_temp_reg_20);
 5096|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(temp6, m_temp_reg_20);
 5097|       |
 5098|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5099|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5100|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5101|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5102|       |
 5103|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5104|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5105|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5106|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5107|       |
 5108|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5109|       |
 5110|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5111|  25.5k|                    pi2_dst_scratch += out_stride;
 5112|  25.5k|                }
 5113|       |
 5114|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 5115|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 5116|       |
 5117|       |                /* o14[0-3] */
 5118|  25.5k|                {
 5119|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5120|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5121|       |
 5122|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5123|       |
 5124|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(temp4, m_temp_reg_20);
 5125|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(temp4, m_temp_reg_20);
 5126|       |
 5127|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5128|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5129|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5130|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5131|       |
 5132|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5133|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5134|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5135|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5136|       |
 5137|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5138|       |
 5139|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5140|  25.5k|                    pi2_dst_scratch += out_stride;
 5141|  25.5k|                }
 5142|       |
 5143|  25.5k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 5144|  25.5k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 5145|       |
 5146|       |                /* o15[0-3] */
 5147|  25.5k|                {
 5148|  25.5k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5149|  25.5k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5150|       |
 5151|  25.5k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);
 5152|       |
 5153|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(temp2, m_temp_reg_20);
 5154|  25.5k|                    m_temp_reg_30 = _mm_sub_epi32(temp2, m_temp_reg_20);
 5155|       |
 5156|  25.5k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5157|  25.5k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5158|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5159|  25.5k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5160|       |
 5161|  25.5k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5162|  25.5k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5163|  25.5k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5164|  25.5k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5165|       |
 5166|  25.5k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5167|       |
 5168|  25.5k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5169|  25.5k|                    pi2_dst_scratch += 8;
 5170|  25.5k|                }
 5171|       |
 5172|  25.5k|            }
 5173|  25.5k|        }
 5174|   160k|        else
 5175|   160k|        {
 5176|       |            /* eo */
 5177|   160k|            {
 5178|       |
 5179|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[0][0]); //90 87
 5180|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[1][0]); //80 70
 5181|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[2][0]); //57 43
 5182|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[3][0]); //25 9
 5183|       |
 5184|       |
 5185|   160k|                m_temp_reg_10 = _mm_loadu_si128((__m128i *)&pi2_tmp[2 * trans_size]);
 5186|   160k|                m_temp_reg_11 = _mm_loadu_si128((__m128i *)&pi2_tmp[6 * trans_size]);
 5187|   160k|                m_temp_reg_12 = _mm_loadu_si128((__m128i *)&pi2_tmp[10 * trans_size]);
 5188|   160k|                m_temp_reg_13 = _mm_loadu_si128((__m128i *)&pi2_tmp[14 * trans_size]);
 5189|   160k|                m_temp_reg_18 = _mm_loadu_si128((__m128i *)&pi2_tmp[18 * trans_size]);
 5190|   160k|                m_temp_reg_19 = _mm_loadu_si128((__m128i *)&pi2_tmp[22 * trans_size]);
 5191|   160k|                m_temp_reg_20 = _mm_loadu_si128((__m128i *)&pi2_tmp[26 * trans_size]);
 5192|   160k|                m_temp_reg_21 = _mm_loadu_si128((__m128i *)&pi2_tmp[30 * trans_size]);
 5193|       |
 5194|   160k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_10, m_temp_reg_11);
 5195|   160k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_12, m_temp_reg_13);
 5196|   160k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_18, m_temp_reg_19);
 5197|   160k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_21);
 5198|       |
 5199|       |                /* eo0[0-3] */
 5200|   160k|                {
 5201|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5202|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5203|       |
 5204|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5205|       |
 5206|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5207|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5208|       |
 5209|   160k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5210|       |
 5211|   160k|                    m_temp_reg_90 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5212|       |
 5213|   160k|                }
 5214|       |
 5215|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[4][0]); //87  57
 5216|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[5][0]); //0  -43
 5217|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[6][0]); //80  90
 5218|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[7][0]); //70  25
 5219|       |
 5220|       |                /* eo1[0-3] */
 5221|   160k|                {
 5222|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5223|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5224|       |
 5225|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5226|       |
 5227|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5228|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5229|       |
 5230|   160k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5231|       |
 5232|   160k|                    m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_32);
 5233|       |
 5234|   160k|                }
 5235|       |
 5236|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[8][0]); //80  9
 5237|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[9][0]); //70  87
 5238|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[10][0]); //-25  57
 5239|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[11][0]); //90  43
 5240|       |
 5241|       |                /* eo2[0-3] */
 5242|   160k|                {
 5243|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5244|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5245|       |
 5246|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 5247|       |
 5248|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5249|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5250|       |
 5251|   160k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5252|       |
 5253|   160k|                    m_temp_reg_92 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5254|       |
 5255|   160k|                }
 5256|       |
 5257|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[12][0]); //70  -43
 5258|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[13][0]); //-87  9
 5259|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[14][0]); //90  25
 5260|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[15][0]); //80  57
 5261|       |
 5262|       |                /* eo3[0-3] */
 5263|   160k|                {
 5264|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5265|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5266|       |
 5267|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5268|       |
 5269|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5270|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5271|       |
 5272|   160k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_32, m_temp_reg_33);
 5273|       |
 5274|   160k|                    m_temp_reg_93 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5275|       |
 5276|   160k|                }
 5277|       |
 5278|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[16][0]); //57  -80
 5279|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[17][0]); //-25  90
 5280|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[18][0]); //9  87
 5281|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[19][0]); //43  70
 5282|       |
 5283|       |
 5284|       |                /* eo4[0-3] */
 5285|   160k|                {
 5286|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5287|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5288|       |
 5289|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5290|       |
 5291|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5292|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5293|       |
 5294|   160k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
 5295|       |
 5296|   160k|                    m_temp_reg_94 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5297|       |
 5298|   160k|                }
 5299|       |
 5300|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[20][0]); //43  -90
 5301|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[21][0]); //57  25
 5302|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[22][0]); //-87  70
 5303|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[23][0]); //9  -80
 5304|       |
 5305|       |                /* eo5[0-3] */
 5306|   160k|                {
 5307|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5308|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5309|       |
 5310|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5311|       |
 5312|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5313|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5314|       |
 5315|   160k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5316|       |
 5317|   160k|                    m_temp_reg_95 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5318|   160k|                }
 5319|       |
 5320|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[24][0]); //25  -70
 5321|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[25][0]); //90  -80
 5322|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[26][0]); //43  9
 5323|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[27][0]); //-57  87
 5324|       |
 5325|       |                /* eo6[0-3] */
 5326|   160k|                {
 5327|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5328|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5329|       |
 5330|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5331|       |
 5332|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5333|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5334|       |
 5335|   160k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5336|       |
 5337|   160k|                    m_temp_reg_96 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5338|       |
 5339|   160k|                }
 5340|       |
 5341|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[28][0]); //9  -25
 5342|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[29][0]); //43  -57
 5343|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[30][0]); //70  -80
 5344|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_packed[31][0]); //87  -90
 5345|       |
 5346|       |                /* eo7[0-3] */
 5347|   160k|                {
 5348|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5349|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5350|       |
 5351|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5352|       |
 5353|   160k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5354|   160k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5355|       |
 5356|   160k|                    m_temp_reg_32 = _mm_add_epi32(m_temp_reg_32, m_temp_reg_33);
 5357|       |
 5358|   160k|                    m_temp_reg_97 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_32);
 5359|       |
 5360|       |
 5361|   160k|                }
 5362|       |
 5363|   160k|            }
 5364|       |
 5365|       |            /* eeo */
 5366|   160k|            {
 5367|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[4][0]); //89 75
 5368|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[5][0]); //50 18
 5369|       |
 5370|   160k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[4 * trans_size]);
 5371|   160k|                m_temp_reg_76 = _mm_loadu_si128((__m128i *)&pi2_tmp[12 * trans_size]);
 5372|   160k|                m_temp_reg_82 = _mm_loadu_si128((__m128i *)&pi2_tmp[20 * trans_size]);
 5373|   160k|                m_temp_reg_86 = _mm_loadu_si128((__m128i *)&pi2_tmp[28 * trans_size]);
 5374|       |
 5375|       |                /* eeo0[0-3] */
 5376|   160k|                {
 5377|       |
 5378|   160k|                    m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 5379|   160k|                    m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_86);
 5380|       |
 5381|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5382|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5383|       |
 5384|   160k|                    temp1 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5385|       |
 5386|   160k|                }
 5387|       |
 5388|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[6][0]); //75 -18
 5389|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[7][0]); //89  50
 5390|       |
 5391|       |                /* eeo1[0-3] */
 5392|   160k|                {
 5393|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 5394|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 5395|       |
 5396|   160k|                    temp2 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_31);
 5397|       |
 5398|   160k|                }
 5399|       |
 5400|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[8][0]); //50 -89
 5401|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[9][0]); //18  75
 5402|       |
 5403|       |                /* eo2[0-3] */
 5404|   160k|                {
 5405|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 5406|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 5407|       |
 5408|   160k|                    temp3 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5409|       |
 5410|   160k|                }
 5411|       |
 5412|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[10][0]); //18 -50
 5413|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[11][0]); //75  -89
 5414|       |
 5415|       |                /* eo3[0-3] */
 5416|   160k|                {
 5417|   160k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_10, m_coeff3);
 5418|   160k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_11, m_coeff4);
 5419|       |
 5420|   160k|                    temp4 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
 5421|       |
 5422|   160k|                }
 5423|       |
 5424|       |
 5425|   160k|            }
 5426|       |
 5427|   160k|            m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[0][0]); //83 36
 5428|   160k|            m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[1][0]); //36 -83
 5429|       |
 5430|   160k|            m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[2][0]); //64 64
 5431|   160k|            m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_16_even_packed[3][0]); //64 -64
 5432|       |
 5433|   160k|            m_temp_reg_74 = _mm_loadu_si128((__m128i *)&pi2_tmp[8 * trans_size]);
 5434|   160k|            m_temp_reg_84 = _mm_loadu_si128((__m128i *)&pi2_tmp[24 * trans_size]);
 5435|       |
 5436|   160k|            m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_84);
 5437|       |
 5438|   160k|            m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[0 * trans_size]);
 5439|   160k|            m_temp_reg_80 = _mm_loadu_si128((__m128i *)&pi2_tmp[16 * trans_size]);
 5440|       |
 5441|   160k|            m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_80);
 5442|       |
 5443|   160k|            m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);  /* eeeo[0] */
 5444|   160k|            m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);  /* eeeo[1] */
 5445|       |
 5446|   160k|            m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);  /* eeee[0] */
 5447|   160k|            m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff4);  /* eeee[1] */
 5448|       |
 5449|       |/* eeeo[0]= m_temp_reg_20  */
 5450|       |/* eeeo[1]= m_temp_reg_21  */
 5451|       |/* eeee[0]= m_temp_reg_22  */
 5452|       |/* eeee[1]= m_temp_reg_23  */
 5453|       |
 5454|       |            /* eee[0] = eeee[0] + eeeo[0]; */
 5455|   160k|            m_temp_reg_40 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[0] */
 5456|       |
 5457|       |            /* eee[3] = eeee[0] - eeeo[0]; */
 5458|   160k|            m_temp_reg_43 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);  /* eeeo[1] */
 5459|       |
 5460|       |            /* eee[2] = eeee[1] - eeeo[1]; */
 5461|   160k|            m_temp_reg_42 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[1] */
 5462|       |
 5463|       |            /* eee[1] = eeee[1] + eeeo[1];*/
 5464|   160k|            m_temp_reg_41 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_22);  /* eeee[0] */
 5465|       |
 5466|   160k|            m_temp_reg_70 = _mm_add_epi32(m_temp_reg_40, temp1);  /* ee[0] */
 5467|   160k|            m_temp_reg_71 = _mm_sub_epi32(m_temp_reg_40, temp1);  /* ee[7] */
 5468|       |
 5469|   160k|            m_temp_reg_72 = _mm_add_epi32(m_temp_reg_41, temp2);  /* ee[1] */
 5470|   160k|            m_temp_reg_73 = _mm_sub_epi32(m_temp_reg_41, temp2);  /* ee[6] */
 5471|       |
 5472|   160k|            m_temp_reg_74 = _mm_add_epi32(m_temp_reg_42, temp3);  /* ee[2] */
 5473|   160k|            m_temp_reg_75 = _mm_sub_epi32(m_temp_reg_42, temp3);  /* ee[5] */
 5474|       |
 5475|   160k|            m_temp_reg_76 = _mm_add_epi32(m_temp_reg_43, temp4);  /* ee[3] */
 5476|   160k|            m_temp_reg_77 = _mm_sub_epi32(m_temp_reg_43, temp4);  /* ee[4] */
 5477|       |
 5478|       |/* e[]*/
 5479|       |
 5480|   160k|            temp1 = _mm_add_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[0] */
 5481|   160k|            temp2 = _mm_sub_epi32(m_temp_reg_70, m_temp_reg_90);  /* ee[15] */
 5482|       |
 5483|   160k|            temp3 = _mm_add_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[1] */
 5484|   160k|            temp4 = _mm_sub_epi32(m_temp_reg_72, m_temp_reg_91);  /* ee[14] */
 5485|       |
 5486|   160k|            temp5 = _mm_add_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[2] */
 5487|   160k|            temp6 = _mm_sub_epi32(m_temp_reg_74, m_temp_reg_92);  /* ee[13] */
 5488|       |
 5489|   160k|            temp7 = _mm_add_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[3] */
 5490|   160k|            temp8 = _mm_sub_epi32(m_temp_reg_76, m_temp_reg_93);  /* ee[12] */
 5491|       |
 5492|   160k|            m_temp_reg_90 = _mm_add_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[4] */
 5493|   160k|            m_temp_reg_91 = _mm_sub_epi32(m_temp_reg_77, m_temp_reg_94);  /* ee[11] */
 5494|       |
 5495|   160k|            m_temp_reg_92 = _mm_add_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[5] */
 5496|   160k|            m_temp_reg_93 = _mm_sub_epi32(m_temp_reg_75, m_temp_reg_95);  /* ee[10] */
 5497|       |
 5498|   160k|            m_temp_reg_94 = _mm_add_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[6] */
 5499|   160k|            m_temp_reg_95 = _mm_sub_epi32(m_temp_reg_73, m_temp_reg_96);  /* ee[9] */
 5500|       |
 5501|   160k|            m_temp_reg_96 = _mm_add_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[7] */
 5502|   160k|            m_temp_reg_97 = _mm_sub_epi32(m_temp_reg_71, m_temp_reg_97);  /* ee[8] */
 5503|       |
 5504|       |/*o[k] */
 5505|   160k|            {
 5506|       |
 5507|   160k|                WORD16 *pi2_dst_scratch = temp_ptr;
 5508|   160k|                WORD32 out_stride = 8;
 5509|       |
 5510|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[0][0]);
 5511|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[1][0]);
 5512|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[2][0]);
 5513|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[3][0]);
 5514|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[4][0]);
 5515|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[5][0]);
 5516|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[6][0]);
 5517|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[7][0]);
 5518|       |
 5519|       |
 5520|   160k|                m_temp_reg_70 = _mm_loadu_si128((__m128i *)&pi2_tmp[trans_size]);
 5521|   160k|                m_temp_reg_71 = _mm_loadu_si128((__m128i *)&pi2_tmp[3 * trans_size]);
 5522|   160k|                m_temp_reg_72 = _mm_loadu_si128((__m128i *)&pi2_tmp[5 * trans_size]);
 5523|   160k|                m_temp_reg_73 = _mm_loadu_si128((__m128i *)&pi2_tmp[7 * trans_size]);
 5524|   160k|                m_temp_reg_74 = _mm_loadu_si128((__m128i *)&pi2_tmp[9 * trans_size]);
 5525|   160k|                m_temp_reg_75 = _mm_loadu_si128((__m128i *)&pi2_tmp[11 * trans_size]);
 5526|   160k|                m_temp_reg_76 = _mm_loadu_si128((__m128i *)&pi2_tmp[13 * trans_size]);
 5527|   160k|                m_temp_reg_77 = _mm_loadu_si128((__m128i *)&pi2_tmp[15 * trans_size]);
 5528|       |
 5529|   160k|                m_temp_reg_80 = _mm_loadu_si128((__m128i *)&pi2_tmp[17 * trans_size]);
 5530|   160k|                m_temp_reg_81 = _mm_loadu_si128((__m128i *)&pi2_tmp[19 * trans_size]);
 5531|   160k|                m_temp_reg_82 = _mm_loadu_si128((__m128i *)&pi2_tmp[21 * trans_size]);
 5532|   160k|                m_temp_reg_83 = _mm_loadu_si128((__m128i *)&pi2_tmp[23 * trans_size]);
 5533|   160k|                m_temp_reg_84 = _mm_loadu_si128((__m128i *)&pi2_tmp[25 * trans_size]);
 5534|   160k|                m_temp_reg_85 = _mm_loadu_si128((__m128i *)&pi2_tmp[27 * trans_size]);
 5535|   160k|                m_temp_reg_86 = _mm_loadu_si128((__m128i *)&pi2_tmp[29 * trans_size]);
 5536|   160k|                m_temp_reg_87 = _mm_loadu_si128((__m128i *)&pi2_tmp[31 * trans_size]);
 5537|       |
 5538|   160k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71); //row 1 and row 3 interleaved
 5539|   160k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73); //row 5 and row 7 interleaved
 5540|   160k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75); //row 9 and row 11 interleaved
 5541|   160k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77); //row 13 and row 15 interleaved
 5542|   160k|                m_temp_reg_14 = _mm_unpacklo_epi16(m_temp_reg_80, m_temp_reg_81); //row 17 and row 19 interleaved
 5543|   160k|                m_temp_reg_15 = _mm_unpacklo_epi16(m_temp_reg_82, m_temp_reg_83); //row 21 and row 23 interleaved
 5544|   160k|                m_temp_reg_16 = _mm_unpacklo_epi16(m_temp_reg_84, m_temp_reg_85); //row 25 and row 27 interleaved
 5545|   160k|                m_temp_reg_17 = _mm_unpacklo_epi16(m_temp_reg_86, m_temp_reg_87); //row 29 and row 31 interleaved
 5546|       |
 5547|       |                /* o0[0-3] */
 5548|   160k|                {
 5549|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5550|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5551|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5552|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5553|       |
 5554|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5555|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5556|       |
 5557|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5558|       |
 5559|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5560|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5561|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5562|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5563|       |
 5564|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5565|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5566|       |
 5567|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5568|       |
 5569|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5570|       |
 5571|   160k|                    m_temp_reg_31 = _mm_sub_epi32(temp1, m_temp_reg_20);
 5572|   160k|                    m_temp_reg_30 = _mm_add_epi32(temp1, m_temp_reg_20);
 5573|       |
 5574|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5575|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5576|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5577|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5578|       |
 5579|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5580|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5581|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5582|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5583|       |
 5584|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5585|       |
 5586|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5587|   160k|                    pi2_dst_scratch += out_stride;
 5588|       |
 5589|   160k|                }
 5590|       |
 5591|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[8][0]);
 5592|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[9][0]);
 5593|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[10][0]);
 5594|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[11][0]);
 5595|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[12][0]);
 5596|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[13][0]);
 5597|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[14][0]);
 5598|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[15][0]);
 5599|       |
 5600|       |                /* o1[0-3] */
 5601|   160k|                {
 5602|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5603|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5604|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5605|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5606|       |
 5607|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5608|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5609|       |
 5610|   160k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_20);
 5611|       |
 5612|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5613|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5614|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5615|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5616|       |
 5617|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5618|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5619|       |
 5620|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5621|       |
 5622|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5623|       |
 5624|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp3, m_temp_reg_20);
 5625|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp3, m_temp_reg_20);
 5626|       |
 5627|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5628|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5629|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5630|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5631|       |
 5632|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5633|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5634|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5635|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5636|       |
 5637|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5638|       |
 5639|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5640|   160k|                    pi2_dst_scratch += out_stride;
 5641|       |
 5642|   160k|                }
 5643|       |
 5644|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[16][0]);
 5645|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[17][0]);
 5646|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[18][0]);
 5647|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[19][0]);
 5648|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[20][0]);
 5649|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[21][0]);
 5650|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[22][0]);
 5651|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[23][0]);
 5652|       |
 5653|       |                /* o2[0-3] */
 5654|   160k|                {
 5655|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5656|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5657|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5658|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5659|       |
 5660|   160k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 5661|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5662|       |
 5663|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5664|       |
 5665|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5666|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5667|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5668|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5669|       |
 5670|   160k|                    m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_41);
 5671|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5672|       |
 5673|   160k|                    m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_42);
 5674|       |
 5675|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5676|       |
 5677|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp5, m_temp_reg_20);
 5678|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp5, m_temp_reg_20);
 5679|       |
 5680|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5681|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5682|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5683|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5684|       |
 5685|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5686|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5687|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5688|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5689|       |
 5690|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5691|       |
 5692|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5693|   160k|                    pi2_dst_scratch += out_stride;
 5694|       |
 5695|   160k|                }
 5696|       |
 5697|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[24][0]);
 5698|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[25][0]);
 5699|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[26][0]);
 5700|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[27][0]);
 5701|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[28][0]);
 5702|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[29][0]);
 5703|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[30][0]);
 5704|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[31][0]);
 5705|       |
 5706|       |                /* o3[0-3] */
 5707|   160k|                {
 5708|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5709|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5710|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5711|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5712|       |
 5713|   160k|                    m_temp_reg_20 = _mm_sub_epi32(m_temp_reg_21, m_temp_reg_20);
 5714|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5715|       |
 5716|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5717|       |
 5718|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5719|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5720|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5721|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5722|       |
 5723|   160k|                    m_temp_reg_40 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_40);
 5724|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5725|       |
 5726|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5727|       |
 5728|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5729|       |
 5730|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp7, m_temp_reg_20);
 5731|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp7, m_temp_reg_20);
 5732|       |
 5733|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5734|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5735|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5736|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5737|       |
 5738|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5739|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5740|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5741|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5742|       |
 5743|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5744|       |
 5745|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5746|   160k|                    pi2_dst_scratch += out_stride;
 5747|       |
 5748|   160k|                }
 5749|       |
 5750|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[32][0]);
 5751|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[33][0]);
 5752|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[34][0]);
 5753|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[35][0]);
 5754|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[36][0]);
 5755|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[37][0]);
 5756|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[38][0]);
 5757|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[39][0]);
 5758|       |
 5759|       |                /* o4[0-3] */
 5760|   160k|                {
 5761|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5762|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5763|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5764|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5765|       |
 5766|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5767|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5768|       |
 5769|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5770|       |
 5771|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5772|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5773|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5774|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5775|       |
 5776|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5777|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5778|       |
 5779|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5780|       |
 5781|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5782|       |
 5783|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_90, m_temp_reg_20);
 5784|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_90, m_temp_reg_20);
 5785|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5786|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5787|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5788|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5789|       |
 5790|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5791|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5792|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5793|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5794|       |
 5795|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5796|       |
 5797|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5798|   160k|                    pi2_dst_scratch += out_stride;
 5799|       |
 5800|   160k|                }
 5801|       |
 5802|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[40][0]);
 5803|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[41][0]);
 5804|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[42][0]);
 5805|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[43][0]);
 5806|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[44][0]);
 5807|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[45][0]);
 5808|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[46][0]);
 5809|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[47][0]);
 5810|       |
 5811|       |                /* o5[0-3] */
 5812|   160k|                {
 5813|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5814|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5815|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5816|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5817|       |
 5818|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5819|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5820|       |
 5821|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5822|       |
 5823|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5824|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5825|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5826|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5827|       |
 5828|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5829|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5830|       |
 5831|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5832|       |
 5833|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5834|       |
 5835|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_92, m_temp_reg_20);
 5836|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_92, m_temp_reg_20);
 5837|       |
 5838|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5839|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5840|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5841|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5842|       |
 5843|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5844|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5845|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5846|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5847|       |
 5848|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5849|       |
 5850|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5851|   160k|                    pi2_dst_scratch += out_stride;
 5852|       |
 5853|   160k|                }
 5854|       |
 5855|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[48][0]);
 5856|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[49][0]);
 5857|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[50][0]);
 5858|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[51][0]);
 5859|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[52][0]);
 5860|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[53][0]);
 5861|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[54][0]);
 5862|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[55][0]);
 5863|       |
 5864|       |                /* o6[0-3] */
 5865|   160k|                {
 5866|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5867|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5868|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5869|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5870|       |
 5871|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5872|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5873|       |
 5874|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5875|       |
 5876|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5877|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5878|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5879|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5880|       |
 5881|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5882|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5883|       |
 5884|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5885|       |
 5886|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5887|       |
 5888|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_94, m_temp_reg_20);
 5889|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_94, m_temp_reg_20);
 5890|       |
 5891|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5892|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5893|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5894|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5895|       |
 5896|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5897|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5898|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5899|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5900|       |
 5901|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5902|       |
 5903|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5904|   160k|                    pi2_dst_scratch += out_stride;
 5905|       |
 5906|   160k|                }
 5907|       |
 5908|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[56][0]);
 5909|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[57][0]);
 5910|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[58][0]);
 5911|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[59][0]);
 5912|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[60][0]);
 5913|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[61][0]);
 5914|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[62][0]);
 5915|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[63][0]);
 5916|       |
 5917|       |                /* o7[0-3] */
 5918|   160k|                {
 5919|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5920|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5921|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5922|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5923|       |
 5924|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5925|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5926|       |
 5927|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5928|       |
 5929|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5930|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5931|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5932|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5933|       |
 5934|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5935|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5936|       |
 5937|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5938|       |
 5939|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5940|       |
 5941|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_96, m_temp_reg_20);
 5942|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_96, m_temp_reg_20);
 5943|       |
 5944|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5945|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5946|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 5947|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 5948|       |
 5949|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 5950|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 5951|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 5952|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 5953|       |
 5954|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 5955|       |
 5956|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 5957|   160k|                    pi2_dst_scratch += 8;
 5958|       |
 5959|   160k|                }
 5960|       |
 5961|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[64][0]);
 5962|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[65][0]);
 5963|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[66][0]);
 5964|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[67][0]);
 5965|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[68][0]);
 5966|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[69][0]);
 5967|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[70][0]);
 5968|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[71][0]);
 5969|       |
 5970|       |                /* o8[0-3] */
 5971|   160k|                {
 5972|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 5973|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 5974|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 5975|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 5976|       |
 5977|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 5978|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 5979|       |
 5980|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 5981|       |
 5982|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 5983|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 5984|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 5985|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 5986|       |
 5987|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 5988|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 5989|       |
 5990|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 5991|       |
 5992|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 5993|       |
 5994|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_97, m_temp_reg_20);
 5995|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_97, m_temp_reg_20);
 5996|       |
 5997|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 5998|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 5999|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6000|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6001|       |
 6002|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6003|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6004|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6005|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6006|       |
 6007|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6008|       |
 6009|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6010|   160k|                    pi2_dst_scratch += out_stride;
 6011|   160k|                }
 6012|       |
 6013|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[72][0]);
 6014|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[73][0]);
 6015|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[74][0]);
 6016|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[75][0]);
 6017|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[76][0]);
 6018|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[77][0]);
 6019|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[78][0]);
 6020|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[79][0]);
 6021|       |
 6022|       |                /* o9[0-3] */
 6023|   160k|                {
 6024|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6025|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6026|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6027|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6028|       |
 6029|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6030|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6031|       |
 6032|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6033|       |
 6034|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6035|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6036|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6037|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6038|       |
 6039|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6040|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6041|       |
 6042|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6043|       |
 6044|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6045|       |
 6046|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_95, m_temp_reg_20);
 6047|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_95, m_temp_reg_20);
 6048|       |
 6049|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6050|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6051|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6052|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6053|       |
 6054|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6055|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6056|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6057|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6058|       |
 6059|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6060|       |
 6061|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6062|   160k|                    pi2_dst_scratch += out_stride;
 6063|   160k|                }
 6064|       |
 6065|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[80][0]);
 6066|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[81][0]);
 6067|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[82][0]);
 6068|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[83][0]);
 6069|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[84][0]);
 6070|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[85][0]);
 6071|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[86][0]);
 6072|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[87][0]);
 6073|       |
 6074|       |                /* o10[0-3] */
 6075|   160k|                {
 6076|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6077|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6078|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6079|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6080|       |
 6081|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6082|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6083|       |
 6084|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6085|       |
 6086|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6087|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6088|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6089|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6090|       |
 6091|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6092|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6093|       |
 6094|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6095|       |
 6096|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6097|       |
 6098|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_93, m_temp_reg_20);
 6099|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_93, m_temp_reg_20);
 6100|       |
 6101|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6102|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6103|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6104|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6105|       |
 6106|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6107|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6108|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6109|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6110|       |
 6111|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6112|       |
 6113|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6114|   160k|                    pi2_dst_scratch += out_stride;
 6115|   160k|                }
 6116|       |
 6117|       |
 6118|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[88][0]);
 6119|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[89][0]);
 6120|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[90][0]);
 6121|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[91][0]);
 6122|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[92][0]);
 6123|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[93][0]);
 6124|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[94][0]);
 6125|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[95][0]);
 6126|       |
 6127|       |                /* o11[0-3] */
 6128|   160k|                {
 6129|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6130|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6131|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6132|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6133|       |
 6134|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6135|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6136|       |
 6137|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6138|       |
 6139|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6140|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6141|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6142|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6143|       |
 6144|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6145|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6146|       |
 6147|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6148|       |
 6149|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6150|       |
 6151|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_91, m_temp_reg_20);
 6152|   160k|                    m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_91, m_temp_reg_20);
 6153|       |
 6154|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6155|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6156|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6157|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6158|       |
 6159|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6160|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6161|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6162|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6163|       |
 6164|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6165|       |
 6166|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6167|   160k|                    pi2_dst_scratch += out_stride;
 6168|       |
 6169|   160k|                }
 6170|       |
 6171|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[96][0]);
 6172|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[97][0]);
 6173|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[98][0]);
 6174|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[99][0]);
 6175|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[100][0]);
 6176|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[101][0]);
 6177|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[102][0]);
 6178|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[103][0]);
 6179|       |
 6180|       |                /* o12[0-3] */
 6181|   160k|                {
 6182|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6183|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6184|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6185|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6186|       |
 6187|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6188|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6189|       |
 6190|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6191|       |
 6192|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6193|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6194|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6195|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6196|       |
 6197|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6198|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6199|       |
 6200|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6201|       |
 6202|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6203|       |
 6204|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp8, m_temp_reg_20);
 6205|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp8, m_temp_reg_20);
 6206|       |
 6207|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6208|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6209|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6210|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6211|       |
 6212|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6213|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6214|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6215|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6216|       |
 6217|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6218|       |
 6219|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6220|   160k|                    pi2_dst_scratch += out_stride;
 6221|       |
 6222|   160k|                }
 6223|       |
 6224|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[104][0]);
 6225|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[105][0]);
 6226|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[106][0]);
 6227|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[107][0]);
 6228|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[108][0]);
 6229|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[109][0]);
 6230|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[110][0]);
 6231|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[111][0]);
 6232|       |
 6233|       |                /* o13[0-3] */
 6234|   160k|                {
 6235|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6236|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6237|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6238|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6239|       |
 6240|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6241|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6242|       |
 6243|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6244|       |
 6245|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6246|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6247|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6248|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6249|       |
 6250|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6251|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6252|       |
 6253|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6254|       |
 6255|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6256|       |
 6257|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp6, m_temp_reg_20);
 6258|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp6, m_temp_reg_20);
 6259|       |
 6260|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6261|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6262|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6263|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6264|       |
 6265|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6266|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6267|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6268|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6269|       |
 6270|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6271|       |
 6272|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6273|   160k|                    pi2_dst_scratch += out_stride;
 6274|   160k|                }
 6275|       |
 6276|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[112][0]);
 6277|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[113][0]);
 6278|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[114][0]);
 6279|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[115][0]);
 6280|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[116][0]);
 6281|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[117][0]);
 6282|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[118][0]);
 6283|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[119][0]);
 6284|       |
 6285|       |                /* o14[0-3] */
 6286|   160k|                {
 6287|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6288|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6289|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6290|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6291|       |
 6292|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6293|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6294|       |
 6295|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6296|       |
 6297|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6298|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6299|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6300|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6301|       |
 6302|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6303|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6304|       |
 6305|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6306|       |
 6307|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6308|       |
 6309|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp4, m_temp_reg_20);
 6310|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp4, m_temp_reg_20);
 6311|       |
 6312|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6313|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6314|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6315|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6316|       |
 6317|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6318|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6319|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6320|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6321|       |
 6322|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6323|       |
 6324|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6325|   160k|                    pi2_dst_scratch += out_stride;
 6326|       |
 6327|   160k|                }
 6328|       |
 6329|   160k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[120][0]);
 6330|   160k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[121][0]);
 6331|   160k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[122][0]);
 6332|   160k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[123][0]);
 6333|   160k|                m_coeff5 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[124][0]);
 6334|   160k|                m_coeff6 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[125][0]);
 6335|   160k|                m_coeff7 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[126][0]);
 6336|   160k|                m_coeff8 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_32_intr_odd_packed[127][0]);
 6337|       |
 6338|       |                /* o15[0-3] */
 6339|   160k|                {
 6340|   160k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_10, m_coeff1);
 6341|   160k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_11, m_coeff2);
 6342|   160k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_12, m_coeff3);
 6343|   160k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_13, m_coeff4);
 6344|       |
 6345|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
 6346|   160k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
 6347|       |
 6348|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_22);
 6349|       |
 6350|   160k|                    m_temp_reg_40 = _mm_madd_epi16(m_temp_reg_14, m_coeff5);
 6351|   160k|                    m_temp_reg_41 = _mm_madd_epi16(m_temp_reg_15, m_coeff6);
 6352|   160k|                    m_temp_reg_42 = _mm_madd_epi16(m_temp_reg_16, m_coeff7);
 6353|   160k|                    m_temp_reg_43 = _mm_madd_epi16(m_temp_reg_17, m_coeff8);
 6354|       |
 6355|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_41);
 6356|   160k|                    m_temp_reg_42 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_43);
 6357|       |
 6358|   160k|                    m_temp_reg_40 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_42);
 6359|       |
 6360|   160k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_40);
 6361|       |
 6362|   160k|                    m_temp_reg_31 = _mm_add_epi32(temp2, m_temp_reg_20);
 6363|   160k|                    m_temp_reg_30 = _mm_sub_epi32(temp2, m_temp_reg_20);
 6364|       |
 6365|   160k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 6366|   160k|                    m_count = _mm_cvtsi32_si128(i4_shift);
 6367|   160k|                    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
 6368|   160k|                    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
 6369|       |
 6370|   160k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
 6371|   160k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
 6372|   160k|                    m_temp_reg_31 = _mm_sra_epi32(m_temp_reg_31, m_count);
 6373|   160k|                    m_temp_reg_30 = _mm_sra_epi32(m_temp_reg_30, m_count);
 6374|       |
 6375|   160k|                    m_temp_reg_30 = _mm_packs_epi32(m_temp_reg_30, m_temp_reg_31);
 6376|       |
 6377|   160k|                    _mm_store_si128((__m128i *)pi2_dst_scratch, m_temp_reg_30);
 6378|   160k|                    pi2_dst_scratch += 8;
 6379|   160k|                }
 6380|       |
 6381|   160k|            }
 6382|       |
 6383|   160k|        }
 6384|       |
 6385|       |        /* Transpose */
 6386|   271k|        {
 6387|       |
 6388|   271k|            WORD16 *pi2_src_scratch = temp_ptr;
 6389|   271k|            WORD32 out_stride = dst_strd;
 6390|   271k|            WORD32 in_stride = 8;
 6391|       |
 6392|   271k|            m_temp_reg_30 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6393|   271k|            pi2_src_scratch += in_stride;
 6394|   271k|            m_temp_reg_31 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6395|   271k|            pi2_src_scratch += in_stride;
 6396|   271k|            m_temp_reg_32 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6397|   271k|            pi2_src_scratch += in_stride;
 6398|   271k|            m_temp_reg_33 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6399|   271k|            pi2_src_scratch += in_stride;
 6400|   271k|            m_temp_reg_34 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6401|   271k|            pi2_src_scratch += in_stride;
 6402|   271k|            m_temp_reg_35 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6403|   271k|            pi2_src_scratch += in_stride;
 6404|   271k|            m_temp_reg_36 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6405|   271k|            pi2_src_scratch += in_stride;
 6406|   271k|            m_temp_reg_37 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6407|   271k|            pi2_src_scratch += 8;
 6408|       |
 6409|   271k|            m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6410|   271k|            pi2_src_scratch += in_stride;
 6411|   271k|            m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6412|   271k|            pi2_src_scratch += in_stride;
 6413|   271k|            m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6414|   271k|            pi2_src_scratch += in_stride;
 6415|   271k|            m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6416|   271k|            pi2_src_scratch += in_stride;
 6417|   271k|            m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6418|   271k|            pi2_src_scratch += in_stride;
 6419|   271k|            m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6420|   271k|            pi2_src_scratch += in_stride;
 6421|   271k|            m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6422|   271k|            pi2_src_scratch += in_stride;
 6423|   271k|            m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_src_scratch);
 6424|   271k|            pi2_src_scratch += 8;
 6425|       |
 6426|       |
 6427|   271k|            m_temp_reg_40 = _mm_unpacklo_epi16(m_temp_reg_30, m_temp_reg_31);
 6428|   271k|            m_temp_reg_41 = _mm_unpackhi_epi16(m_temp_reg_31, m_temp_reg_30);
 6429|       |
 6430|   271k|            m_temp_reg_42 = _mm_unpacklo_epi16(m_temp_reg_32, m_temp_reg_33);
 6431|   271k|            m_temp_reg_43 = _mm_unpackhi_epi16(m_temp_reg_33, m_temp_reg_32);
 6432|       |
 6433|   271k|            m_temp_reg_44 = _mm_unpacklo_epi16(m_temp_reg_34, m_temp_reg_35);
 6434|   271k|            m_temp_reg_45 = _mm_unpackhi_epi16(m_temp_reg_35, m_temp_reg_34);
 6435|       |
 6436|   271k|            m_temp_reg_46 = _mm_unpacklo_epi16(m_temp_reg_36, m_temp_reg_37);
 6437|   271k|            m_temp_reg_47 = _mm_unpackhi_epi16(m_temp_reg_37, m_temp_reg_36);
 6438|       |
 6439|   271k|            m_temp_reg_80 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_71);
 6440|   271k|            m_temp_reg_81 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_70);
 6441|       |
 6442|   271k|            m_temp_reg_82 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_73);
 6443|   271k|            m_temp_reg_83 = _mm_unpackhi_epi16(m_temp_reg_73, m_temp_reg_72);
 6444|       |
 6445|   271k|            m_temp_reg_84 = _mm_unpacklo_epi16(m_temp_reg_74, m_temp_reg_75);
 6446|   271k|            m_temp_reg_85 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_74);
 6447|       |
 6448|   271k|            m_temp_reg_86 = _mm_unpacklo_epi16(m_temp_reg_76, m_temp_reg_77);
 6449|   271k|            m_temp_reg_87 = _mm_unpackhi_epi16(m_temp_reg_77, m_temp_reg_76);
 6450|       |
 6451|       |
 6452|   271k|            m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_40, m_temp_reg_42);
 6453|   271k|            m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_40, m_temp_reg_42);
 6454|       |
 6455|   271k|            m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_44, m_temp_reg_46);
 6456|   271k|            m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_44, m_temp_reg_46);
 6457|       |
 6458|   271k|            m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_80, m_temp_reg_82);
 6459|   271k|            m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_80, m_temp_reg_82);
 6460|       |
 6461|   271k|            m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_84, m_temp_reg_86);
 6462|   271k|            m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_84, m_temp_reg_86);
 6463|       |
 6464|   271k|            m_temp_reg_90 = _mm_unpacklo_epi32(m_temp_reg_43, m_temp_reg_41);
 6465|   271k|            m_temp_reg_91 = _mm_unpackhi_epi32(m_temp_reg_43, m_temp_reg_41);
 6466|       |
 6467|   271k|            m_temp_reg_92 = _mm_unpacklo_epi32(m_temp_reg_47, m_temp_reg_45);
 6468|   271k|            m_temp_reg_93 = _mm_unpackhi_epi32(m_temp_reg_47, m_temp_reg_45);
 6469|       |
 6470|   271k|            m_temp_reg_94 = _mm_unpacklo_epi32(m_temp_reg_83, m_temp_reg_81);
 6471|   271k|            m_temp_reg_95 = _mm_unpackhi_epi32(m_temp_reg_83, m_temp_reg_81);
 6472|       |
 6473|   271k|            m_temp_reg_96 = _mm_unpacklo_epi32(m_temp_reg_87, m_temp_reg_85);
 6474|   271k|            m_temp_reg_97 = _mm_unpackhi_epi32(m_temp_reg_87, m_temp_reg_85);
 6475|       |
 6476|       |
 6477|   271k|            m_temp_reg_30 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_2);       // row0 = 0-7
 6478|   271k|            m_temp_reg_31 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_2);       // row1 = 0-7
 6479|       |
 6480|   271k|            m_temp_reg_32 = _mm_unpacklo_epi64(m_temp_reg_92, m_temp_reg_90);     // row0=24-31
 6481|   271k|            m_temp_reg_33 = _mm_unpackhi_epi64(m_temp_reg_92, m_temp_reg_90);     // row1=24-31
 6482|       |
 6483|   271k|            m_temp_reg_34 = _mm_unpacklo_epi64(m_temp_reg_4, m_temp_reg_6);       // row0=8-15
 6484|   271k|            m_temp_reg_35 = _mm_unpackhi_epi64(m_temp_reg_4, m_temp_reg_6);       // row1=8-15
 6485|       |
 6486|   271k|            m_temp_reg_36 = _mm_unpacklo_epi64(m_temp_reg_96, m_temp_reg_94);     // row0=16-23
 6487|   271k|            m_temp_reg_37 = _mm_unpackhi_epi64(m_temp_reg_96, m_temp_reg_94);     // row1=16-23
 6488|       |
 6489|   271k|            m_temp_reg_80 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_3);      // row2 =0-7
 6490|   271k|            m_temp_reg_81 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_3);      // row3 =0-7
 6491|       |
 6492|   271k|            m_temp_reg_82 = _mm_unpacklo_epi64(m_temp_reg_93, m_temp_reg_91);    // row2=24-31
 6493|   271k|            m_temp_reg_83 = _mm_unpackhi_epi64(m_temp_reg_93, m_temp_reg_91);    // row3=24-31
 6494|       |
 6495|   271k|            m_temp_reg_84 = _mm_unpacklo_epi64(m_temp_reg_5, m_temp_reg_7);      // row2=8-15
 6496|   271k|            m_temp_reg_85 = _mm_unpackhi_epi64(m_temp_reg_5, m_temp_reg_7);      // row3=8-15
 6497|       |
 6498|   271k|            m_temp_reg_86 = _mm_unpacklo_epi64(m_temp_reg_97, m_temp_reg_95);    // row2=16-23
 6499|   271k|            m_temp_reg_87 = _mm_unpackhi_epi64(m_temp_reg_97, m_temp_reg_95);    // row3=16-23
 6500|       |
 6501|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6502|       |
 6503|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6504|       |
 6505|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_30, m_temp_reg_0);
 6506|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6507|       |
 6508|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6509|       |
 6510|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_34, m_temp_reg_0);
 6511|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6512|       |
 6513|   271k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6514|       |
 6515|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6516|       |
 6517|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6518|       |
 6519|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_36, m_temp_reg_0);
 6520|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6521|       |
 6522|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6523|       |
 6524|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_32, m_temp_reg_0);
 6525|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6526|       |
 6527|   271k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6528|   271k|            pu1_dst += out_stride;
 6529|   271k|            pu1_pred += pred_strd;
 6530|       |
 6531|       |
 6532|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6533|       |
 6534|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6535|       |
 6536|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_31, m_temp_reg_0);
 6537|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6538|       |
 6539|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6540|       |
 6541|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_35, m_temp_reg_0);
 6542|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6543|       |
 6544|   271k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6545|       |
 6546|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6547|       |
 6548|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6549|       |
 6550|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_37, m_temp_reg_0);
 6551|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6552|       |
 6553|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6554|       |
 6555|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_33, m_temp_reg_0);
 6556|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6557|       |
 6558|   271k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6559|   271k|            pu1_dst += out_stride;
 6560|   271k|            pu1_pred += pred_strd;
 6561|       |
 6562|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6563|       |
 6564|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6565|       |
 6566|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_80, m_temp_reg_0);
 6567|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6568|       |
 6569|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6570|       |
 6571|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_84, m_temp_reg_0);
 6572|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6573|       |
 6574|   271k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6575|       |
 6576|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6577|       |
 6578|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6579|       |
 6580|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_86, m_temp_reg_0);
 6581|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6582|       |
 6583|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6584|       |
 6585|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_82, m_temp_reg_0);
 6586|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6587|       |
 6588|   271k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6589|   271k|            pu1_dst += out_stride;
 6590|   271k|            pu1_pred += pred_strd;
 6591|       |
 6592|       |
 6593|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)pu1_pred);
 6594|       |
 6595|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6596|       |
 6597|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_81, m_temp_reg_0);
 6598|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6599|       |
 6600|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6601|       |
 6602|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_85, m_temp_reg_0);
 6603|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6604|       |
 6605|   271k|            _mm_storeu_si128((__m128i *)pu1_dst, m_temp_reg_20);
 6606|       |
 6607|   271k|            m_temp_reg_20 = _mm_loadu_si128((__m128i *)(pu1_pred + 16));
 6608|       |
 6609|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_20, all_zero_reg);
 6610|       |
 6611|   271k|            m_temp_reg_40 = _mm_add_epi16(m_temp_reg_87, m_temp_reg_0);
 6612|   271k|            m_temp_reg_0 = _mm_srli_si128(m_temp_reg_20, 8);
 6613|       |
 6614|   271k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, all_zero_reg);
 6615|       |
 6616|   271k|            m_temp_reg_44 = _mm_add_epi16(m_temp_reg_83, m_temp_reg_0);
 6617|   271k|            m_temp_reg_20 = _mm_packus_epi16(m_temp_reg_40, m_temp_reg_44);
 6618|       |
 6619|   271k|            _mm_storeu_si128((__m128i *)(pu1_dst + 16), m_temp_reg_20);
 6620|   271k|            pu1_dst += out_stride;
 6621|   271k|            pu1_pred += pred_strd;
 6622|       |
 6623|   271k|        }
 6624|   271k|        pi2_tmp += 4;
 6625|   271k|    }
 6626|  34.1k|}

ihevc_itrans_recon_4x4_ttype1_sse42:
  120|  30.9k|{
  121|  30.9k|    __m128i m_temp_reg_0;
  122|  30.9k|    __m128i m_temp_reg_1;
  123|  30.9k|    __m128i m_temp_reg_2;
  124|  30.9k|    __m128i m_temp_reg_3;
  125|  30.9k|    __m128i m_temp_reg_4;
  126|  30.9k|    __m128i m_temp_reg_10;
  127|  30.9k|    __m128i m_temp_reg_11;
  128|  30.9k|    __m128i m_temp_reg_12;
  129|  30.9k|    __m128i m_temp_reg_13;
  130|  30.9k|    __m128i m_temp_reg_14;
  131|  30.9k|    __m128i m_temp_reg_20;
  132|  30.9k|    __m128i m_temp_reg_21;
  133|  30.9k|    __m128i m_temp_reg_22;
  134|  30.9k|    __m128i m_temp_reg_23;
  135|  30.9k|    __m128i m_temp_reg_24;
  136|  30.9k|    __m128i m_temp_reg_25;
  137|  30.9k|    __m128i m_temp_reg_30;
  138|  30.9k|    __m128i m_temp_reg_31;
  139|  30.9k|    __m128i m_temp_reg_32;
  140|  30.9k|    __m128i m_temp_reg_33;
  141|  30.9k|    __m128i m_temp_reg_34;
  142|  30.9k|    __m128i m_temp_reg_35;
  143|  30.9k|    __m128i m_temp_reg_36;
  144|  30.9k|    __m128i m_coeff1, m_coeff2, m_coeff3;
  145|  30.9k|    __m128i m_rdng_factor;
  146|  30.9k|    __m128i m_count;
  147|       |
  148|  30.9k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  30.9k|#define IT_SHIFT_STAGE_1 7
  ------------------
  149|  30.9k|    UNUSED(zero_rows);
  ------------------
  |  |   38|  30.9k|#define UNUSED(x) ((void)(x))
  ------------------
  150|  30.9k|    UNUSED(zero_cols);
  ------------------
  |  |   38|  30.9k|#define UNUSED(x) ((void)(x))
  ------------------
  151|  30.9k|    UNUSED(pi2_tmp);
  ------------------
  |  |   38|  30.9k|#define UNUSED(x) ((void)(x))
  ------------------
  152|       |
  153|  30.9k|    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_4_ttype1[2][0]); //74
  154|       |
  155|  30.9k|    m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pi2_src);
  156|  30.9k|    pi2_src += src_strd;
  157|  30.9k|    m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pi2_src);
  158|  30.9k|    pi2_src += src_strd;
  159|  30.9k|    m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pi2_src);
  160|  30.9k|    pi2_src += src_strd;
  161|  30.9k|    m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pi2_src);
  162|       |
  163|  30.9k|    m_temp_reg_0 = _mm_cvtepi16_epi32(m_temp_reg_0);
  164|  30.9k|    m_temp_reg_2 = _mm_cvtepi16_epi32(m_temp_reg_2);
  165|       |
  166|  30.9k|    m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_1);
  167|  30.9k|    m_temp_reg_3 = _mm_cvtepi16_epi32(m_temp_reg_3);
  168|       |
  169|       |    /* c[4] in m_temp_reg_14 */
  170|       |    /* c[4] = src[0] - src[2] + src[3] */
  171|  30.9k|    {
  172|  30.9k|        m_temp_reg_14 = _mm_sub_epi32(m_temp_reg_0, m_temp_reg_2);
  173|  30.9k|    }
  174|       |
  175|       |    /* c[3] in m_temp_reg_13 */
  176|  30.9k|    {
  177|  30.9k|        m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_1, m_coeff3);
  178|  30.9k|    }
  179|       |
  180|       |    /* c[0] in m_temp_reg_10 */
  181|  30.9k|    {
  182|  30.9k|        m_temp_reg_10 = _mm_add_epi32(m_temp_reg_0, m_temp_reg_2);
  183|  30.9k|    }
  184|       |
  185|       |    /* c[1] in m_temp_reg_11 */
  186|  30.9k|    {
  187|  30.9k|        m_temp_reg_11 = _mm_add_epi32(m_temp_reg_2, m_temp_reg_3);
  188|  30.9k|    }
  189|       |
  190|       |    /* c[2] in m_temp_reg_12 */
  191|  30.9k|    {
  192|  30.9k|        m_temp_reg_12 = _mm_sub_epi32(m_temp_reg_0, m_temp_reg_3);
  193|  30.9k|    }
  194|       |
  195|       |    /* c[4] in m_temp_reg_14 */
  196|       |    /* c[4] = src[0] - src[2] + src[3] */
  197|  30.9k|    {
  198|  30.9k|        m_temp_reg_14 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_3);
  199|  30.9k|    }
  200|       |
  201|  30.9k|    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_4_ttype1[1][0]); //29
  202|  30.9k|    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_4_ttype1[0][0]); //55
  203|       |
  204|       |    /* Stage 1 outputs stored in m_temp_reg_20-23 */
  205|  30.9k|    {
  206|  30.9k|        m_temp_reg_30 = _mm_mullo_epi32(m_temp_reg_10, m_coeff1); //29*c0
  207|  30.9k|        m_temp_reg_31 = _mm_mullo_epi32(m_temp_reg_11, m_coeff2); //55*c1
  208|       |
  209|  30.9k|        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  210|       |
  211|  30.9k|        m_temp_reg_32 = _mm_mullo_epi32(m_temp_reg_11, m_coeff1); //29*c1
  212|  30.9k|        m_temp_reg_33 = _mm_mullo_epi32(m_temp_reg_12, m_coeff2); //55*c2
  213|       |
  214|  30.9k|        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  215|       |
  216|  30.9k|        m_temp_reg_34 = _mm_mullo_epi32(m_temp_reg_10, m_coeff2); //55*c0
  217|  30.9k|        m_temp_reg_35 = _mm_mullo_epi32(m_temp_reg_12, m_coeff1); //29*c2
  218|  30.9k|        m_temp_reg_36 = _mm_mullo_epi32(m_temp_reg_14, m_coeff3); //74*c4
  219|       |
  220|  30.9k|        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  221|  30.9k|        m_count = _mm_cvtsi32_si128(i4_shift);
  222|       |
  223|  30.9k|        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
  224|  30.9k|        m_temp_reg_4 = _mm_add_epi32(m_rdng_factor, m_temp_reg_13);
  225|  30.9k|        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_4);
  226|       |
  227|  30.9k|        m_temp_reg_21 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
  228|  30.9k|        m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_4);
  229|       |
  230|  30.9k|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_35);
  231|  30.9k|        m_temp_reg_4 = _mm_sub_epi32(m_rdng_factor, m_temp_reg_13);
  232|  30.9k|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_4);
  233|       |
  234|  30.9k|        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_36, m_rdng_factor);
  235|       |
  236|  30.9k|        m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  237|  30.9k|        m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  238|  30.9k|        m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  239|  30.9k|        m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  240|       |
  241|  30.9k|        m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  242|  30.9k|        m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  243|  30.9k|        m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  244|  30.9k|        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  245|       |
  246|  30.9k|        m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  247|  30.9k|        m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  248|       |
  249|  30.9k|        m_temp_reg_20 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  250|  30.9k|        m_temp_reg_21 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  251|       |
  252|  30.9k|    }
  253|       |
  254|       |    /* Stage 2 */
  255|  30.9k|    {
  256|  30.9k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  30.9k|#define IT_SHIFT_STAGE_2 12
  ------------------
  257|       |
  258|  30.9k|        m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  259|  30.9k|        m_temp_reg_20 = _mm_cvtepi16_epi32(m_temp_reg_20);
  260|  30.9k|        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  261|  30.9k|        m_temp_reg_21 = _mm_cvtepi16_epi32(m_temp_reg_21);
  262|  30.9k|        m_temp_reg_22 = _mm_cvtepi16_epi32(m_temp_reg_22);
  263|  30.9k|        m_temp_reg_23 = _mm_cvtepi16_epi32(m_temp_reg_23);
  264|       |
  265|       |        /* c[4] stored in m_temp_reg_4 */
  266|  30.9k|        {
  267|  30.9k|            m_temp_reg_4 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
  268|  30.9k|        }
  269|       |
  270|       |        /* c[3] stored in m_temp_reg_3 */
  271|  30.9k|        {
  272|  30.9k|            m_temp_reg_3 = _mm_mullo_epi32(m_temp_reg_22, m_coeff3);
  273|  30.9k|        }
  274|       |
  275|       |        /* c[0] stored in m_temp_reg_0 */
  276|  30.9k|        {
  277|  30.9k|            m_temp_reg_0 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
  278|  30.9k|        }
  279|       |
  280|       |        /* c[1] stored in m_temp_reg_1 */
  281|  30.9k|        {
  282|  30.9k|            m_temp_reg_1 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_21);
  283|  30.9k|        }
  284|       |
  285|       |        /* c[2] stored in m_temp_reg_2 */
  286|  30.9k|        {
  287|  30.9k|            m_temp_reg_2 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_23);
  288|  30.9k|        }
  289|       |
  290|       |        /* c[4] stored in m_temp_reg_4 */
  291|  30.9k|        {
  292|  30.9k|            m_temp_reg_4 = _mm_add_epi32(m_temp_reg_4, m_temp_reg_23);
  293|  30.9k|        }
  294|       |
  295|       |        /* Stage 2 output generation */
  296|  30.9k|        {
  297|  30.9k|            m_temp_reg_30 = _mm_mullo_epi32(m_temp_reg_0, m_coeff1); //29*c0
  298|  30.9k|            m_temp_reg_31 = _mm_mullo_epi32(m_temp_reg_1, m_coeff2); //55*c1
  299|       |
  300|  30.9k|            m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  301|       |
  302|  30.9k|            m_temp_reg_32 = _mm_mullo_epi32(m_temp_reg_1, m_coeff1); //29*c1
  303|  30.9k|            m_temp_reg_33 = _mm_mullo_epi32(m_temp_reg_2, m_coeff2); //55*c2
  304|       |
  305|  30.9k|            m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  306|       |
  307|  30.9k|            m_temp_reg_34 = _mm_mullo_epi32(m_temp_reg_0, m_coeff2); //55*c0
  308|  30.9k|            m_temp_reg_35 = _mm_mullo_epi32(m_temp_reg_2, m_coeff1); //29*c2
  309|  30.9k|            m_temp_reg_36 = _mm_mullo_epi32(m_temp_reg_4, m_coeff3); //74*c4
  310|       |
  311|  30.9k|            m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  312|  30.9k|            m_count = _mm_cvtsi32_si128(i4_shift);
  313|       |
  314|  30.9k|            m_temp_reg_4 = _mm_add_epi32(m_rdng_factor, m_temp_reg_3);
  315|  30.9k|            m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
  316|  30.9k|            m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_4);
  317|       |
  318|  30.9k|            m_temp_reg_21 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
  319|  30.9k|            m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_4);
  320|       |
  321|  30.9k|            m_temp_reg_4 = _mm_sub_epi32(m_rdng_factor, m_temp_reg_3);
  322|  30.9k|            m_temp_reg_23 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_35);
  323|  30.9k|            m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_4);
  324|       |
  325|  30.9k|            m_temp_reg_22 = _mm_add_epi32(m_temp_reg_36, m_rdng_factor);
  326|       |
  327|  30.9k|            m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  328|  30.9k|            m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  329|  30.9k|            m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  330|  30.9k|            m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  331|       |
  332|  30.9k|            m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  333|  30.9k|            m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  334|  30.9k|            m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  335|  30.9k|            m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  336|       |
  337|  30.9k|            m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  338|  30.9k|            m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  339|       |
  340|  30.9k|            m_temp_reg_20 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  341|  30.9k|            m_temp_reg_21 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  342|  30.9k|        }
  343|       |
  344|       |        /* Recon and store */
  345|  30.9k|        {
  346|  30.9k|            WORD32 *pi4_dst = (WORD32 *)pu1_dst;
  347|       |
  348|  30.9k|            m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
  349|  30.9k|            pu1_pred += pred_strd;
  350|  30.9k|            m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
  351|  30.9k|            pu1_pred += pred_strd;
  352|  30.9k|            m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
  353|  30.9k|            pu1_pred += pred_strd;
  354|  30.9k|            m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
  355|       |
  356|  30.9k|            m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
  357|  30.9k|            m_temp_reg_1 = _mm_cvtepu8_epi16(m_temp_reg_1);
  358|  30.9k|            m_temp_reg_2 = _mm_cvtepu8_epi16(m_temp_reg_2);
  359|  30.9k|            m_temp_reg_3 = _mm_cvtepu8_epi16(m_temp_reg_3);
  360|  30.9k|            m_temp_reg_0 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_1);
  361|  30.9k|            m_temp_reg_1 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_3);
  362|       |
  363|  30.9k|            m_temp_reg_20 = _mm_add_epi16(m_temp_reg_20, m_temp_reg_0);
  364|  30.9k|            m_temp_reg_21 = _mm_add_epi16(m_temp_reg_21, m_temp_reg_1);
  365|       |
  366|  30.9k|            m_temp_reg_0 = _mm_packus_epi16(m_temp_reg_20, m_temp_reg_21);
  367|       |
  368|  30.9k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_0);
  369|  30.9k|            m_temp_reg_1 = _mm_srli_si128(m_temp_reg_0, 4);
  370|  30.9k|            m_temp_reg_2 = _mm_srli_si128(m_temp_reg_0, 8);
  371|  30.9k|            m_temp_reg_3 = _mm_srli_si128(m_temp_reg_0, 12);
  372|  30.9k|            pu1_dst += dst_strd;
  373|  30.9k|            pi4_dst = (WORD32 *)(pu1_dst);
  374|       |
  375|  30.9k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_1);
  376|  30.9k|            pu1_dst += dst_strd;
  377|  30.9k|            pi4_dst = (WORD32 *)(pu1_dst);
  378|       |
  379|  30.9k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_2);
  380|  30.9k|            pu1_dst += dst_strd;
  381|  30.9k|            pi4_dst = (WORD32 *)(pu1_dst);
  382|       |
  383|  30.9k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_3);
  384|  30.9k|        }
  385|  30.9k|    }
  386|  30.9k|}
ihevc_itrans_recon_4x4_sse42:
  450|  1.56k|{
  451|       |
  452|       |
  453|  1.56k|    __m128i m_temp_reg_0;
  454|  1.56k|    __m128i m_temp_reg_1;
  455|  1.56k|    __m128i m_temp_reg_2;
  456|  1.56k|    __m128i m_temp_reg_3;
  457|  1.56k|    __m128i m_temp_reg_10;
  458|  1.56k|    __m128i m_temp_reg_11;
  459|  1.56k|    __m128i m_temp_reg_12;
  460|  1.56k|    __m128i m_temp_reg_13;
  461|  1.56k|    __m128i m_temp_reg_14;
  462|  1.56k|    __m128i m_temp_reg_15;
  463|  1.56k|    __m128i m_temp_reg_20;
  464|  1.56k|    __m128i m_temp_reg_21;
  465|  1.56k|    __m128i m_temp_reg_22;
  466|  1.56k|    __m128i m_temp_reg_23;
  467|  1.56k|    __m128i m_temp_reg_24;
  468|  1.56k|    __m128i m_temp_reg_25;
  469|  1.56k|    __m128i m_temp_reg_30;
  470|  1.56k|    __m128i m_temp_reg_31;
  471|  1.56k|    __m128i m_temp_reg_33;
  472|  1.56k|    __m128i m_temp_reg_34;
  473|  1.56k|    __m128i m_coeff1, m_coeff3;
  474|  1.56k|    __m128i m_rdng_factor;
  475|  1.56k|    __m128i m_count;
  476|       |
  477|       |
  478|  1.56k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  1.56k|#define IT_SHIFT_STAGE_1 7
  ------------------
  479|  1.56k|    UNUSED(zero_rows);
  ------------------
  |  |   38|  1.56k|#define UNUSED(x) ((void)(x))
  ------------------
  480|  1.56k|    UNUSED(zero_cols);
  ------------------
  |  |   38|  1.56k|#define UNUSED(x) ((void)(x))
  ------------------
  481|  1.56k|    UNUSED(pi2_tmp);
  ------------------
  |  |   38|  1.56k|#define UNUSED(x) ((void)(x))
  ------------------
  482|       |
  483|       |
  484|  1.56k|    m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pi2_src);
  485|  1.56k|    pi2_src += src_strd;
  486|  1.56k|    m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pi2_src);
  487|  1.56k|    pi2_src += src_strd;
  488|  1.56k|    m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pi2_src);
  489|  1.56k|    pi2_src += src_strd;
  490|  1.56k|    m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pi2_src);
  491|       |
  492|  1.56k|    m_temp_reg_0 = _mm_cvtepi16_epi32(m_temp_reg_0);
  493|  1.56k|    m_temp_reg_2 = _mm_cvtepi16_epi32(m_temp_reg_2);
  494|       |
  495|  1.56k|    m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_1);
  496|  1.56k|    m_temp_reg_3 = _mm_cvtepi16_epi32(m_temp_reg_3);
  497|       |
  498|       |
  499|  1.56k|    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_4_ttype0[0][0]); //36
  500|  1.56k|    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai4_ihevc_trans_4_ttype0[2][0]); //83
  501|       |
  502|       |    /* e */
  503|  1.56k|    {
  504|  1.56k|        m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_0, 6);
  505|  1.56k|        m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_2, 6);
  506|  1.56k|    }
  507|       |
  508|       |    /* o */
  509|  1.56k|    {
  510|  1.56k|        m_temp_reg_12 = _mm_mullo_epi32(m_temp_reg_1, m_coeff1); //src[1]*36
  511|  1.56k|        m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_3, m_coeff3); //src[3]*83
  512|  1.56k|        m_temp_reg_14 = _mm_mullo_epi32(m_temp_reg_1, m_coeff3); //src[1]*83
  513|  1.56k|        m_temp_reg_15 = _mm_mullo_epi32(m_temp_reg_3, m_coeff1); //src[3]*36
  514|  1.56k|    }
  515|       |
  516|  1.56k|    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  517|       |
  518|       |    /* e1 stored in m_temp_reg_31 */
  519|  1.56k|    {
  520|  1.56k|        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_11);
  521|  1.56k|    }
  522|       |
  523|  1.56k|    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  524|       |
  525|       |    /* e0 stored in m_temp_reg_30 */
  526|  1.56k|    {
  527|  1.56k|        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_11);
  528|  1.56k|    }
  529|       |
  530|  1.56k|    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  531|  1.56k|    m_count = _mm_cvtsi32_si128(i4_shift);
  532|       |
  533|       |    /* o1 stored in m_temp_reg_33 */
  534|  1.56k|    {
  535|  1.56k|        m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_13);
  536|  1.56k|    }
  537|       |
  538|       |    /* e1 + add */
  539|  1.56k|    {
  540|  1.56k|        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  541|  1.56k|    }
  542|       |
  543|       |    /* e0 + add */
  544|  1.56k|    {
  545|  1.56k|        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  546|  1.56k|    }
  547|       |
  548|       |    /* o0 stored in m_temp_reg_34 */
  549|  1.56k|    {
  550|  1.56k|        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_15);
  551|  1.56k|    }
  552|       |
  553|       |    /* Stage 1 outputs */
  554|  1.56k|    {
  555|  1.56k|        m_temp_reg_21 = _mm_add_epi32(m_temp_reg_31, m_temp_reg_33);
  556|  1.56k|        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_31, m_temp_reg_33);
  557|       |
  558|  1.56k|        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_34);
  559|  1.56k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_34);
  560|       |
  561|       |
  562|  1.56k|        m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  563|  1.56k|        m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  564|  1.56k|        m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  565|  1.56k|        m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  566|       |
  567|  1.56k|        m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  568|  1.56k|        m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  569|  1.56k|        m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  570|  1.56k|        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  571|       |
  572|  1.56k|        m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  573|  1.56k|        m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  574|       |
  575|  1.56k|        m_temp_reg_20 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  576|  1.56k|        m_temp_reg_21 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  577|  1.56k|    }
  578|       |
  579|       |    /* Stage 2 */
  580|  1.56k|    {
  581|  1.56k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  1.56k|#define IT_SHIFT_STAGE_2 12
  ------------------
  582|       |
  583|  1.56k|        m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  584|  1.56k|        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  585|       |
  586|  1.56k|        m_temp_reg_20 = _mm_cvtepi16_epi32(m_temp_reg_20);
  587|  1.56k|        m_temp_reg_21 = _mm_cvtepi16_epi32(m_temp_reg_21);
  588|       |
  589|  1.56k|        m_temp_reg_22 = _mm_cvtepi16_epi32(m_temp_reg_22);
  590|  1.56k|        m_temp_reg_23 = _mm_cvtepi16_epi32(m_temp_reg_23);
  591|       |
  592|       |        /* e */
  593|  1.56k|        {
  594|  1.56k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_20, 6);
  595|  1.56k|        }
  596|       |
  597|       |        /* o */
  598|  1.56k|        {
  599|  1.56k|            m_temp_reg_12 = _mm_mullo_epi32(m_temp_reg_22, m_coeff1); //src[1]*36
  600|  1.56k|            m_temp_reg_14 = _mm_mullo_epi32(m_temp_reg_22, m_coeff3); //src[1]*83
  601|  1.56k|            m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_23, m_coeff3); //src[3]*83
  602|  1.56k|            m_temp_reg_15 = _mm_mullo_epi32(m_temp_reg_23, m_coeff1); //src[3]*36
  603|  1.56k|        }
  604|       |
  605|       |        /* e */
  606|  1.56k|        {
  607|  1.56k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_21, 6);
  608|  1.56k|        }
  609|       |
  610|  1.56k|        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  611|       |
  612|       |        /* e1 stored in m_temp_reg_31 */
  613|  1.56k|        {
  614|  1.56k|            m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_11);
  615|  1.56k|        }
  616|       |
  617|  1.56k|        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  618|       |
  619|       |        /* e0 stored in m_temp_reg_30 */
  620|  1.56k|        {
  621|  1.56k|            m_temp_reg_30 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_11);
  622|  1.56k|        }
  623|       |
  624|  1.56k|        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  625|  1.56k|        m_count = _mm_cvtsi32_si128(i4_shift);
  626|       |
  627|       |        /* o1 stored in m_temp_reg_33 */
  628|  1.56k|        {
  629|  1.56k|            m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_13);
  630|  1.56k|        }
  631|       |
  632|       |        /* e1 + add */
  633|  1.56k|        {
  634|  1.56k|            m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  635|  1.56k|        }
  636|       |
  637|       |        /* e0 + add */
  638|  1.56k|        {
  639|  1.56k|            m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  640|  1.56k|        }
  641|       |
  642|       |        /* o0 stored in m_temp_reg_34 */
  643|  1.56k|        {
  644|  1.56k|            m_temp_reg_34 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_15);
  645|  1.56k|        }
  646|       |
  647|       |        /* Stage 2 outputs */
  648|  1.56k|        {
  649|  1.56k|            m_temp_reg_21 = _mm_add_epi32(m_temp_reg_31, m_temp_reg_33);
  650|  1.56k|            m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_31, m_temp_reg_33);
  651|  1.56k|            m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_34);
  652|  1.56k|            m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_34);
  653|       |
  654|  1.56k|            m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  655|  1.56k|            m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  656|  1.56k|            m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  657|  1.56k|            m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  658|       |
  659|  1.56k|            m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  660|  1.56k|            m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  661|  1.56k|            m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  662|  1.56k|            m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  663|       |
  664|  1.56k|            m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  665|  1.56k|            m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  666|       |
  667|  1.56k|            m_temp_reg_20 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  668|  1.56k|            m_temp_reg_21 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  669|  1.56k|        }
  670|       |
  671|       |        /* Recon and store */
  672|  1.56k|        {
  673|  1.56k|            UWORD32 *pu4_dst = (UWORD32 *)pu1_dst;
  674|       |
  675|  1.56k|            m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
  676|  1.56k|            pu1_pred += pred_strd;
  677|  1.56k|            m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
  678|  1.56k|            pu1_pred += pred_strd;
  679|  1.56k|            m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
  680|  1.56k|            pu1_pred += pred_strd;
  681|  1.56k|            m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
  682|       |
  683|  1.56k|            m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
  684|  1.56k|            m_temp_reg_1 = _mm_cvtepu8_epi16(m_temp_reg_1);
  685|  1.56k|            m_temp_reg_0 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_1);
  686|  1.56k|            m_temp_reg_2 = _mm_cvtepu8_epi16(m_temp_reg_2);
  687|  1.56k|            m_temp_reg_3 = _mm_cvtepu8_epi16(m_temp_reg_3);
  688|  1.56k|            m_temp_reg_1 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_3);
  689|       |
  690|  1.56k|            m_temp_reg_20 = _mm_add_epi16(m_temp_reg_20, m_temp_reg_0);
  691|  1.56k|            m_temp_reg_21 = _mm_add_epi16(m_temp_reg_21, m_temp_reg_1);
  692|       |
  693|  1.56k|            m_temp_reg_0 = _mm_packus_epi16(m_temp_reg_20, m_temp_reg_21);
  694|       |
  695|  1.56k|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_0);
  696|  1.56k|            m_temp_reg_1 = _mm_srli_si128(m_temp_reg_0, 4);
  697|  1.56k|            m_temp_reg_2 = _mm_srli_si128(m_temp_reg_0, 8);
  698|  1.56k|            m_temp_reg_3 = _mm_srli_si128(m_temp_reg_0, 12);
  699|  1.56k|            pu1_dst += dst_strd;
  700|  1.56k|            pu4_dst = (UWORD32 *)(pu1_dst);
  701|       |
  702|  1.56k|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_1);
  703|  1.56k|            pu1_dst += dst_strd;
  704|  1.56k|            pu4_dst = (UWORD32 *)(pu1_dst);
  705|       |
  706|  1.56k|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_2);
  707|  1.56k|            pu1_dst += dst_strd;
  708|  1.56k|            pu4_dst = (UWORD32 *)(pu1_dst);
  709|       |
  710|  1.56k|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_3);
  711|  1.56k|        }
  712|  1.56k|    }
  713|  1.56k|}
ihevc_itrans_recon_8x8_sse42:
  780|  9.28k|{
  781|  9.28k|    __m128i m_temp_reg_0;
  782|  9.28k|    __m128i m_temp_reg_1;
  783|  9.28k|    __m128i m_temp_reg_2;
  784|  9.28k|    __m128i m_temp_reg_3;
  785|  9.28k|    __m128i m_temp_reg_5;
  786|  9.28k|    __m128i m_temp_reg_6;
  787|  9.28k|    __m128i m_temp_reg_7;
  788|  9.28k|    __m128i m_temp_reg_4;
  789|  9.28k|    __m128i m_temp_reg_10;
  790|  9.28k|    __m128i m_temp_reg_11;
  791|  9.28k|    __m128i m_temp_reg_12;
  792|  9.28k|    __m128i m_temp_reg_13;
  793|  9.28k|    __m128i m_temp_reg_14;
  794|  9.28k|    __m128i m_temp_reg_15;
  795|  9.28k|    __m128i m_temp_reg_16;
  796|  9.28k|    __m128i m_temp_reg_17;
  797|  9.28k|    __m128i m_temp_reg_20;
  798|  9.28k|    __m128i m_temp_reg_21;
  799|  9.28k|    __m128i m_temp_reg_22;
  800|  9.28k|    __m128i m_temp_reg_23;
  801|  9.28k|    __m128i m_temp_reg_24;
  802|  9.28k|    __m128i m_temp_reg_25;
  803|  9.28k|    __m128i m_temp_reg_26;
  804|  9.28k|    __m128i m_temp_reg_27;
  805|  9.28k|    __m128i m_temp_reg_30;
  806|  9.28k|    __m128i m_temp_reg_31;
  807|  9.28k|    __m128i m_temp_reg_32;
  808|  9.28k|    __m128i m_temp_reg_33;
  809|  9.28k|    __m128i m_temp_reg_34;
  810|  9.28k|    __m128i m_temp_reg_35;
  811|  9.28k|    __m128i m_temp_reg_36;
  812|  9.28k|    __m128i m_temp_reg_37;
  813|  9.28k|    __m128i m_temp_reg_40;
  814|  9.28k|    __m128i m_temp_reg_41;
  815|  9.28k|    __m128i m_temp_reg_42;
  816|  9.28k|    __m128i m_temp_reg_43;
  817|  9.28k|    __m128i m_temp_reg_44;
  818|  9.28k|    __m128i m_temp_reg_45;
  819|  9.28k|    __m128i m_temp_reg_46;
  820|  9.28k|    __m128i m_temp_reg_47;
  821|  9.28k|    __m128i m_temp_reg_50;
  822|  9.28k|    __m128i m_temp_reg_51;
  823|  9.28k|    __m128i m_temp_reg_52;
  824|  9.28k|    __m128i m_temp_reg_53;
  825|  9.28k|    __m128i m_temp_reg_54;
  826|  9.28k|    __m128i m_temp_reg_55;
  827|  9.28k|    __m128i m_temp_reg_56;
  828|  9.28k|    __m128i m_temp_reg_57;
  829|  9.28k|    __m128i m_temp_reg_60;
  830|  9.28k|    __m128i m_temp_reg_61;
  831|  9.28k|    __m128i m_temp_reg_62;
  832|  9.28k|    __m128i m_temp_reg_63;
  833|  9.28k|    __m128i m_temp_reg_64;
  834|  9.28k|    __m128i m_temp_reg_65;
  835|  9.28k|    __m128i m_temp_reg_66;
  836|  9.28k|    __m128i m_temp_reg_67;
  837|  9.28k|    __m128i m_temp_reg_70;
  838|  9.28k|    __m128i m_temp_reg_71;
  839|  9.28k|    __m128i m_temp_reg_72;
  840|  9.28k|    __m128i m_temp_reg_73;
  841|  9.28k|    __m128i m_temp_reg_74;
  842|  9.28k|    __m128i m_temp_reg_75;
  843|  9.28k|    __m128i m_temp_reg_76;
  844|  9.28k|    __m128i m_temp_reg_77;
  845|  9.28k|    __m128i m_coeff1, m_coeff2, m_coeff3, m_coeff4;
  846|       |
  847|  9.28k|    WORD32 check_row_stage_1;   /* Lokesh */
  848|  9.28k|    WORD32 check_row_stage_2;   /* Lokesh */
  849|       |
  850|  9.28k|    __m128i m_rdng_factor;
  851|  9.28k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  9.28k|#define IT_SHIFT_STAGE_1 7
  ------------------
  852|  9.28k|    UNUSED(pi2_tmp);
  ------------------
  |  |   38|  9.28k|#define UNUSED(x) ((void)(x))
  ------------------
  853|  9.28k|    check_row_stage_1   = ((zero_rows & 0xF0) != 0xF0) ? 1 : 0;
  ------------------
  |  Branch (853:27): [True: 2.70k, False: 6.58k]
  ------------------
  854|  9.28k|    check_row_stage_2   = ((zero_cols & 0xF0) != 0xF0) ? 1 : 0;
  ------------------
  |  Branch (854:27): [True: 2.72k, False: 6.56k]
  ------------------
  855|       |
  856|  9.28k|    m_temp_reg_70 = _mm_loadu_si128((__m128i *)pi2_src);
  857|  9.28k|    pi2_src += src_strd;
  858|  9.28k|    m_temp_reg_71 = _mm_loadu_si128((__m128i *)pi2_src);
  859|  9.28k|    pi2_src += src_strd;
  860|  9.28k|    m_temp_reg_72 = _mm_loadu_si128((__m128i *)pi2_src);
  861|  9.28k|    pi2_src += src_strd;
  862|  9.28k|    m_temp_reg_73 = _mm_loadu_si128((__m128i *)pi2_src);
  863|  9.28k|    pi2_src += src_strd;
  864|       |
  865|  9.28k|    m_temp_reg_74 = _mm_loadu_si128((__m128i *)pi2_src);
  866|  9.28k|    pi2_src += src_strd;
  867|  9.28k|    m_temp_reg_75 = _mm_loadu_si128((__m128i *)pi2_src);
  868|  9.28k|    pi2_src += src_strd;
  869|  9.28k|    m_temp_reg_76 = _mm_loadu_si128((__m128i *)pi2_src);
  870|  9.28k|    pi2_src += src_strd;
  871|  9.28k|    m_temp_reg_77 = _mm_loadu_si128((__m128i *)pi2_src);
  872|       |
  873|  9.28k|    if(!check_row_stage_2)
  ------------------
  |  Branch (873:8): [True: 6.56k, False: 2.72k]
  ------------------
  874|  6.56k|    {
  875|  6.56k|        if(!check_row_stage_1)
  ------------------
  |  Branch (875:12): [True: 5.68k, False: 886]
  ------------------
  876|  5.68k|        {
  877|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
  878|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
  879|  5.68k|            {
  880|       |                //Interleaving 0,4 row in 0 , 1 Rishab
  881|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
  882|  5.68k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
  883|  5.68k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
  884|       |
  885|  5.68k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
  886|       |
  887|  5.68k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
  888|  5.68k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
  889|       |
  890|  5.68k|            }
  891|       |
  892|       |
  893|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
  894|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
  895|       |            /* as upper 8 bytes are zeros so m_temp_reg_15 and m_temp_reg_17 are not used*/
  896|  5.68k|            {
  897|       |
  898|  5.68k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
  899|  5.68k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
  900|       |
  901|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
  902|       |                //Interleaving 2,6 row in 4, 5 Rishab
  903|  5.68k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
  904|       |
  905|  5.68k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
  906|  5.68k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
  907|       |
  908|       |
  909|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
  910|       |
  911|  5.68k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
  912|  5.68k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
  913|       |
  914|  5.68k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
  915|  5.68k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
  916|       |
  917|       |
  918|       |
  919|       |                /* e */
  920|       |
  921|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
  922|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
  923|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
  924|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
  925|  5.68k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
  926|  5.68k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
  927|       |
  928|  5.68k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
  929|  5.68k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
  930|       |
  931|  5.68k|            }
  932|       |
  933|       |            /* o */
  934|  5.68k|            {
  935|       |
  936|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
  937|  5.68k|                {
  938|       |
  939|  5.68k|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
  940|       |                    //o0:1B*89+3B*75,5B*50+7B*18
  941|  5.68k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
  942|       |
  943|  5.68k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  944|  5.68k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
  945|       |
  946|       |
  947|       |
  948|       |                    /* Column 0 of destination computed here */
  949|       |                    /* It is stored in m_temp_reg_50 */
  950|       |                    /* Column 7 of destination computed here */
  951|       |                    /* It is stored in m_temp_reg_57 */
  952|       |                    /* Upper 8 bytes of both registers are zero due to zero_cols*/
  953|       |
  954|       |
  955|       |
  956|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
  957|  5.68k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
  958|       |
  959|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
  960|  5.68k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
  961|       |
  962|  5.68k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
  963|  5.68k|                    m_temp_reg_63 = _mm_setzero_si128();
  964|  5.68k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
  965|       |
  966|       |                    //o1:1B*75-3B*18,5B*89+7B*50
  967|  5.68k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
  968|       |
  969|  5.68k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
  970|  5.68k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
  971|       |
  972|       |                    /* Loading coeff for computing o2  in the next block */
  973|       |
  974|  5.68k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
  975|  5.68k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
  976|       |
  977|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
  978|       |
  979|       |
  980|       |
  981|       |                    /* Column 1 of destination computed here */
  982|       |                    /* It is stored in m_temp_reg_51 */
  983|       |                    /* Column 6 of destination computed here */
  984|       |                    /* It is stored in m_temp_reg_56 */
  985|       |
  986|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
  987|  5.68k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
  988|       |
  989|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
  990|  5.68k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
  991|       |
  992|  5.68k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
  993|  5.68k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
  994|       |
  995|       |                    //o2:1B*50-3B*89,5B*18+7B*75
  996|  5.68k|                    m_temp_reg_34 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
  997|       |
  998|  5.68k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
  999|  5.68k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1000|       |
 1001|       |
 1002|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1003|       |
 1004|       |                    /* Loading coeff for computing o3  in the next block */
 1005|       |
 1006|  5.68k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1007|  5.68k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 1008|       |
 1009|       |
 1010|       |
 1011|       |                    /* Column 2 of destination computed here */
 1012|       |                    /* It is stored in m_temp_reg_52 */
 1013|       |                    /* Column 5 of destination computed here */
 1014|       |                    /* It is stored in m_temp_reg_55 */
 1015|       |
 1016|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1017|  5.68k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1018|       |
 1019|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1020|  5.68k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1021|       |
 1022|  5.68k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1023|  5.68k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1024|       |
 1025|       |                    //o3:1B*18-3B*50,5B*75-7B*89
 1026|  5.68k|                    m_temp_reg_36 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1027|       |
 1028|  5.68k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1029|  5.68k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1030|       |
 1031|       |
 1032|       |
 1033|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1034|       |
 1035|       |
 1036|       |
 1037|       |                    /* Column 3 of destination computed here */
 1038|       |                    /* It is stored in m_temp_reg_53 */
 1039|       |                    /* Column 4 of destination computed here */
 1040|       |                    /* It is stored in m_temp_reg_54 */
 1041|       |
 1042|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1043|  5.68k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1044|       |
 1045|  5.68k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1046|  5.68k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1047|       |
 1048|  5.68k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1049|  5.68k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1050|       |
 1051|       |
 1052|  5.68k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1053|  5.68k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1054|  5.68k|                }
 1055|  5.68k|            }
 1056|       |
 1057|       |            /* Transpose of the destination 8x8 matrix done here */
 1058|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1059|       |            /* respectively */
 1060|  5.68k|            {
 1061|  5.68k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1062|  5.68k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1063|  5.68k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1064|  5.68k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1065|       |
 1066|  5.68k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1067|  5.68k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1068|       |
 1069|  5.68k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1070|  5.68k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1071|       |
 1072|  5.68k|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1073|  5.68k|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1074|  5.68k|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1075|  5.68k|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1076|       |
 1077|  5.68k|                m_temp_reg_54 = _mm_setzero_si128();
 1078|  5.68k|                m_temp_reg_55 = _mm_setzero_si128();
 1079|  5.68k|                m_temp_reg_56 = _mm_setzero_si128();
 1080|  5.68k|                m_temp_reg_57 = _mm_setzero_si128();
 1081|  5.68k|            }
 1082|  5.68k|        }
 1083|    886|        else
 1084|    886|        {
 1085|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1086|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1087|    886|            {
 1088|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 1089|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 1090|    886|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 1091|    886|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 1092|       |
 1093|    886|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 1094|       |
 1095|    886|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1096|    886|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1097|       |
 1098|    886|            }
 1099|       |
 1100|       |
 1101|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1102|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1103|       |            /* as upper 8 bytes are zeros so m_temp_reg_15 and m_temp_reg_17 are not used*/
 1104|    886|            {
 1105|       |
 1106|    886|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 1107|    886|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 1108|       |
 1109|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 1110|       |                //Interleaving 2,6 row in 4, 5 Rishab
 1111|    886|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1112|       |
 1113|    886|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 1114|    886|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 1115|       |
 1116|       |
 1117|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 1118|       |
 1119|    886|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1120|    886|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 1121|       |
 1122|    886|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1123|    886|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 1124|       |
 1125|       |
 1126|       |
 1127|       |                /* e */
 1128|       |
 1129|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1130|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1131|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1132|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1133|    886|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1134|    886|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1135|       |
 1136|    886|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1137|    886|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1138|       |
 1139|    886|            }
 1140|       |
 1141|       |            /* o */
 1142|    886|            {
 1143|       |
 1144|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1145|    886|                {
 1146|       |
 1147|    886|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1148|    886|                    m_temp_reg_64 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1149|       |                    //o0:1B*89+3B*75,5B*50+7B*18
 1150|    886|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1151|    886|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 1152|       |
 1153|    886|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1154|    886|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1155|       |
 1156|    886|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1157|       |
 1158|       |
 1159|       |
 1160|       |                    /* Column 0 of destination computed here */
 1161|       |                    /* It is stored in m_temp_reg_50 */
 1162|       |                    /* Column 7 of destination computed here */
 1163|       |                    /* It is stored in m_temp_reg_57 */
 1164|       |                    /* Upper 8 bytes of both registers are zero due to zero_cols*/
 1165|       |
 1166|       |
 1167|       |
 1168|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1169|    886|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1170|       |
 1171|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1172|    886|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1173|       |
 1174|    886|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1175|    886|                    m_temp_reg_63 = _mm_setzero_si128();
 1176|    886|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1177|       |
 1178|       |                    //o1:1B*75-3B*18,5B*89+7B*50
 1179|    886|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1180|    886|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 1181|       |
 1182|    886|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1183|    886|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1184|       |
 1185|       |                    /* Loading coeff for computing o2  in the next block */
 1186|       |
 1187|    886|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1188|    886|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 1189|       |
 1190|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 1191|    886|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 1192|       |
 1193|       |
 1194|       |
 1195|       |                    /* Column 1 of destination computed here */
 1196|       |                    /* It is stored in m_temp_reg_51 */
 1197|       |                    /* Column 6 of destination computed here */
 1198|       |                    /* It is stored in m_temp_reg_56 */
 1199|       |
 1200|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1201|    886|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1202|       |
 1203|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1204|    886|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1205|       |
 1206|    886|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1207|    886|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1208|       |
 1209|       |                    //o2:1B*50-3B*89,5B*18+7B*75
 1210|    886|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1211|    886|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 1212|       |
 1213|    886|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1214|    886|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1215|       |
 1216|       |
 1217|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1218|       |
 1219|       |                    /* Loading coeff for computing o3  in the next block */
 1220|       |
 1221|    886|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1222|    886|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 1223|       |
 1224|    886|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1225|       |
 1226|       |
 1227|       |                    /* Column 2 of destination computed here */
 1228|       |                    /* It is stored in m_temp_reg_52 */
 1229|       |                    /* Column 5 of destination computed here */
 1230|       |                    /* It is stored in m_temp_reg_55 */
 1231|       |
 1232|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1233|    886|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1234|       |
 1235|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1236|    886|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1237|       |
 1238|    886|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1239|    886|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1240|       |
 1241|       |                    //o3:1B*18-3B*50,5B*75-7B*89
 1242|    886|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1243|    886|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 1244|       |
 1245|    886|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1246|    886|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1247|       |
 1248|       |
 1249|       |
 1250|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1251|       |
 1252|    886|                    m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_26);
 1253|       |
 1254|       |
 1255|       |                    /* Column 3 of destination computed here */
 1256|       |                    /* It is stored in m_temp_reg_53 */
 1257|       |                    /* Column 4 of destination computed here */
 1258|       |                    /* It is stored in m_temp_reg_54 */
 1259|       |
 1260|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1261|    886|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1262|       |
 1263|    886|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1264|    886|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1265|       |
 1266|    886|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1267|    886|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1268|       |
 1269|       |
 1270|    886|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1271|    886|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1272|    886|                }
 1273|    886|            }
 1274|       |
 1275|       |            /* Transpose of the destination 8x8 matrix done here */
 1276|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1277|       |            /* respectively */
 1278|    886|            {
 1279|    886|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1280|    886|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1281|    886|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1282|    886|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1283|       |
 1284|    886|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1285|    886|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1286|    886|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1287|    886|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1288|       |
 1289|    886|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1290|    886|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1291|    886|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1292|    886|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1293|       |
 1294|    886|                m_temp_reg_54 = _mm_setzero_si128();
 1295|    886|                m_temp_reg_55 = _mm_setzero_si128();
 1296|    886|                m_temp_reg_56 = _mm_setzero_si128();
 1297|    886|                m_temp_reg_57 = _mm_setzero_si128();
 1298|    886|            }
 1299|    886|        }
 1300|       |
 1301|       |        /* Stage 2 */
 1302|  6.56k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  6.56k|#define IT_SHIFT_STAGE_2 12
  ------------------
 1303|  6.56k|        {
 1304|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1305|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1306|  6.56k|            {
 1307|  6.56k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]); //add
 1308|  6.56k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]); //sub
 1309|       |
 1310|  6.56k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_54);
 1311|  6.56k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_54);
 1312|       |
 1313|  6.56k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1314|  6.56k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1315|  6.56k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1316|  6.56k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1317|       |
 1318|       |
 1319|  6.56k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]);
 1320|  6.56k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]);
 1321|  6.56k|            }
 1322|       |
 1323|       |
 1324|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1325|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1326|  6.56k|            {
 1327|       |
 1328|  6.56k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_56);
 1329|  6.56k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_56);
 1330|       |
 1331|       |
 1332|  6.56k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1333|  6.56k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1334|  6.56k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1335|  6.56k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1336|       |
 1337|       |                /* Loading coeff for computing o0 in the next block */
 1338|  6.56k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1339|       |
 1340|       |
 1341|  6.56k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_51, m_temp_reg_53);
 1342|  6.56k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_51, m_temp_reg_53);
 1343|       |
 1344|       |
 1345|       |
 1346|       |                /* e */
 1347|       |
 1348|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1349|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1350|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1351|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1352|  6.56k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1353|  6.56k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1354|       |
 1355|  6.56k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1356|  6.56k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1357|       |
 1358|  6.56k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 1359|  6.56k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 1360|       |
 1361|  6.56k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 1362|  6.56k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 1363|       |
 1364|  6.56k|            }
 1365|       |
 1366|       |            /* o */
 1367|  6.56k|            {
 1368|       |
 1369|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1370|  6.56k|                {
 1371|       |                    //o0:1B*89+3B*75,1T*89+3T*75
 1372|  6.56k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1373|  6.56k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1374|       |
 1375|  6.56k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1376|  6.56k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1377|       |                    /* Loading coeff for computing o1 in the next block */
 1378|  6.56k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1379|       |
 1380|       |
 1381|       |
 1382|       |                    /* Column 0 of destination computed here */
 1383|       |                    /* It is stored in m_temp_reg_50 */
 1384|       |                    /* Column 7 of destination computed here */
 1385|       |                    /* It is stored in m_temp_reg_57 */
 1386|       |
 1387|  6.56k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1388|  6.56k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1389|       |
 1390|  6.56k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 1391|  6.56k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 1392|       |
 1393|  6.56k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 1394|  6.56k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 1395|  6.56k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 1396|  6.56k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 1397|       |
 1398|       |                    //o1:1B*75-3B*18,1T*75-3T*18
 1399|  6.56k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 1400|  6.56k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 1401|       |
 1402|  6.56k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 1403|  6.56k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 1404|  6.56k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 1405|  6.56k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 1406|       |
 1407|  6.56k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 1408|  6.56k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 1409|       |
 1410|       |
 1411|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 1412|       |
 1413|       |
 1414|       |                    /* Loading coeff for computing o2  in the next block */
 1415|  6.56k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1416|       |
 1417|       |
 1418|       |
 1419|       |                    /* Column 1 of destination computed here */
 1420|       |                    /* It is stored in m_temp_reg_51 */
 1421|       |                    /* Column 6 of destination computed here */
 1422|       |                    /* It is stored in m_temp_reg_56 */
 1423|       |
 1424|  6.56k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1425|  6.56k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1426|       |
 1427|  6.56k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 1428|  6.56k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 1429|       |
 1430|  6.56k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 1431|  6.56k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 1432|  6.56k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 1433|  6.56k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 1434|       |
 1435|       |                    //o2:1B*50-3B*89,5T*18+7T*75.
 1436|  6.56k|                    m_temp_reg_34 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1437|  6.56k|                    m_temp_reg_35 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1438|       |
 1439|  6.56k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 1440|  6.56k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 1441|  6.56k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 1442|  6.56k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 1443|       |
 1444|  6.56k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 1445|  6.56k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 1446|       |
 1447|       |
 1448|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1449|       |
 1450|       |                    /* Loading coeff for computing o3  in the next block */
 1451|       |
 1452|  6.56k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1453|       |
 1454|       |
 1455|       |                    /* Column 2 of destination computed here */
 1456|       |                    /* It is stored in m_temp_reg_52 */
 1457|       |                    /* Column 5 of destination computed here */
 1458|       |                    /* It is stored in m_temp_reg_55 */
 1459|       |
 1460|  6.56k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1461|  6.56k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1462|       |
 1463|  6.56k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 1464|  6.56k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 1465|       |
 1466|  6.56k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 1467|  6.56k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 1468|  6.56k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 1469|  6.56k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 1470|       |
 1471|       |                    //o3:1B*18-3B*50,1T*18-3T*50
 1472|  6.56k|                    m_temp_reg_36 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 1473|  6.56k|                    m_temp_reg_37 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 1474|       |
 1475|  6.56k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 1476|  6.56k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 1477|  6.56k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 1478|  6.56k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 1479|       |
 1480|       |
 1481|  6.56k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 1482|  6.56k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 1483|       |
 1484|       |
 1485|       |
 1486|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1487|       |
 1488|       |
 1489|       |                    /* Column 3 of destination computed here */
 1490|       |                    /* It is stored in m_temp_reg_53 */
 1491|       |                    /* Column 4 of destination computed here */
 1492|       |                    /* It is stored in m_temp_reg_54 */
 1493|       |
 1494|  6.56k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1495|  6.56k|                    m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1496|       |
 1497|  6.56k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 1498|  6.56k|                    m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 1499|       |
 1500|  6.56k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_rdng_factor);
 1501|  6.56k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_rdng_factor);
 1502|  6.56k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_rdng_factor);
 1503|  6.56k|                    m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_rdng_factor);
 1504|       |
 1505|  6.56k|                    m_temp_reg_20 = _mm_srai_epi32(m_temp_reg_20, i4_shift);
 1506|  6.56k|                    m_temp_reg_21 = _mm_srai_epi32(m_temp_reg_21, i4_shift);
 1507|  6.56k|                    m_temp_reg_22 = _mm_srai_epi32(m_temp_reg_22, i4_shift);
 1508|  6.56k|                    m_temp_reg_23 = _mm_srai_epi32(m_temp_reg_23, i4_shift);
 1509|       |
 1510|  6.56k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
 1511|  6.56k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
 1512|  6.56k|                }
 1513|  6.56k|            }
 1514|       |
 1515|       |            /* Transpose of the destination 8x8 matrix done here */
 1516|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1517|       |            /* respectively */
 1518|  6.56k|            {
 1519|  6.56k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1520|  6.56k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1521|  6.56k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 1522|  6.56k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 1523|  6.56k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1524|  6.56k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1525|  6.56k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 1526|  6.56k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 1527|       |
 1528|  6.56k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1529|  6.56k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1530|  6.56k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 1531|  6.56k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 1532|  6.56k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1533|  6.56k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1534|  6.56k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 1535|  6.56k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 1536|  6.56k|                m_temp_reg_10 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1537|  6.56k|                m_temp_reg_11 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1538|  6.56k|                m_temp_reg_12 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1539|  6.56k|                m_temp_reg_13 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1540|       |
 1541|  6.56k|                m_temp_reg_14 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 1542|  6.56k|                m_temp_reg_15 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 1543|  6.56k|                m_temp_reg_16 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 1544|  6.56k|                m_temp_reg_17 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 1545|  6.56k|            }
 1546|       |
 1547|       |            /* Recon and store */
 1548|  6.56k|            {
 1549|  6.56k|                m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1550|  6.56k|                pu1_pred += pred_strd;
 1551|  6.56k|                m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1552|  6.56k|                pu1_pred += pred_strd;
 1553|  6.56k|                m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1554|  6.56k|                pu1_pred += pred_strd;
 1555|  6.56k|                m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1556|  6.56k|                pu1_pred += pred_strd;
 1557|  6.56k|                m_temp_reg_4 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1558|  6.56k|                pu1_pred += pred_strd;
 1559|  6.56k|                m_temp_reg_5 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1560|  6.56k|                pu1_pred += pred_strd;
 1561|  6.56k|                m_temp_reg_6 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1562|  6.56k|                pu1_pred += pred_strd;
 1563|  6.56k|                m_temp_reg_7 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1564|       |
 1565|  6.56k|                m_temp_reg_50 = _mm_setzero_si128();
 1566|  6.56k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, m_temp_reg_50);
 1567|  6.56k|                m_temp_reg_1 = _mm_unpacklo_epi8(m_temp_reg_1, m_temp_reg_50);
 1568|  6.56k|                m_temp_reg_2 = _mm_unpacklo_epi8(m_temp_reg_2, m_temp_reg_50);
 1569|  6.56k|                m_temp_reg_3 = _mm_unpacklo_epi8(m_temp_reg_3, m_temp_reg_50);
 1570|  6.56k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_50);
 1571|  6.56k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_50);
 1572|  6.56k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_6, m_temp_reg_50);
 1573|  6.56k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_7, m_temp_reg_50);
 1574|       |
 1575|  6.56k|                m_temp_reg_50 = _mm_add_epi16(m_temp_reg_10, m_temp_reg_0);
 1576|  6.56k|                m_temp_reg_51 = _mm_add_epi16(m_temp_reg_11, m_temp_reg_1);
 1577|  6.56k|                m_temp_reg_52 = _mm_add_epi16(m_temp_reg_12, m_temp_reg_2);
 1578|  6.56k|                m_temp_reg_53 = _mm_add_epi16(m_temp_reg_13, m_temp_reg_3);
 1579|  6.56k|                m_temp_reg_54 = _mm_add_epi16(m_temp_reg_14, m_temp_reg_4);
 1580|  6.56k|                m_temp_reg_55 = _mm_add_epi16(m_temp_reg_15, m_temp_reg_5);
 1581|  6.56k|                m_temp_reg_56 = _mm_add_epi16(m_temp_reg_16, m_temp_reg_6);
 1582|  6.56k|                m_temp_reg_57 = _mm_add_epi16(m_temp_reg_17, m_temp_reg_7);
 1583|       |
 1584|  6.56k|                m_temp_reg_50 = _mm_packus_epi16(m_temp_reg_50, m_temp_reg_50);
 1585|  6.56k|                m_temp_reg_51 = _mm_packus_epi16(m_temp_reg_51, m_temp_reg_51);
 1586|  6.56k|                m_temp_reg_52 = _mm_packus_epi16(m_temp_reg_52, m_temp_reg_52);
 1587|  6.56k|                m_temp_reg_53 = _mm_packus_epi16(m_temp_reg_53, m_temp_reg_53);
 1588|  6.56k|                m_temp_reg_54 = _mm_packus_epi16(m_temp_reg_54, m_temp_reg_54);
 1589|  6.56k|                m_temp_reg_55 = _mm_packus_epi16(m_temp_reg_55, m_temp_reg_55);
 1590|  6.56k|                m_temp_reg_56 = _mm_packus_epi16(m_temp_reg_56, m_temp_reg_56);
 1591|  6.56k|                m_temp_reg_57 = _mm_packus_epi16(m_temp_reg_57, m_temp_reg_57);
 1592|       |
 1593|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_50);
 1594|  6.56k|                pu1_dst += dst_strd;
 1595|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_51);
 1596|  6.56k|                pu1_dst += dst_strd;
 1597|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_52);
 1598|  6.56k|                pu1_dst += dst_strd;
 1599|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_53);
 1600|  6.56k|                pu1_dst += dst_strd;
 1601|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_54);
 1602|  6.56k|                pu1_dst += dst_strd;
 1603|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_55);
 1604|  6.56k|                pu1_dst += dst_strd;
 1605|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_56);
 1606|  6.56k|                pu1_dst += dst_strd;
 1607|  6.56k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_57);
 1608|  6.56k|                pu1_dst += dst_strd;
 1609|  6.56k|            }
 1610|  6.56k|        }
 1611|  6.56k|    }
 1612|  2.72k|    else
 1613|       |
 1614|  2.72k|    {
 1615|       |
 1616|       |        /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1617|       |        /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1618|  2.72k|        if(!check_row_stage_1)
  ------------------
  |  Branch (1618:12): [True: 900, False: 1.82k]
  ------------------
 1619|    900|        {
 1620|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1621|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1622|    900|            {
 1623|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 1624|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 1625|    900|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 1626|    900|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 1627|       |
 1628|    900|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 1629|    900|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_74);
 1630|       |
 1631|    900|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1632|    900|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1633|       |
 1634|       |
 1635|    900|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1636|    900|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1637|    900|            }
 1638|       |
 1639|       |
 1640|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1641|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1642|    900|            {
 1643|       |
 1644|    900|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 1645|    900|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 1646|       |
 1647|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 1648|       |                //Interleaving 2,6 row in 4, 5 Rishab
 1649|    900|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1650|    900|                m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76);
 1651|       |
 1652|    900|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 1653|    900|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 1654|       |
 1655|    900|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_5, m_coeff1);
 1656|    900|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 1657|       |
 1658|       |
 1659|       |
 1660|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 1661|       |
 1662|    900|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1663|       |                //m_coeff4 = _mm_loadu_si128((__m128i *) &g_ai2_ihevc_trans_intr_odd_8[3][0]);
 1664|       |
 1665|    900|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1666|       |                //m_coeff2 = _mm_loadu_si128((__m128i *) &g_ai2_ihevc_trans_intr_odd_8[1][0]);
 1667|       |
 1668|    900|            }
 1669|       |
 1670|       |            /* e */
 1671|    900|            {
 1672|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1673|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1674|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1675|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1676|    900|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1677|    900|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1678|       |
 1679|    900|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1680|    900|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1681|       |
 1682|    900|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 1683|    900|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 1684|       |
 1685|    900|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 1686|    900|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 1687|       |
 1688|    900|            }
 1689|       |
 1690|       |            /* o */
 1691|    900|            {
 1692|       |
 1693|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1694|    900|                {
 1695|       |
 1696|    900|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1697|    900|                    m_temp_reg_61 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
 1698|       |                    //o0:1B*89+3B*75,1T*89+3T*75
 1699|    900|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1700|    900|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 1701|       |
 1702|    900|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1703|    900|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1704|       |
 1705|    900|                }
 1706|       |
 1707|       |                /* Column 0 of destination computed here */
 1708|       |                /* It is stored in m_temp_reg_50 */
 1709|       |                /* Column 7 of destination computed here */
 1710|       |                /* It is stored in m_temp_reg_57 */
 1711|    900|                {
 1712|       |
 1713|       |
 1714|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1715|    900|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1716|       |
 1717|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 1718|    900|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 1719|       |
 1720|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1721|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1722|    900|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1723|    900|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1724|       |
 1725|    900|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1726|    900|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1727|    900|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1728|    900|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1729|       |
 1730|       |                    //o1:1B*75-3B*18,1T*75-3T*18,5B*89+7B*50,5T*89+7T*50
 1731|    900|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1732|    900|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 1733|       |
 1734|    900|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1735|    900|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 1736|       |
 1737|       |                    /* Loading coeff for computing o2  in the next block */
 1738|       |
 1739|    900|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1740|       |
 1741|    900|                }
 1742|       |
 1743|       |                /* Column 1 of destination computed here */
 1744|       |                /* It is stored in m_temp_reg_51 */
 1745|       |                /* Column 6 of destination computed here */
 1746|       |                /* It is stored in m_temp_reg_56 */
 1747|    900|                {
 1748|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1749|    900|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1750|       |
 1751|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 1752|    900|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 1753|       |
 1754|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1755|    900|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1756|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1757|    900|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1758|       |
 1759|    900|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1760|    900|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1761|    900|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1762|    900|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1763|       |
 1764|       |                    //o2:1B*50-3B*89,1T*50-3T*89
 1765|    900|                    m_temp_reg_34 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1766|    900|                    m_temp_reg_35 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 1767|       |
 1768|    900|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1769|    900|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 1770|       |
 1771|       |
 1772|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1773|       |
 1774|       |
 1775|       |                    /* Loading coeff for computing o3  in the next block */
 1776|       |
 1777|    900|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1778|       |
 1779|    900|                }
 1780|       |
 1781|       |                /* Column 2 of destination computed here */
 1782|       |                /* It is stored in m_temp_reg_52 */
 1783|       |                /* Column 5 of destination computed here */
 1784|       |                /* It is stored in m_temp_reg_55 */
 1785|    900|                {
 1786|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1787|    900|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1788|       |
 1789|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 1790|    900|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 1791|       |
 1792|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1793|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1794|    900|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1795|    900|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1796|       |
 1797|    900|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1798|    900|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1799|    900|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1800|    900|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1801|       |
 1802|       |                    //o3:1B*18-3B*50,1T*18-3T*50
 1803|    900|                    m_temp_reg_36 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1804|    900|                    m_temp_reg_37 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 1805|       |
 1806|    900|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1807|    900|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 1808|       |
 1809|       |
 1810|       |
 1811|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1812|       |
 1813|       |
 1814|    900|                }
 1815|       |
 1816|       |                /* Column 3 of destination computed here */
 1817|       |                /* It is stored in m_temp_reg_53 */
 1818|       |                /* Column 4 of destination computed here */
 1819|       |                /* It is stored in m_temp_reg_54 */
 1820|    900|                {
 1821|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1822|    900|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1823|       |
 1824|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 1825|    900|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 1826|       |
 1827|    900|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1828|    900|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1829|    900|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1830|    900|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1831|       |
 1832|    900|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1833|    900|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1834|    900|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1835|    900|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1836|       |
 1837|    900|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1838|    900|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 1839|    900|                }
 1840|    900|            }
 1841|       |
 1842|       |            /* Transpose of the destination 8x8 matrix done here */
 1843|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1844|       |            /* respectively */
 1845|    900|            {
 1846|       |
 1847|       |
 1848|    900|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1849|    900|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1850|    900|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 1851|    900|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 1852|    900|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1853|    900|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1854|    900|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 1855|    900|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 1856|       |
 1857|    900|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1858|    900|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1859|    900|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 1860|    900|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 1861|    900|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1862|    900|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1863|    900|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 1864|    900|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 1865|       |
 1866|    900|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1867|    900|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1868|    900|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1869|    900|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1870|       |
 1871|    900|                m_temp_reg_54 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 1872|    900|                m_temp_reg_55 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 1873|    900|                m_temp_reg_56 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 1874|    900|                m_temp_reg_57 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 1875|    900|            }
 1876|    900|        }
 1877|  1.82k|        else
 1878|  1.82k|        {
 1879|       |
 1880|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1881|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1882|  1.82k|            {
 1883|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 1884|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 1885|  1.82k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 1886|  1.82k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 1887|       |
 1888|  1.82k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 1889|  1.82k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_74);
 1890|       |
 1891|  1.82k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1892|  1.82k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1893|       |
 1894|       |
 1895|  1.82k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1896|  1.82k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1897|  1.82k|            }
 1898|       |
 1899|       |
 1900|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1901|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1902|  1.82k|            {
 1903|       |
 1904|  1.82k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 1905|  1.82k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 1906|       |
 1907|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 1908|       |                //Interleaving 2,6 row in 4, 5 Rishab
 1909|  1.82k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1910|  1.82k|                m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76);
 1911|       |
 1912|  1.82k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 1913|  1.82k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 1914|       |
 1915|  1.82k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_5, m_coeff1);
 1916|  1.82k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 1917|       |
 1918|       |
 1919|       |
 1920|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 1921|       |
 1922|  1.82k|                m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1923|  1.82k|                m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 1924|       |
 1925|  1.82k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1926|  1.82k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 1927|       |
 1928|  1.82k|            }
 1929|       |
 1930|       |            /* e */
 1931|  1.82k|            {
 1932|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1933|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1934|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1935|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1936|  1.82k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1937|  1.82k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1938|       |
 1939|  1.82k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1940|  1.82k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1941|       |
 1942|  1.82k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 1943|  1.82k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 1944|       |
 1945|  1.82k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 1946|  1.82k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 1947|       |
 1948|  1.82k|            }
 1949|       |
 1950|       |            /* o */
 1951|  1.82k|            {
 1952|       |
 1953|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1954|  1.82k|                {
 1955|       |
 1956|  1.82k|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1957|  1.82k|                    m_temp_reg_61 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
 1958|  1.82k|                    m_temp_reg_64 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1959|  1.82k|                    m_temp_reg_65 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_77);
 1960|       |                    //o0:1B*89+3B*75,1T*89+3T*75,5B*50+7B*18,5T*50+7T*18
 1961|  1.82k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1962|  1.82k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 1963|  1.82k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 1964|  1.82k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_65, m_coeff2);
 1965|       |
 1966|       |
 1967|  1.82k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1968|  1.82k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1969|       |
 1970|  1.82k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1971|  1.82k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 1972|  1.82k|                }
 1973|       |
 1974|       |                /* Column 0 of destination computed here */
 1975|       |                /* It is stored in m_temp_reg_50 */
 1976|       |                /* Column 7 of destination computed here */
 1977|       |                /* It is stored in m_temp_reg_57 */
 1978|  1.82k|                {
 1979|       |
 1980|       |
 1981|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1982|  1.82k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1983|       |
 1984|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 1985|  1.82k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 1986|       |
 1987|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1988|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1989|  1.82k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1990|  1.82k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1991|       |
 1992|  1.82k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1993|  1.82k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1994|  1.82k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1995|  1.82k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1996|       |
 1997|       |                    //o1:1B*75-3B*18,1T*75-3T*18,5B*89+7B*50,5T*89+7T*50
 1998|  1.82k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1999|  1.82k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 2000|  1.82k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 2001|  1.82k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_65, m_coeff4);
 2002|       |
 2003|  1.82k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2004|  1.82k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2005|       |
 2006|       |                    /* Loading coeff for computing o2  in the next block */
 2007|       |
 2008|  1.82k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 2009|  1.82k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 2010|       |
 2011|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 2012|  1.82k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 2013|  1.82k|                    m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_27);
 2014|  1.82k|                }
 2015|       |
 2016|       |                /* Column 1 of destination computed here */
 2017|       |                /* It is stored in m_temp_reg_51 */
 2018|       |                /* Column 6 of destination computed here */
 2019|       |                /* It is stored in m_temp_reg_56 */
 2020|  1.82k|                {
 2021|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 2022|  1.82k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 2023|       |
 2024|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 2025|  1.82k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 2026|       |
 2027|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2028|  1.82k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2029|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2030|  1.82k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2031|       |
 2032|  1.82k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2033|  1.82k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2034|  1.82k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2035|  1.82k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2036|       |
 2037|       |                    //o2:1B*50-3B*89,1T*50-3T*89,5B*18+7B*75,5T*18+7T*75
 2038|  1.82k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 2039|  1.82k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 2040|  1.82k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 2041|  1.82k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_65, m_coeff2);
 2042|       |
 2043|  1.82k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2044|  1.82k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2045|       |
 2046|       |
 2047|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 2048|       |
 2049|       |
 2050|       |                    /* Loading coeff for computing o3  in the next block */
 2051|       |
 2052|  1.82k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 2053|  1.82k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 2054|       |
 2055|  1.82k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2056|  1.82k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2057|  1.82k|                }
 2058|       |
 2059|       |                /* Column 2 of destination computed here */
 2060|       |                /* It is stored in m_temp_reg_52 */
 2061|       |                /* Column 5 of destination computed here */
 2062|       |                /* It is stored in m_temp_reg_55 */
 2063|  1.82k|                {
 2064|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 2065|  1.82k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 2066|       |
 2067|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 2068|  1.82k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 2069|       |
 2070|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2071|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2072|  1.82k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2073|  1.82k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2074|       |
 2075|  1.82k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2076|  1.82k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2077|  1.82k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2078|  1.82k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2079|       |
 2080|       |                    //o3:1B*18-3B*50,1T*18-3T*50,5B*75-7B*89,5T*75-7T*89
 2081|  1.82k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 2082|  1.82k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 2083|  1.82k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 2084|  1.82k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_65, m_coeff4);
 2085|       |
 2086|  1.82k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2087|  1.82k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2088|       |
 2089|       |
 2090|       |
 2091|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 2092|       |
 2093|       |
 2094|  1.82k|                    m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_26);
 2095|  1.82k|                    m_temp_reg_37 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_27);
 2096|  1.82k|                }
 2097|       |
 2098|       |                /* Column 3 of destination computed here */
 2099|       |                /* It is stored in m_temp_reg_53 */
 2100|       |                /* Column 4 of destination computed here */
 2101|       |                /* It is stored in m_temp_reg_54 */
 2102|  1.82k|                {
 2103|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 2104|  1.82k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 2105|       |
 2106|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 2107|  1.82k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 2108|       |
 2109|  1.82k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2110|  1.82k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2111|  1.82k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2112|  1.82k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2113|       |
 2114|  1.82k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2115|  1.82k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2116|  1.82k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2117|  1.82k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2118|       |
 2119|  1.82k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2120|  1.82k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2121|  1.82k|                }
 2122|  1.82k|            }
 2123|       |
 2124|       |            /* Transpose of the destination 8x8 matrix done here */
 2125|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 2126|       |            /* respectively */
 2127|  1.82k|            {
 2128|       |
 2129|       |
 2130|  1.82k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 2131|  1.82k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 2132|  1.82k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 2133|  1.82k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 2134|  1.82k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 2135|  1.82k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 2136|  1.82k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 2137|  1.82k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 2138|       |
 2139|  1.82k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 2140|  1.82k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 2141|  1.82k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 2142|  1.82k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 2143|  1.82k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 2144|  1.82k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 2145|  1.82k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 2146|  1.82k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 2147|       |
 2148|  1.82k|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 2149|  1.82k|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 2150|  1.82k|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 2151|  1.82k|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 2152|       |
 2153|  1.82k|                m_temp_reg_54 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 2154|  1.82k|                m_temp_reg_55 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 2155|  1.82k|                m_temp_reg_56 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 2156|  1.82k|                m_temp_reg_57 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 2157|  1.82k|            }
 2158|  1.82k|        }
 2159|       |        /* Stage 2 */
 2160|       |
 2161|  2.72k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  2.72k|#define IT_SHIFT_STAGE_2 12
  ------------------
 2162|       |
 2163|  2.72k|        {
 2164|       |
 2165|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 2166|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 2167|  2.72k|            {
 2168|  2.72k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]); //add
 2169|  2.72k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]); //sub
 2170|       |
 2171|  2.72k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_54);
 2172|  2.72k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_54);
 2173|       |
 2174|  2.72k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2175|  2.72k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 2176|  2.72k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2177|  2.72k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 2178|       |
 2179|       |
 2180|  2.72k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]);
 2181|  2.72k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]);
 2182|  2.72k|            }
 2183|       |
 2184|       |
 2185|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 2186|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 2187|  2.72k|            {
 2188|  2.72k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_56);
 2189|  2.72k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_56);
 2190|       |
 2191|       |
 2192|  2.72k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2193|  2.72k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 2194|  2.72k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2195|  2.72k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 2196|       |
 2197|       |                /* Loading coeff for computing o0 in the next block */
 2198|  2.72k|                m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 2199|  2.72k|                m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 2200|       |
 2201|       |
 2202|  2.72k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_51, m_temp_reg_53);
 2203|  2.72k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_51, m_temp_reg_53);
 2204|  2.72k|            }
 2205|       |
 2206|       |            /* e */
 2207|  2.72k|            {
 2208|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 2209|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 2210|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 2211|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 2212|  2.72k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 2213|  2.72k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 2214|       |
 2215|  2.72k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 2216|  2.72k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 2217|       |
 2218|  2.72k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 2219|  2.72k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 2220|       |
 2221|  2.72k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 2222|  2.72k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 2223|       |
 2224|  2.72k|            }
 2225|       |
 2226|       |            /* o */
 2227|  2.72k|            {
 2228|  2.72k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_55, m_temp_reg_57);
 2229|  2.72k|                m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_55, m_temp_reg_57);
 2230|       |
 2231|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 2232|  2.72k|                {
 2233|       |                    //o0:1B*89+3B*75,1T*89+3T*75,5B*50+7B*18,5T*50+7T*18
 2234|  2.72k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2235|  2.72k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2236|  2.72k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 2237|  2.72k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 2238|       |
 2239|  2.72k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2240|  2.72k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 2241|       |                    /* Loading coeff for computing o1 in the next block */
 2242|  2.72k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 2243|  2.72k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 2244|       |
 2245|  2.72k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2246|  2.72k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2247|  2.72k|                }
 2248|       |
 2249|       |                /* Column 0 of destination computed here */
 2250|       |                /* It is stored in m_temp_reg_50 */
 2251|       |                /* Column 7 of destination computed here */
 2252|       |                /* It is stored in m_temp_reg_57 */
 2253|  2.72k|                {
 2254|  2.72k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 2255|  2.72k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 2256|       |
 2257|  2.72k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 2258|  2.72k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 2259|       |
 2260|  2.72k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 2261|  2.72k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 2262|  2.72k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 2263|  2.72k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 2264|       |
 2265|  2.72k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 2266|  2.72k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 2267|  2.72k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 2268|  2.72k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 2269|       |
 2270|       |                    //o1:1B*75-3B*18,1T*75-3T*18,5B*89+7B*50,5T*89+7T*50
 2271|  2.72k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 2272|  2.72k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_4, m_coeff4);
 2273|  2.72k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 2274|  2.72k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_5, m_coeff4);
 2275|       |
 2276|  2.72k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 2277|  2.72k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 2278|       |
 2279|       |
 2280|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 2281|       |
 2282|       |
 2283|       |                    /* Loading coeff for computing o2  in the next block */
 2284|  2.72k|                    m_coeff1 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 2285|  2.72k|                    m_coeff2 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 2286|       |
 2287|  2.72k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 2288|  2.72k|                    m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_27);
 2289|  2.72k|                }
 2290|       |
 2291|       |                /* Column 1 of destination computed here */
 2292|       |                /* It is stored in m_temp_reg_51 */
 2293|       |                /* Column 6 of destination computed here */
 2294|       |                /* It is stored in m_temp_reg_56 */
 2295|  2.72k|                {
 2296|  2.72k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 2297|  2.72k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 2298|       |
 2299|  2.72k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 2300|  2.72k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 2301|       |
 2302|  2.72k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 2303|  2.72k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 2304|  2.72k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 2305|  2.72k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 2306|       |
 2307|  2.72k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 2308|  2.72k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 2309|  2.72k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 2310|  2.72k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 2311|       |
 2312|       |                    //o2:1B*50-3B*89,1T*50-3T*89,5B*18+7B*75,5T*18+7T*75
 2313|  2.72k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2314|  2.72k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 2315|  2.72k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2316|  2.72k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 2317|       |
 2318|  2.72k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 2319|  2.72k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 2320|       |
 2321|       |
 2322|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 2323|       |
 2324|       |                    /* Loading coeff for computing o3  in the next block */
 2325|       |
 2326|  2.72k|                    m_coeff3 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 2327|  2.72k|                    m_coeff4 = _mm_loadu_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 2328|       |
 2329|  2.72k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2330|  2.72k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2331|  2.72k|                }
 2332|       |
 2333|       |                /* Column 2 of destination computed here */
 2334|       |                /* It is stored in m_temp_reg_52 */
 2335|       |                /* Column 5 of destination computed here */
 2336|       |                /* It is stored in m_temp_reg_55 */
 2337|  2.72k|                {
 2338|  2.72k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 2339|  2.72k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 2340|       |
 2341|  2.72k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 2342|  2.72k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 2343|       |
 2344|  2.72k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 2345|  2.72k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 2346|  2.72k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 2347|  2.72k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 2348|       |
 2349|  2.72k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 2350|  2.72k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 2351|  2.72k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 2352|  2.72k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 2353|       |
 2354|       |                    //o3:1B*18-3B*50,1T*18-3T*50,5B*75-7B*89,5T*75-7T*89
 2355|  2.72k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 2356|  2.72k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_4, m_coeff4);
 2357|  2.72k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 2358|  2.72k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_5, m_coeff4);
 2359|       |
 2360|  2.72k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 2361|  2.72k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 2362|       |
 2363|       |
 2364|       |
 2365|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 2366|       |
 2367|       |
 2368|  2.72k|                    m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_26);
 2369|  2.72k|                    m_temp_reg_37 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_27);
 2370|  2.72k|                }
 2371|       |
 2372|       |                /* Column 3 of destination computed here */
 2373|       |                /* It is stored in m_temp_reg_53 */
 2374|       |                /* Column 4 of destination computed here */
 2375|       |                /* It is stored in m_temp_reg_54 */
 2376|  2.72k|                {
 2377|  2.72k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 2378|  2.72k|                    m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 2379|       |
 2380|  2.72k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 2381|  2.72k|                    m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 2382|       |
 2383|  2.72k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_rdng_factor);
 2384|  2.72k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_rdng_factor);
 2385|  2.72k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_rdng_factor);
 2386|  2.72k|                    m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_rdng_factor);
 2387|       |
 2388|  2.72k|                    m_temp_reg_20 = _mm_srai_epi32(m_temp_reg_20, i4_shift);
 2389|  2.72k|                    m_temp_reg_21 = _mm_srai_epi32(m_temp_reg_21, i4_shift);
 2390|  2.72k|                    m_temp_reg_22 = _mm_srai_epi32(m_temp_reg_22, i4_shift);
 2391|  2.72k|                    m_temp_reg_23 = _mm_srai_epi32(m_temp_reg_23, i4_shift);
 2392|       |
 2393|  2.72k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
 2394|  2.72k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
 2395|  2.72k|                }
 2396|  2.72k|            }
 2397|       |
 2398|       |            /* Transpose of the destination 8x8 matrix done here */
 2399|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 2400|       |            /* respectively */
 2401|  2.72k|            {
 2402|  2.72k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 2403|  2.72k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 2404|  2.72k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 2405|  2.72k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 2406|  2.72k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 2407|  2.72k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 2408|  2.72k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 2409|  2.72k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 2410|       |
 2411|  2.72k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 2412|  2.72k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 2413|  2.72k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 2414|  2.72k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 2415|  2.72k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 2416|  2.72k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 2417|  2.72k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 2418|  2.72k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 2419|  2.72k|                m_temp_reg_10 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 2420|  2.72k|                m_temp_reg_11 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 2421|  2.72k|                m_temp_reg_12 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 2422|  2.72k|                m_temp_reg_13 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 2423|       |
 2424|  2.72k|                m_temp_reg_14 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 2425|  2.72k|                m_temp_reg_15 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 2426|  2.72k|                m_temp_reg_16 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 2427|  2.72k|                m_temp_reg_17 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 2428|  2.72k|            }
 2429|       |
 2430|       |            /* Recon and store */
 2431|  2.72k|            {
 2432|  2.72k|                m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2433|  2.72k|                pu1_pred += pred_strd;
 2434|  2.72k|                m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2435|  2.72k|                pu1_pred += pred_strd;
 2436|  2.72k|                m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2437|  2.72k|                pu1_pred += pred_strd;
 2438|  2.72k|                m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2439|  2.72k|                pu1_pred += pred_strd;
 2440|  2.72k|                m_temp_reg_4 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2441|  2.72k|                pu1_pred += pred_strd;
 2442|  2.72k|                m_temp_reg_5 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2443|  2.72k|                pu1_pred += pred_strd;
 2444|  2.72k|                m_temp_reg_6 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2445|  2.72k|                pu1_pred += pred_strd;
 2446|  2.72k|                m_temp_reg_7 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2447|       |
 2448|       |
 2449|  2.72k|                m_temp_reg_50 = _mm_setzero_si128();
 2450|  2.72k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, m_temp_reg_50);
 2451|  2.72k|                m_temp_reg_1 = _mm_unpacklo_epi8(m_temp_reg_1, m_temp_reg_50);
 2452|  2.72k|                m_temp_reg_2 = _mm_unpacklo_epi8(m_temp_reg_2, m_temp_reg_50);
 2453|  2.72k|                m_temp_reg_3 = _mm_unpacklo_epi8(m_temp_reg_3, m_temp_reg_50);
 2454|  2.72k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_50);
 2455|  2.72k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_50);
 2456|  2.72k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_6, m_temp_reg_50);
 2457|  2.72k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_7, m_temp_reg_50);
 2458|       |
 2459|  2.72k|                m_temp_reg_50 = _mm_add_epi16(m_temp_reg_10, m_temp_reg_0);
 2460|  2.72k|                m_temp_reg_51 = _mm_add_epi16(m_temp_reg_11, m_temp_reg_1);
 2461|  2.72k|                m_temp_reg_52 = _mm_add_epi16(m_temp_reg_12, m_temp_reg_2);
 2462|  2.72k|                m_temp_reg_53 = _mm_add_epi16(m_temp_reg_13, m_temp_reg_3);
 2463|  2.72k|                m_temp_reg_54 = _mm_add_epi16(m_temp_reg_14, m_temp_reg_4);
 2464|  2.72k|                m_temp_reg_55 = _mm_add_epi16(m_temp_reg_15, m_temp_reg_5);
 2465|  2.72k|                m_temp_reg_56 = _mm_add_epi16(m_temp_reg_16, m_temp_reg_6);
 2466|  2.72k|                m_temp_reg_57 = _mm_add_epi16(m_temp_reg_17, m_temp_reg_7);
 2467|       |
 2468|  2.72k|                m_temp_reg_50 = _mm_packus_epi16(m_temp_reg_50, m_temp_reg_50);
 2469|  2.72k|                m_temp_reg_51 = _mm_packus_epi16(m_temp_reg_51, m_temp_reg_51);
 2470|  2.72k|                m_temp_reg_52 = _mm_packus_epi16(m_temp_reg_52, m_temp_reg_52);
 2471|  2.72k|                m_temp_reg_53 = _mm_packus_epi16(m_temp_reg_53, m_temp_reg_53);
 2472|  2.72k|                m_temp_reg_54 = _mm_packus_epi16(m_temp_reg_54, m_temp_reg_54);
 2473|  2.72k|                m_temp_reg_55 = _mm_packus_epi16(m_temp_reg_55, m_temp_reg_55);
 2474|  2.72k|                m_temp_reg_56 = _mm_packus_epi16(m_temp_reg_56, m_temp_reg_56);
 2475|  2.72k|                m_temp_reg_57 = _mm_packus_epi16(m_temp_reg_57, m_temp_reg_57);
 2476|       |
 2477|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_50);
 2478|  2.72k|                pu1_dst += dst_strd;
 2479|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_51);
 2480|  2.72k|                pu1_dst += dst_strd;
 2481|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_52);
 2482|  2.72k|                pu1_dst += dst_strd;
 2483|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_53);
 2484|  2.72k|                pu1_dst += dst_strd;
 2485|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_54);
 2486|  2.72k|                pu1_dst += dst_strd;
 2487|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_55);
 2488|  2.72k|                pu1_dst += dst_strd;
 2489|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_56);
 2490|  2.72k|                pu1_dst += dst_strd;
 2491|  2.72k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_57);
 2492|  2.72k|                pu1_dst += dst_strd;
 2493|       |
 2494|  2.72k|            }
 2495|       |
 2496|       |
 2497|  2.72k|        }
 2498|       |
 2499|       |
 2500|  2.72k|    }
 2501|  9.28k|}

ihevc_itrans_recon_4x4_ttype1_ssse3:
  121|  28.1k|{
  122|  28.1k|    __m128i m_temp_reg_0;
  123|  28.1k|    __m128i m_temp_reg_1;
  124|  28.1k|    __m128i m_temp_reg_2;
  125|  28.1k|    __m128i m_temp_reg_3;
  126|  28.1k|    __m128i m_temp_reg_4;
  127|  28.1k|    __m128i m_temp_reg_10;
  128|  28.1k|    __m128i m_temp_reg_11;
  129|  28.1k|    __m128i m_temp_reg_12;
  130|  28.1k|    __m128i m_temp_reg_13;
  131|  28.1k|    __m128i m_temp_reg_14;
  132|  28.1k|    __m128i m_temp_reg_20;
  133|  28.1k|    __m128i m_temp_reg_21;
  134|  28.1k|    __m128i m_temp_reg_22;
  135|  28.1k|    __m128i m_temp_reg_23;
  136|  28.1k|    __m128i m_temp_reg_24;
  137|  28.1k|    __m128i m_temp_reg_25;
  138|  28.1k|    __m128i m_temp_reg_30;
  139|  28.1k|    __m128i m_temp_reg_31;
  140|  28.1k|    __m128i m_temp_reg_32;
  141|  28.1k|    __m128i m_temp_reg_33;
  142|  28.1k|    __m128i m_temp_reg_34;
  143|  28.1k|    __m128i m_temp_reg_35;
  144|  28.1k|    __m128i m_temp_reg_36;
  145|  28.1k|    __m128i m_rdng_factor;
  146|  28.1k|    __m128i m_count;
  147|       |
  148|  28.1k|    __m128i m_ge_zero16b_flag_row0;
  149|  28.1k|    __m128i m_ge_zero16b_flag_row1;
  150|  28.1k|    __m128i m_ge_zero16b_flag_row2;
  151|  28.1k|    __m128i m_ge_zero16b_flag_row3;
  152|       |
  153|  28.1k|    __m128i m_zero = _mm_setzero_si128();
  154|       |
  155|  28.1k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  28.1k|#define IT_SHIFT_STAGE_1 7
  ------------------
  156|  28.1k|    UNUSED(zero_cols);
  ------------------
  |  |   38|  28.1k|#define UNUSED(x) ((void)(x))
  ------------------
  157|  28.1k|    UNUSED(zero_rows);
  ------------------
  |  |   38|  28.1k|#define UNUSED(x) ((void)(x))
  ------------------
  158|  28.1k|    UNUSED(pi2_tmp);
  ------------------
  |  |   38|  28.1k|#define UNUSED(x) ((void)(x))
  ------------------
  159|  28.1k|    m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pi2_src);
  160|  28.1k|    pi2_src += src_strd;
  161|  28.1k|    m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pi2_src);
  162|  28.1k|    pi2_src += src_strd;
  163|  28.1k|    m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pi2_src);
  164|  28.1k|    pi2_src += src_strd;
  165|  28.1k|    m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pi2_src);
  166|       |
  167|  28.1k|    m_ge_zero16b_flag_row0 = _mm_cmpgt_epi16(m_zero, m_temp_reg_0);
  168|  28.1k|    m_ge_zero16b_flag_row1 = _mm_cmpgt_epi16(m_zero, m_temp_reg_1);
  169|  28.1k|    m_ge_zero16b_flag_row2 = _mm_cmpgt_epi16(m_zero, m_temp_reg_2);
  170|  28.1k|    m_ge_zero16b_flag_row3 = _mm_cmpgt_epi16(m_zero, m_temp_reg_3);
  171|       |
  172|  28.1k|    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_0, m_ge_zero16b_flag_row0);
  173|  28.1k|    m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_1, m_ge_zero16b_flag_row1);
  174|  28.1k|    m_temp_reg_2 = _mm_unpacklo_epi16(m_temp_reg_2, m_ge_zero16b_flag_row2);
  175|  28.1k|    m_temp_reg_3 = _mm_unpacklo_epi16(m_temp_reg_3, m_ge_zero16b_flag_row3);
  176|       |
  177|       |    /*m_temp_reg_0 = _mm_cvtepi16_epi32(m_temp_reg_0);
  178|       |    m_temp_reg_2 = _mm_cvtepi16_epi32(m_temp_reg_2);
  179|       |
  180|       |    m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_1);
  181|       |    m_temp_reg_3 = _mm_cvtepi16_epi32(m_temp_reg_3);*/
  182|       |
  183|       |    /* c[4] in m_temp_reg_14 */
  184|       |    /* c[4] = src[0] - src[2] + src[3] */
  185|  28.1k|    {
  186|  28.1k|        m_temp_reg_14 = _mm_sub_epi32(m_temp_reg_0, m_temp_reg_2);
  187|  28.1k|    }
  188|       |
  189|       |    /* c[3] in m_temp_reg_13 */
  190|  28.1k|    {
  191|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_1, 6);
  192|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_1, 3);
  193|  28.1k|        m_temp_reg_22 = _mm_slli_epi32(m_temp_reg_1, 1);
  194|  28.1k|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
  195|  28.1k|        m_temp_reg_13 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
  196|       |        //m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_1, m_coeff3);
  197|  28.1k|    }
  198|       |
  199|       |    /* c[0] in m_temp_reg_10 */
  200|  28.1k|    {
  201|  28.1k|        m_temp_reg_10 = _mm_add_epi32(m_temp_reg_0, m_temp_reg_2);
  202|  28.1k|    }
  203|       |
  204|       |    /* c[1] in m_temp_reg_11 */
  205|  28.1k|    {
  206|  28.1k|        m_temp_reg_11 = _mm_add_epi32(m_temp_reg_2, m_temp_reg_3);
  207|  28.1k|    }
  208|       |
  209|       |    /* c[2] in m_temp_reg_12 */
  210|  28.1k|    {
  211|  28.1k|        m_temp_reg_12 = _mm_sub_epi32(m_temp_reg_0, m_temp_reg_3);
  212|  28.1k|    }
  213|       |
  214|       |    /* c[4] in m_temp_reg_14 */
  215|       |    /* c[4] = src[0] - src[2] + src[3] */
  216|  28.1k|    {
  217|  28.1k|        m_temp_reg_14 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_3);
  218|  28.1k|    }
  219|       |
  220|       |    /* Stage 1 outputs stored in m_temp_reg_20-23 */
  221|  28.1k|    {
  222|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_10, 5);
  223|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_10, 1);
  224|  28.1k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_10);
  225|  28.1k|        m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_21);
  226|       |        //m_temp_reg_30 = _mm_mullo_epi32(m_temp_reg_10, m_coeff1);//29*c0
  227|       |
  228|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_11, 6);
  229|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_11, 3);
  230|  28.1k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_11);
  231|  28.1k|        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_21);
  232|       |        //m_temp_reg_31 = _mm_mullo_epi32(m_temp_reg_11, m_coeff2);//55*c1
  233|       |
  234|  28.1k|        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  235|       |
  236|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_11, 5);
  237|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_11, 1);
  238|  28.1k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_11);
  239|  28.1k|        m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_21);
  240|       |        //m_temp_reg_32 = _mm_mullo_epi32(m_temp_reg_11, m_coeff1);//29*c1
  241|       |
  242|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_12, 6);
  243|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_12, 3);
  244|  28.1k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_12);
  245|  28.1k|        m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_21);
  246|       |        //m_temp_reg_33 = _mm_mullo_epi32(m_temp_reg_12, m_coeff2);//55*c2
  247|       |
  248|  28.1k|        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  249|       |
  250|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_10, 6);
  251|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_10, 3);
  252|  28.1k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_10);
  253|  28.1k|        m_temp_reg_34 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_21);
  254|       |        //m_temp_reg_34 = _mm_mullo_epi32(m_temp_reg_10, m_coeff2);//55*c0
  255|       |
  256|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_12, 5);
  257|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_12, 1);
  258|  28.1k|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_12);
  259|  28.1k|        m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_21);
  260|       |        //m_temp_reg_35 = _mm_mullo_epi32(m_temp_reg_12, m_coeff1);//29*c2
  261|       |
  262|  28.1k|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_14, 6);
  263|  28.1k|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_14, 3);
  264|  28.1k|        m_temp_reg_22 = _mm_slli_epi32(m_temp_reg_14, 1);
  265|  28.1k|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
  266|  28.1k|        m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_23);
  267|       |        //m_temp_reg_36 = _mm_mullo_epi32(m_temp_reg_14, m_coeff3);//74*c4
  268|       |
  269|  28.1k|        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  270|  28.1k|        m_count = _mm_cvtsi32_si128(i4_shift);
  271|       |
  272|  28.1k|        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
  273|  28.1k|        m_temp_reg_4 = _mm_add_epi32(m_rdng_factor, m_temp_reg_13);
  274|  28.1k|        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_4);
  275|       |
  276|  28.1k|        m_temp_reg_21 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
  277|  28.1k|        m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_4);
  278|       |
  279|  28.1k|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_35);
  280|  28.1k|        m_temp_reg_4 = _mm_sub_epi32(m_rdng_factor, m_temp_reg_13);
  281|  28.1k|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_4);
  282|       |
  283|  28.1k|        m_temp_reg_22 = _mm_add_epi32(m_temp_reg_36, m_rdng_factor);
  284|       |
  285|  28.1k|        m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  286|  28.1k|        m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  287|  28.1k|        m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  288|  28.1k|        m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  289|       |
  290|  28.1k|        m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  291|  28.1k|        m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  292|  28.1k|        m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  293|  28.1k|        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  294|       |
  295|  28.1k|        m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  296|  28.1k|        m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  297|       |
  298|  28.1k|        m_temp_reg_30 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  299|  28.1k|        m_temp_reg_31 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  300|       |
  301|  28.1k|    }
  302|       |
  303|       |    /* Stage 2 */
  304|  28.1k|    {
  305|  28.1k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  28.1k|#define IT_SHIFT_STAGE_2 12
  ------------------
  306|       |
  307|       |        /*m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  308|       |        m_temp_reg_20 = _mm_cvtepi16_epi32(m_temp_reg_20);
  309|       |        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  310|       |        m_temp_reg_21 = _mm_cvtepi16_epi32(m_temp_reg_21);
  311|       |        m_temp_reg_22 = _mm_cvtepi16_epi32(m_temp_reg_22);
  312|       |        m_temp_reg_23 = _mm_cvtepi16_epi32(m_temp_reg_23);*/
  313|       |
  314|  28.1k|        m_ge_zero16b_flag_row0 = _mm_cmpgt_epi16(m_zero, m_temp_reg_30);
  315|  28.1k|        m_ge_zero16b_flag_row1 = _mm_cmpgt_epi16(m_zero, m_temp_reg_31);
  316|       |
  317|  28.1k|        m_temp_reg_20 = _mm_unpacklo_epi16(m_temp_reg_30, m_ge_zero16b_flag_row0);
  318|  28.1k|        m_temp_reg_21 = _mm_unpacklo_epi16(m_temp_reg_31, m_ge_zero16b_flag_row1);
  319|  28.1k|        m_temp_reg_22 = _mm_unpackhi_epi16(m_temp_reg_30, m_ge_zero16b_flag_row0);
  320|  28.1k|        m_temp_reg_23 = _mm_unpackhi_epi16(m_temp_reg_31, m_ge_zero16b_flag_row1);
  321|       |
  322|       |
  323|       |        /* c[4] stored in m_temp_reg_4 */
  324|  28.1k|        {
  325|  28.1k|            m_temp_reg_4 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_21);
  326|  28.1k|        }
  327|       |
  328|       |        /* c[3] stored in m_temp_reg_3 */
  329|  28.1k|        {
  330|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_22, 6);
  331|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_22, 3);
  332|  28.1k|            m_temp_reg_12 = _mm_slli_epi32(m_temp_reg_22, 1);
  333|  28.1k|            m_temp_reg_13 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_11);
  334|  28.1k|            m_temp_reg_3 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_13);
  335|       |            //m_temp_reg_3 = _mm_mullo_epi32(m_temp_reg_22, m_coeff3);
  336|  28.1k|        }
  337|       |
  338|       |        /* c[0] stored in m_temp_reg_0 */
  339|  28.1k|        {
  340|  28.1k|            m_temp_reg_0 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
  341|  28.1k|        }
  342|       |
  343|       |        /* c[1] stored in m_temp_reg_1 */
  344|  28.1k|        {
  345|  28.1k|            m_temp_reg_1 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_21);
  346|  28.1k|        }
  347|       |
  348|       |        /* c[2] stored in m_temp_reg_2 */
  349|  28.1k|        {
  350|  28.1k|            m_temp_reg_2 = _mm_sub_epi32(m_temp_reg_20, m_temp_reg_23);
  351|  28.1k|        }
  352|       |
  353|       |        /* c[4] stored in m_temp_reg_4 */
  354|  28.1k|        {
  355|  28.1k|            m_temp_reg_4 = _mm_add_epi32(m_temp_reg_4, m_temp_reg_23);
  356|  28.1k|        }
  357|       |
  358|       |        /* Stage 2 output generation */
  359|  28.1k|        {
  360|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_0, 5);
  361|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_0, 1);
  362|  28.1k|            m_temp_reg_13 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_0);
  363|  28.1k|            m_temp_reg_30 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_11);
  364|       |            //m_temp_reg_30 = _mm_mullo_epi32(m_temp_reg_0, m_coeff1);//29*c0
  365|       |
  366|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_1, 6);
  367|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_1, 3);
  368|  28.1k|            m_temp_reg_13 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_1);
  369|  28.1k|            m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_11);
  370|       |            //m_temp_reg_31 = _mm_mullo_epi32(m_temp_reg_1, m_coeff2);//55*c1
  371|       |
  372|  28.1k|            m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  373|       |
  374|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_1, 5);
  375|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_1, 1);
  376|  28.1k|            m_temp_reg_13 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_1);
  377|  28.1k|            m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_11);
  378|       |            //m_temp_reg_32 = _mm_mullo_epi32(m_temp_reg_1, m_coeff1);//29*c1
  379|       |
  380|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_2, 6);
  381|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_2, 3);
  382|  28.1k|            m_temp_reg_13 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_2);
  383|  28.1k|            m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_11);
  384|       |            //m_temp_reg_33 = _mm_mullo_epi32(m_temp_reg_2, m_coeff2);//55*c2
  385|       |
  386|  28.1k|            m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  387|       |
  388|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_0, 6);
  389|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_0, 3);
  390|  28.1k|            m_temp_reg_13 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_0);
  391|  28.1k|            m_temp_reg_34 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_11);
  392|       |            //m_temp_reg_34 = _mm_mullo_epi32(m_temp_reg_0, m_coeff2);//55*c0
  393|       |
  394|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_2, 5);
  395|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_2, 1);
  396|  28.1k|            m_temp_reg_13 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_2);
  397|  28.1k|            m_temp_reg_35 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_11);
  398|       |            //m_temp_reg_35 = _mm_mullo_epi32(m_temp_reg_2, m_coeff1);//29*c2
  399|       |
  400|  28.1k|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_4, 6);
  401|  28.1k|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_4, 3);
  402|  28.1k|            m_temp_reg_12 = _mm_slli_epi32(m_temp_reg_4, 1);
  403|  28.1k|            m_temp_reg_13 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_11);
  404|  28.1k|            m_temp_reg_36 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_13);
  405|       |            //m_temp_reg_36 = _mm_mullo_epi32(m_temp_reg_4, m_coeff3);//74*c4
  406|       |
  407|  28.1k|            m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  408|  28.1k|            m_count = _mm_cvtsi32_si128(i4_shift);
  409|       |
  410|  28.1k|            m_temp_reg_4 = _mm_add_epi32(m_rdng_factor, m_temp_reg_3);
  411|  28.1k|            m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_31);
  412|  28.1k|            m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_4);
  413|       |
  414|  28.1k|            m_temp_reg_21 = _mm_sub_epi32(m_temp_reg_33, m_temp_reg_32);
  415|  28.1k|            m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_4);
  416|       |
  417|  28.1k|            m_temp_reg_4 = _mm_sub_epi32(m_rdng_factor, m_temp_reg_3);
  418|  28.1k|            m_temp_reg_23 = _mm_add_epi32(m_temp_reg_34, m_temp_reg_35);
  419|  28.1k|            m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_4);
  420|       |
  421|  28.1k|            m_temp_reg_22 = _mm_add_epi32(m_temp_reg_36, m_rdng_factor);
  422|       |
  423|  28.1k|            m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  424|  28.1k|            m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  425|  28.1k|            m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  426|  28.1k|            m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  427|       |
  428|  28.1k|            m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  429|  28.1k|            m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  430|  28.1k|            m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  431|  28.1k|            m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  432|       |
  433|  28.1k|            m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  434|  28.1k|            m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  435|       |
  436|  28.1k|            m_temp_reg_20 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  437|  28.1k|            m_temp_reg_21 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  438|  28.1k|        }
  439|       |
  440|       |        /* Recon and store */
  441|  28.1k|        {
  442|  28.1k|            WORD32 *pi4_dst = (WORD32 *)pu1_dst;
  443|       |
  444|  28.1k|            m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
  445|  28.1k|            pu1_pred += pred_strd;
  446|  28.1k|            m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
  447|  28.1k|            pu1_pred += pred_strd;
  448|  28.1k|            m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
  449|  28.1k|            pu1_pred += pred_strd;
  450|  28.1k|            m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
  451|       |
  452|  28.1k|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, m_zero);
  453|  28.1k|            m_temp_reg_1 = _mm_unpacklo_epi8(m_temp_reg_1, m_zero);
  454|  28.1k|            m_temp_reg_2 = _mm_unpacklo_epi8(m_temp_reg_2, m_zero);
  455|  28.1k|            m_temp_reg_3 = _mm_unpacklo_epi8(m_temp_reg_3, m_zero);
  456|       |
  457|       |            /*m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
  458|       |            m_temp_reg_1 = _mm_cvtepu8_epi16(m_temp_reg_1);
  459|       |            m_temp_reg_2 = _mm_cvtepu8_epi16(m_temp_reg_2);
  460|       |            m_temp_reg_3 = _mm_cvtepu8_epi16(m_temp_reg_3);*/
  461|       |
  462|  28.1k|            m_temp_reg_0 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_1);
  463|  28.1k|            m_temp_reg_1 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_3);
  464|       |
  465|  28.1k|            m_temp_reg_20 = _mm_add_epi16(m_temp_reg_20, m_temp_reg_0);
  466|  28.1k|            m_temp_reg_21 = _mm_add_epi16(m_temp_reg_21, m_temp_reg_1);
  467|       |
  468|  28.1k|            m_temp_reg_0 = _mm_packus_epi16(m_temp_reg_20, m_temp_reg_21);
  469|       |
  470|  28.1k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_0);
  471|  28.1k|            m_temp_reg_1 = _mm_srli_si128(m_temp_reg_0, 4);
  472|  28.1k|            m_temp_reg_2 = _mm_srli_si128(m_temp_reg_0, 8);
  473|  28.1k|            m_temp_reg_3 = _mm_srli_si128(m_temp_reg_0, 12);
  474|  28.1k|            pu1_dst += dst_strd;
  475|  28.1k|            pi4_dst = (WORD32 *)(pu1_dst);
  476|       |
  477|  28.1k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_1);
  478|  28.1k|            pu1_dst += dst_strd;
  479|  28.1k|            pi4_dst = (WORD32 *)(pu1_dst);
  480|       |
  481|  28.1k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_2);
  482|  28.1k|            pu1_dst += dst_strd;
  483|  28.1k|            pi4_dst = (WORD32 *)(pu1_dst);
  484|       |
  485|  28.1k|            *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_3);
  486|  28.1k|        }
  487|  28.1k|    }
  488|  28.1k|}
ihevc_itrans_recon_4x4_ssse3:
  553|    900|{
  554|    900|    __m128i m_temp_reg_0;
  555|    900|    __m128i m_temp_reg_1;
  556|    900|    __m128i m_temp_reg_2;
  557|    900|    __m128i m_temp_reg_3;
  558|    900|    __m128i m_temp_reg_4;
  559|    900|    __m128i m_temp_reg_10;
  560|    900|    __m128i m_temp_reg_11;
  561|    900|    __m128i m_temp_reg_12;
  562|    900|    __m128i m_temp_reg_13;
  563|    900|    __m128i m_temp_reg_14;
  564|    900|    __m128i m_temp_reg_15;
  565|    900|    __m128i m_temp_reg_20;
  566|    900|    __m128i m_temp_reg_21;
  567|    900|    __m128i m_temp_reg_22;
  568|    900|    __m128i m_temp_reg_23;
  569|    900|    __m128i m_temp_reg_24;
  570|    900|    __m128i m_temp_reg_25;
  571|    900|    __m128i m_temp_reg_30;
  572|    900|    __m128i m_temp_reg_31;
  573|    900|    __m128i m_temp_reg_33;
  574|    900|    __m128i m_temp_reg_34;
  575|    900|    __m128i m_rdng_factor;
  576|    900|    __m128i m_count;
  577|       |
  578|    900|    __m128i m_ge_zero16b_flag_row0;
  579|    900|    __m128i m_ge_zero16b_flag_row1;
  580|    900|    __m128i m_ge_zero16b_flag_row2;
  581|    900|    __m128i m_ge_zero16b_flag_row3;
  582|       |
  583|    900|    __m128i m_zero = _mm_setzero_si128();
  584|       |
  585|    900|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|    900|#define IT_SHIFT_STAGE_1 7
  ------------------
  586|    900|    UNUSED(zero_rows);
  ------------------
  |  |   38|    900|#define UNUSED(x) ((void)(x))
  ------------------
  587|    900|    UNUSED(zero_cols);
  ------------------
  |  |   38|    900|#define UNUSED(x) ((void)(x))
  ------------------
  588|    900|    UNUSED(pi2_tmp);
  ------------------
  |  |   38|    900|#define UNUSED(x) ((void)(x))
  ------------------
  589|       |
  590|    900|    m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pi2_src);
  591|    900|    pi2_src += src_strd;
  592|    900|    m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pi2_src);
  593|    900|    pi2_src += src_strd;
  594|    900|    m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pi2_src);
  595|    900|    pi2_src += src_strd;
  596|    900|    m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pi2_src);
  597|       |
  598|    900|    m_ge_zero16b_flag_row0 = _mm_cmpgt_epi16(m_zero, m_temp_reg_0);
  599|    900|    m_ge_zero16b_flag_row1 = _mm_cmpgt_epi16(m_zero, m_temp_reg_1);
  600|    900|    m_ge_zero16b_flag_row2 = _mm_cmpgt_epi16(m_zero, m_temp_reg_2);
  601|    900|    m_ge_zero16b_flag_row3 = _mm_cmpgt_epi16(m_zero, m_temp_reg_3);
  602|       |
  603|    900|    m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_0, m_ge_zero16b_flag_row0);
  604|    900|    m_temp_reg_1 = _mm_unpacklo_epi16(m_temp_reg_1, m_ge_zero16b_flag_row1);
  605|    900|    m_temp_reg_2 = _mm_unpacklo_epi16(m_temp_reg_2, m_ge_zero16b_flag_row2);
  606|    900|    m_temp_reg_3 = _mm_unpacklo_epi16(m_temp_reg_3, m_ge_zero16b_flag_row3);
  607|       |
  608|       |    /*m_temp_reg_0 = _mm_cvtepi16_epi32(m_temp_reg_0);
  609|       |    m_temp_reg_2 = _mm_cvtepi16_epi32(m_temp_reg_2);
  610|       |
  611|       |    m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_1);
  612|       |    m_temp_reg_3 = _mm_cvtepi16_epi32(m_temp_reg_3);*/
  613|       |
  614|       |    /* e */
  615|    900|    {
  616|    900|        m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_0, 6);
  617|    900|        m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_2, 6);
  618|    900|    }
  619|       |
  620|       |    /* o */
  621|    900|    {
  622|    900|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_1, 5);
  623|    900|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_1, 2);
  624|    900|        m_temp_reg_12 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
  625|       |        //m_temp_reg_12 = _mm_mullo_epi32(m_temp_reg_1, m_coeff1);//src[1]*36
  626|       |
  627|    900|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_3, 6);
  628|    900|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_3, 4);
  629|    900|        m_temp_reg_22 = _mm_slli_epi32(m_temp_reg_3, 1);
  630|    900|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_3);
  631|    900|        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_22);
  632|    900|        m_temp_reg_13 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_24);
  633|       |        //m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_3, m_coeff3);//src[3]*83
  634|       |
  635|    900|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_1, 6);
  636|    900|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_1, 4);
  637|    900|        m_temp_reg_22 = _mm_slli_epi32(m_temp_reg_1, 1);
  638|    900|        m_temp_reg_23 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_1);
  639|    900|        m_temp_reg_24 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_22);
  640|    900|        m_temp_reg_14 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_24);
  641|       |        //m_temp_reg_14 = _mm_mullo_epi32(m_temp_reg_1, m_coeff3);//src[1]*83
  642|       |
  643|    900|        m_temp_reg_20 = _mm_slli_epi32(m_temp_reg_3, 5);
  644|    900|        m_temp_reg_21 = _mm_slli_epi32(m_temp_reg_3, 2);
  645|    900|        m_temp_reg_15 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_21);
  646|       |        //m_temp_reg_15 = _mm_mullo_epi32(m_temp_reg_3, m_coeff1);//src[3]*36
  647|    900|    }
  648|       |
  649|    900|    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  650|       |
  651|       |    /* e1 stored in m_temp_reg_31 */
  652|    900|    {
  653|    900|        m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_11);
  654|    900|    }
  655|       |
  656|    900|    m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  657|       |
  658|       |    /* e0 stored in m_temp_reg_30 */
  659|    900|    {
  660|    900|        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_11);
  661|    900|    }
  662|       |
  663|    900|    m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  664|    900|    m_count = _mm_cvtsi32_si128(i4_shift);
  665|       |
  666|       |    /* o1 stored in m_temp_reg_33 */
  667|    900|    {
  668|    900|        m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_13);
  669|    900|    }
  670|       |
  671|       |    /* e1 + add */
  672|    900|    {
  673|    900|        m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  674|    900|    }
  675|       |
  676|       |    /* e0 + add */
  677|    900|    {
  678|    900|        m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  679|    900|    }
  680|       |
  681|       |    /* o0 stored in m_temp_reg_34 */
  682|    900|    {
  683|    900|        m_temp_reg_34 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_15);
  684|    900|    }
  685|       |
  686|       |    /* Stage 1 outputs */
  687|    900|    {
  688|    900|        m_temp_reg_21 = _mm_add_epi32(m_temp_reg_31, m_temp_reg_33);
  689|    900|        m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_31, m_temp_reg_33);
  690|       |
  691|    900|        m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_34);
  692|    900|        m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_34);
  693|       |
  694|       |
  695|    900|        m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  696|    900|        m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  697|    900|        m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  698|    900|        m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  699|       |
  700|    900|        m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  701|    900|        m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  702|    900|        m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  703|    900|        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  704|       |
  705|    900|        m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  706|    900|        m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  707|       |
  708|    900|        m_temp_reg_30 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  709|    900|        m_temp_reg_31 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  710|    900|    }
  711|       |
  712|       |    /* Stage 2 */
  713|    900|    {
  714|    900|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|    900|#define IT_SHIFT_STAGE_2 12
  ------------------
  715|       |
  716|       |        /*m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  717|       |        m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);*/
  718|       |
  719|    900|        m_ge_zero16b_flag_row0 = _mm_cmpgt_epi16(m_zero, m_temp_reg_30);
  720|    900|        m_ge_zero16b_flag_row1 = _mm_cmpgt_epi16(m_zero, m_temp_reg_31);
  721|       |
  722|    900|        m_temp_reg_20 = _mm_unpacklo_epi16(m_temp_reg_30, m_ge_zero16b_flag_row0);
  723|    900|        m_temp_reg_21 = _mm_unpacklo_epi16(m_temp_reg_31, m_ge_zero16b_flag_row1);
  724|    900|        m_temp_reg_22 = _mm_unpackhi_epi16(m_temp_reg_30, m_ge_zero16b_flag_row0);
  725|    900|        m_temp_reg_23 = _mm_unpackhi_epi16(m_temp_reg_31, m_ge_zero16b_flag_row1);
  726|       |
  727|       |        /*m_temp_reg_20 = _mm_cvtepi16_epi32(m_temp_reg_20);
  728|       |        m_temp_reg_21 = _mm_cvtepi16_epi32(m_temp_reg_21);
  729|       |
  730|       |        m_temp_reg_22 = _mm_cvtepi16_epi32(m_temp_reg_22);
  731|       |        m_temp_reg_23 = _mm_cvtepi16_epi32(m_temp_reg_23);*/
  732|       |
  733|       |        /* e */
  734|    900|        {
  735|    900|            m_temp_reg_10 = _mm_slli_epi32(m_temp_reg_20, 6);
  736|    900|        }
  737|       |
  738|       |        /* o */
  739|       |        /*{
  740|       |            m_temp_reg_12 = _mm_mullo_epi32(m_temp_reg_22, m_coeff1);//src[1]*36
  741|       |            m_temp_reg_14 = _mm_mullo_epi32(m_temp_reg_22, m_coeff3);//src[1]*83
  742|       |            m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_23, m_coeff3);//src[3]*83
  743|       |            m_temp_reg_15 = _mm_mullo_epi32(m_temp_reg_23, m_coeff1);//src[3]*36
  744|       |        }*/
  745|    900|        {
  746|    900|            m_temp_reg_0 = _mm_slli_epi32(m_temp_reg_22, 5);
  747|    900|            m_temp_reg_1 = _mm_slli_epi32(m_temp_reg_22, 2);
  748|    900|            m_temp_reg_12 = _mm_add_epi32(m_temp_reg_0, m_temp_reg_1);
  749|       |            //m_temp_reg_12 = _mm_mullo_epi32(m_temp_reg_1, m_coeff1);//src[1]*36
  750|       |
  751|    900|            m_temp_reg_0 = _mm_slli_epi32(m_temp_reg_23, 6);
  752|    900|            m_temp_reg_1 = _mm_slli_epi32(m_temp_reg_23, 4);
  753|    900|            m_temp_reg_2 = _mm_slli_epi32(m_temp_reg_23, 1);
  754|    900|            m_temp_reg_3 = _mm_add_epi32(m_temp_reg_0, m_temp_reg_23);
  755|    900|            m_temp_reg_4 = _mm_add_epi32(m_temp_reg_1, m_temp_reg_2);
  756|    900|            m_temp_reg_13 = _mm_add_epi32(m_temp_reg_3, m_temp_reg_4);
  757|       |            //m_temp_reg_13 = _mm_mullo_epi32(m_temp_reg_3, m_coeff3);//src[3]*83
  758|       |
  759|    900|            m_temp_reg_0 = _mm_slli_epi32(m_temp_reg_22, 6);
  760|    900|            m_temp_reg_1 = _mm_slli_epi32(m_temp_reg_22, 4);
  761|    900|            m_temp_reg_2 = _mm_slli_epi32(m_temp_reg_22, 1);
  762|    900|            m_temp_reg_3 = _mm_add_epi32(m_temp_reg_0, m_temp_reg_22);
  763|    900|            m_temp_reg_4 = _mm_add_epi32(m_temp_reg_1, m_temp_reg_2);
  764|    900|            m_temp_reg_14 = _mm_add_epi32(m_temp_reg_3, m_temp_reg_4);
  765|       |            //m_temp_reg_14 = _mm_mullo_epi32(m_temp_reg_1, m_coeff3);//src[1]*83
  766|       |
  767|    900|            m_temp_reg_0 = _mm_slli_epi32(m_temp_reg_23, 5);
  768|    900|            m_temp_reg_1 = _mm_slli_epi32(m_temp_reg_23, 2);
  769|    900|            m_temp_reg_15 = _mm_add_epi32(m_temp_reg_0, m_temp_reg_1);
  770|       |            //m_temp_reg_15 = _mm_mullo_epi32(m_temp_reg_3, m_coeff1);//src[3]*36
  771|    900|        }
  772|       |
  773|       |        /* e */
  774|    900|        {
  775|    900|            m_temp_reg_11 = _mm_slli_epi32(m_temp_reg_21, 6);
  776|    900|        }
  777|       |
  778|    900|        m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
  779|       |
  780|       |        /* e1 stored in m_temp_reg_31 */
  781|    900|        {
  782|    900|            m_temp_reg_31 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_11);
  783|    900|        }
  784|       |
  785|    900|        m_rdng_factor = _mm_unpacklo_epi32(m_rdng_factor, m_rdng_factor);
  786|       |
  787|       |        /* e0 stored in m_temp_reg_30 */
  788|    900|        {
  789|    900|            m_temp_reg_30 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_11);
  790|    900|        }
  791|       |
  792|    900|        m_rdng_factor = _mm_unpacklo_epi64(m_rdng_factor, m_rdng_factor);
  793|    900|        m_count = _mm_cvtsi32_si128(i4_shift);
  794|       |
  795|       |        /* o1 stored in m_temp_reg_33 */
  796|    900|        {
  797|    900|            m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_13);
  798|    900|        }
  799|       |
  800|       |        /* e1 + add */
  801|    900|        {
  802|    900|            m_temp_reg_31 = _mm_add_epi32(m_temp_reg_31, m_rdng_factor);
  803|    900|        }
  804|       |
  805|       |        /* e0 + add */
  806|    900|        {
  807|    900|            m_temp_reg_30 = _mm_add_epi32(m_temp_reg_30, m_rdng_factor);
  808|    900|        }
  809|       |
  810|       |        /* o0 stored in m_temp_reg_34 */
  811|    900|        {
  812|    900|            m_temp_reg_34 = _mm_add_epi32(m_temp_reg_14, m_temp_reg_15);
  813|    900|        }
  814|       |
  815|       |        /* Stage 2 outputs */
  816|    900|        {
  817|    900|            m_temp_reg_21 = _mm_add_epi32(m_temp_reg_31, m_temp_reg_33);
  818|    900|            m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_31, m_temp_reg_33);
  819|    900|            m_temp_reg_20 = _mm_add_epi32(m_temp_reg_30, m_temp_reg_34);
  820|    900|            m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_30, m_temp_reg_34);
  821|       |
  822|    900|            m_temp_reg_21 = _mm_sra_epi32(m_temp_reg_21, m_count);
  823|    900|            m_temp_reg_22 = _mm_sra_epi32(m_temp_reg_22, m_count);
  824|    900|            m_temp_reg_20 = _mm_sra_epi32(m_temp_reg_20, m_count);
  825|    900|            m_temp_reg_23 = _mm_sra_epi32(m_temp_reg_23, m_count);
  826|       |
  827|    900|            m_temp_reg_20 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
  828|    900|            m_temp_reg_21 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
  829|    900|            m_temp_reg_22 = _mm_srli_si128(m_temp_reg_20, 8);
  830|    900|            m_temp_reg_23 = _mm_srli_si128(m_temp_reg_21, 8);
  831|       |
  832|    900|            m_temp_reg_24 = _mm_unpacklo_epi16(m_temp_reg_20, m_temp_reg_22);
  833|    900|            m_temp_reg_25 = _mm_unpacklo_epi16(m_temp_reg_21, m_temp_reg_23);
  834|       |
  835|    900|            m_temp_reg_20 = _mm_unpacklo_epi32(m_temp_reg_24, m_temp_reg_25);
  836|    900|            m_temp_reg_21 = _mm_unpackhi_epi32(m_temp_reg_24, m_temp_reg_25);
  837|    900|        }
  838|       |
  839|       |        /* Recon and store */
  840|    900|        {
  841|    900|            UWORD32 *pu4_dst = (UWORD32 *)pu1_dst;
  842|       |
  843|    900|            m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
  844|    900|            pu1_pred += pred_strd;
  845|    900|            m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
  846|    900|            pu1_pred += pred_strd;
  847|    900|            m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
  848|    900|            pu1_pred += pred_strd;
  849|    900|            m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
  850|       |
  851|       |            //m_temp_reg_0 = _mm_cvtepu8_epi16(m_temp_reg_0);
  852|       |            //m_temp_reg_1 = _mm_cvtepu8_epi16(m_temp_reg_1);
  853|       |
  854|       |            //m_temp_reg_2 = _mm_cvtepu8_epi16(m_temp_reg_2);
  855|       |            //m_temp_reg_3 = _mm_cvtepu8_epi16(m_temp_reg_3);
  856|       |
  857|    900|            m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, m_zero);
  858|    900|            m_temp_reg_1 = _mm_unpacklo_epi8(m_temp_reg_1, m_zero);
  859|    900|            m_temp_reg_2 = _mm_unpacklo_epi8(m_temp_reg_2, m_zero);
  860|    900|            m_temp_reg_3 = _mm_unpacklo_epi8(m_temp_reg_3, m_zero);
  861|       |
  862|    900|            m_temp_reg_0 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_1);
  863|    900|            m_temp_reg_1 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_3);
  864|       |
  865|    900|            m_temp_reg_20 = _mm_add_epi16(m_temp_reg_20, m_temp_reg_0);
  866|    900|            m_temp_reg_21 = _mm_add_epi16(m_temp_reg_21, m_temp_reg_1);
  867|       |
  868|    900|            m_temp_reg_0 = _mm_packus_epi16(m_temp_reg_20, m_temp_reg_21);
  869|       |
  870|    900|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_0);
  871|    900|            m_temp_reg_1 = _mm_srli_si128(m_temp_reg_0, 4);
  872|    900|            m_temp_reg_2 = _mm_srli_si128(m_temp_reg_0, 8);
  873|    900|            m_temp_reg_3 = _mm_srli_si128(m_temp_reg_0, 12);
  874|    900|            pu1_dst += dst_strd;
  875|    900|            pu4_dst = (UWORD32 *)(pu1_dst);
  876|       |
  877|    900|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_1);
  878|    900|            pu1_dst += dst_strd;
  879|    900|            pu4_dst = (UWORD32 *)(pu1_dst);
  880|       |
  881|    900|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_2);
  882|    900|            pu1_dst += dst_strd;
  883|    900|            pu4_dst = (UWORD32 *)(pu1_dst);
  884|       |
  885|    900|            *pu4_dst = _mm_cvtsi128_si32(m_temp_reg_3);
  886|    900|        }
  887|    900|    }
  888|    900|}
ihevc_itrans_recon_8x8_ssse3:
  955|  19.6k|{
  956|  19.6k|    __m128i m_temp_reg_0;
  957|  19.6k|    __m128i m_temp_reg_1;
  958|  19.6k|    __m128i m_temp_reg_2;
  959|  19.6k|    __m128i m_temp_reg_3;
  960|  19.6k|    __m128i m_temp_reg_5;
  961|  19.6k|    __m128i m_temp_reg_6;
  962|  19.6k|    __m128i m_temp_reg_7;
  963|  19.6k|    __m128i m_temp_reg_4;
  964|  19.6k|    __m128i m_temp_reg_10;
  965|  19.6k|    __m128i m_temp_reg_11;
  966|  19.6k|    __m128i m_temp_reg_12;
  967|  19.6k|    __m128i m_temp_reg_13;
  968|  19.6k|    __m128i m_temp_reg_14;
  969|  19.6k|    __m128i m_temp_reg_15;
  970|  19.6k|    __m128i m_temp_reg_16;
  971|  19.6k|    __m128i m_temp_reg_17;
  972|  19.6k|    __m128i m_temp_reg_20;
  973|  19.6k|    __m128i m_temp_reg_21;
  974|  19.6k|    __m128i m_temp_reg_22;
  975|  19.6k|    __m128i m_temp_reg_23;
  976|  19.6k|    __m128i m_temp_reg_24;
  977|  19.6k|    __m128i m_temp_reg_25;
  978|  19.6k|    __m128i m_temp_reg_26;
  979|  19.6k|    __m128i m_temp_reg_27;
  980|  19.6k|    __m128i m_temp_reg_30;
  981|  19.6k|    __m128i m_temp_reg_31;
  982|  19.6k|    __m128i m_temp_reg_32;
  983|  19.6k|    __m128i m_temp_reg_33;
  984|  19.6k|    __m128i m_temp_reg_34;
  985|  19.6k|    __m128i m_temp_reg_35;
  986|  19.6k|    __m128i m_temp_reg_36;
  987|  19.6k|    __m128i m_temp_reg_37;
  988|  19.6k|    __m128i m_temp_reg_40;
  989|  19.6k|    __m128i m_temp_reg_41;
  990|  19.6k|    __m128i m_temp_reg_42;
  991|  19.6k|    __m128i m_temp_reg_43;
  992|  19.6k|    __m128i m_temp_reg_44;
  993|  19.6k|    __m128i m_temp_reg_45;
  994|  19.6k|    __m128i m_temp_reg_46;
  995|  19.6k|    __m128i m_temp_reg_47;
  996|  19.6k|    __m128i m_temp_reg_50;
  997|  19.6k|    __m128i m_temp_reg_51;
  998|  19.6k|    __m128i m_temp_reg_52;
  999|  19.6k|    __m128i m_temp_reg_53;
 1000|  19.6k|    __m128i m_temp_reg_54;
 1001|  19.6k|    __m128i m_temp_reg_55;
 1002|  19.6k|    __m128i m_temp_reg_56;
 1003|  19.6k|    __m128i m_temp_reg_57;
 1004|  19.6k|    __m128i m_temp_reg_60;
 1005|  19.6k|    __m128i m_temp_reg_61;
 1006|  19.6k|    __m128i m_temp_reg_62;
 1007|  19.6k|    __m128i m_temp_reg_63;
 1008|  19.6k|    __m128i m_temp_reg_64;
 1009|  19.6k|    __m128i m_temp_reg_65;
 1010|  19.6k|    __m128i m_temp_reg_66;
 1011|  19.6k|    __m128i m_temp_reg_67;
 1012|  19.6k|    __m128i m_temp_reg_70;
 1013|  19.6k|    __m128i m_temp_reg_71;
 1014|  19.6k|    __m128i m_temp_reg_72;
 1015|  19.6k|    __m128i m_temp_reg_73;
 1016|  19.6k|    __m128i m_temp_reg_74;
 1017|  19.6k|    __m128i m_temp_reg_75;
 1018|  19.6k|    __m128i m_temp_reg_76;
 1019|  19.6k|    __m128i m_temp_reg_77;
 1020|  19.6k|    __m128i m_coeff1, m_coeff2, m_coeff3, m_coeff4;
 1021|       |
 1022|  19.6k|    WORD32 check_row_stage_1;   /* Lokesh */
 1023|  19.6k|    WORD32 check_row_stage_2;   /* Lokesh */
 1024|       |
 1025|  19.6k|    __m128i m_rdng_factor;
 1026|       |    //__m128i m_count;
 1027|  19.6k|    WORD32 i4_shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  19.6k|#define IT_SHIFT_STAGE_1 7
  ------------------
 1028|  19.6k|    UNUSED(zero_rows);
  ------------------
  |  |   38|  19.6k|#define UNUSED(x) ((void)(x))
  ------------------
 1029|  19.6k|    UNUSED(zero_cols);
  ------------------
  |  |   38|  19.6k|#define UNUSED(x) ((void)(x))
  ------------------
 1030|  19.6k|    UNUSED(pi2_tmp);
  ------------------
  |  |   38|  19.6k|#define UNUSED(x) ((void)(x))
  ------------------
 1031|       |
 1032|  19.6k|    check_row_stage_1   = ((zero_rows & 0xF0) != 0xF0) ? 1 : 0;
  ------------------
  |  Branch (1032:27): [True: 6.05k, False: 13.6k]
  ------------------
 1033|  19.6k|    check_row_stage_2   = ((zero_cols & 0xF0) != 0xF0) ? 1 : 0;
  ------------------
  |  Branch (1033:27): [True: 6.45k, False: 13.2k]
  ------------------
 1034|       |
 1035|  19.6k|    m_temp_reg_70 = _mm_load_si128((__m128i *)pi2_src);
 1036|  19.6k|    pi2_src += src_strd;
 1037|  19.6k|    m_temp_reg_71 = _mm_load_si128((__m128i *)pi2_src);
 1038|  19.6k|    pi2_src += src_strd;
 1039|  19.6k|    m_temp_reg_72 = _mm_load_si128((__m128i *)pi2_src);
 1040|  19.6k|    pi2_src += src_strd;
 1041|  19.6k|    m_temp_reg_73 = _mm_load_si128((__m128i *)pi2_src);
 1042|  19.6k|    pi2_src += src_strd;
 1043|       |
 1044|  19.6k|    m_temp_reg_74 = _mm_load_si128((__m128i *)pi2_src);
 1045|  19.6k|    pi2_src += src_strd;
 1046|  19.6k|    m_temp_reg_75 = _mm_load_si128((__m128i *)pi2_src);
 1047|  19.6k|    pi2_src += src_strd;
 1048|  19.6k|    m_temp_reg_76 = _mm_load_si128((__m128i *)pi2_src);
 1049|  19.6k|    pi2_src += src_strd;
 1050|  19.6k|    m_temp_reg_77 = _mm_load_si128((__m128i *)pi2_src);
 1051|       |
 1052|  19.6k|    if(!check_row_stage_2)
  ------------------
  |  Branch (1052:8): [True: 13.2k, False: 6.45k]
  ------------------
 1053|  13.2k|    {
 1054|  13.2k|        if(!check_row_stage_1)
  ------------------
  |  Branch (1054:12): [True: 11.3k, False: 1.83k]
  ------------------
 1055|  11.3k|        {
 1056|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1057|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1058|  11.3k|            {
 1059|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 1060|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 1061|  11.3k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 1062|  11.3k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 1063|       |
 1064|  11.3k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 1065|       |
 1066|  11.3k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1067|  11.3k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1068|       |
 1069|  11.3k|            }
 1070|       |
 1071|       |
 1072|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1073|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1074|       |            /* as upper 8 bytes are zeros so m_temp_reg_15 and m_temp_reg_17 are not used*/
 1075|  11.3k|            {
 1076|       |
 1077|  11.3k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 1078|  11.3k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 1079|       |
 1080|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 1081|       |                //Interleaving 2,6 row in 4, 5 Rishab
 1082|  11.3k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1083|       |
 1084|  11.3k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 1085|  11.3k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 1086|       |
 1087|       |
 1088|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 1089|       |
 1090|  11.3k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1091|  11.3k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 1092|       |
 1093|  11.3k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1094|  11.3k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 1095|       |
 1096|       |
 1097|       |
 1098|       |                /* e */
 1099|       |
 1100|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1101|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1102|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1103|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1104|  11.3k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1105|  11.3k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1106|       |
 1107|  11.3k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1108|  11.3k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1109|       |
 1110|  11.3k|            }
 1111|       |
 1112|       |            /* o */
 1113|  11.3k|            {
 1114|       |
 1115|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1116|  11.3k|                {
 1117|       |
 1118|  11.3k|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1119|       |                    //o0:1B*89+3B*75,5B*50+7B*18
 1120|  11.3k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1121|       |
 1122|  11.3k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1123|  11.3k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1124|       |
 1125|       |
 1126|       |
 1127|       |                    /* Column 0 of destination computed here */
 1128|       |                    /* It is stored in m_temp_reg_50 */
 1129|       |                    /* Column 7 of destination computed here */
 1130|       |                    /* It is stored in m_temp_reg_57 */
 1131|       |                    /* Upper 8 bytes of both registers are zero due to zero_cols*/
 1132|       |
 1133|       |
 1134|       |
 1135|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1136|  11.3k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1137|       |
 1138|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1139|  11.3k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1140|       |
 1141|  11.3k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1142|  11.3k|                    m_temp_reg_63 = _mm_setzero_si128();
 1143|  11.3k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1144|       |
 1145|       |                    //o1:1B*75-3B*18,5B*89+7B*50
 1146|  11.3k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1147|       |
 1148|  11.3k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1149|  11.3k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1150|       |
 1151|       |                    /* Loading coeff for computing o2  in the next block */
 1152|       |
 1153|  11.3k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1154|  11.3k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 1155|       |
 1156|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 1157|       |
 1158|       |
 1159|       |
 1160|       |                    /* Column 1 of destination computed here */
 1161|       |                    /* It is stored in m_temp_reg_51 */
 1162|       |                    /* Column 6 of destination computed here */
 1163|       |                    /* It is stored in m_temp_reg_56 */
 1164|       |
 1165|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1166|  11.3k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1167|       |
 1168|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1169|  11.3k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1170|       |
 1171|  11.3k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1172|  11.3k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1173|       |
 1174|       |                    //o2:1B*50-3B*89,5B*18+7B*75
 1175|  11.3k|                    m_temp_reg_34 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1176|       |
 1177|  11.3k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1178|  11.3k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1179|       |
 1180|       |
 1181|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1182|       |
 1183|       |                    /* Loading coeff for computing o3  in the next block */
 1184|       |
 1185|  11.3k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1186|  11.3k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 1187|       |
 1188|       |
 1189|       |
 1190|       |                    /* Column 2 of destination computed here */
 1191|       |                    /* It is stored in m_temp_reg_52 */
 1192|       |                    /* Column 5 of destination computed here */
 1193|       |                    /* It is stored in m_temp_reg_55 */
 1194|       |
 1195|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1196|  11.3k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1197|       |
 1198|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1199|  11.3k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1200|       |
 1201|  11.3k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1202|  11.3k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1203|       |
 1204|       |                    //o3:1B*18-3B*50,5B*75-7B*89
 1205|  11.3k|                    m_temp_reg_36 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1206|       |
 1207|  11.3k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1208|  11.3k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1209|       |
 1210|       |
 1211|       |
 1212|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1213|       |
 1214|       |
 1215|       |
 1216|       |                    /* Column 3 of destination computed here */
 1217|       |                    /* It is stored in m_temp_reg_53 */
 1218|       |                    /* Column 4 of destination computed here */
 1219|       |                    /* It is stored in m_temp_reg_54 */
 1220|       |
 1221|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1222|  11.3k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1223|       |
 1224|  11.3k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1225|  11.3k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1226|       |
 1227|  11.3k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1228|  11.3k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1229|       |
 1230|       |
 1231|  11.3k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1232|  11.3k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1233|  11.3k|                }
 1234|  11.3k|            }
 1235|       |
 1236|       |            /* Transpose of the destination 8x8 matrix done here */
 1237|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1238|       |            /* respectively */
 1239|  11.3k|            {
 1240|  11.3k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1241|  11.3k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1242|       |                //m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 1243|       |                //m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 1244|  11.3k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1245|  11.3k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1246|       |                //m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 1247|       |                //m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 1248|       |
 1249|  11.3k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1250|  11.3k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1251|       |                //m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 1252|       |                //m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 1253|  11.3k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1254|  11.3k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1255|       |                //m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 1256|       |                //m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 1257|       |
 1258|  11.3k|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1259|  11.3k|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1260|  11.3k|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1261|  11.3k|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1262|       |
 1263|       |                /*m_temp_reg_54 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 1264|       |                m_temp_reg_55 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 1265|       |                m_temp_reg_56 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 1266|       |                m_temp_reg_57 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 1267|       |                */
 1268|  11.3k|                m_temp_reg_54 = _mm_setzero_si128();
 1269|  11.3k|                m_temp_reg_55 = _mm_setzero_si128();
 1270|  11.3k|                m_temp_reg_56 = _mm_setzero_si128();
 1271|  11.3k|                m_temp_reg_57 = _mm_setzero_si128();
 1272|  11.3k|            }
 1273|  11.3k|        }
 1274|  1.83k|        else
 1275|  1.83k|        {
 1276|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1277|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1278|  1.83k|            {
 1279|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 1280|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 1281|  1.83k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 1282|  1.83k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 1283|       |
 1284|  1.83k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 1285|       |
 1286|  1.83k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1287|  1.83k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1288|       |
 1289|  1.83k|            }
 1290|       |
 1291|       |
 1292|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1293|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1294|       |            /* as upper 8 bytes are zeros so m_temp_reg_15 and m_temp_reg_17 are not used*/
 1295|  1.83k|            {
 1296|       |
 1297|  1.83k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 1298|  1.83k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 1299|       |
 1300|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 1301|       |                //Interleaving 2,6 row in 4, 5 Rishab
 1302|  1.83k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1303|       |
 1304|  1.83k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 1305|  1.83k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 1306|       |
 1307|       |
 1308|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 1309|       |
 1310|  1.83k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1311|  1.83k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 1312|       |
 1313|  1.83k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1314|  1.83k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 1315|       |
 1316|       |
 1317|       |
 1318|       |                /* e */
 1319|       |
 1320|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1321|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1322|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1323|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1324|  1.83k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1325|  1.83k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1326|       |
 1327|  1.83k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1328|  1.83k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1329|       |
 1330|  1.83k|            }
 1331|       |
 1332|       |            /* o */
 1333|  1.83k|            {
 1334|       |
 1335|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1336|  1.83k|                {
 1337|       |
 1338|  1.83k|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1339|  1.83k|                    m_temp_reg_64 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 1340|       |                    //o0:1B*89+3B*75,5B*50+7B*18
 1341|  1.83k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1342|  1.83k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 1343|       |
 1344|  1.83k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1345|  1.83k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1346|       |
 1347|  1.83k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1348|       |
 1349|       |
 1350|       |
 1351|       |                    /* Column 0 of destination computed here */
 1352|       |                    /* It is stored in m_temp_reg_50 */
 1353|       |                    /* Column 7 of destination computed here */
 1354|       |                    /* It is stored in m_temp_reg_57 */
 1355|       |                    /* Upper 8 bytes of both registers are zero due to zero_cols*/
 1356|       |
 1357|       |
 1358|       |
 1359|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1360|  1.83k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1361|       |
 1362|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1363|  1.83k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1364|       |
 1365|  1.83k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1366|  1.83k|                    m_temp_reg_63 = _mm_setzero_si128();
 1367|  1.83k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1368|       |
 1369|       |                    //o1:1B*75-3B*18,5B*89+7B*50
 1370|  1.83k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1371|  1.83k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 1372|       |
 1373|  1.83k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1374|  1.83k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1375|       |
 1376|       |                    /* Loading coeff for computing o2  in the next block */
 1377|       |
 1378|  1.83k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1379|  1.83k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 1380|       |
 1381|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 1382|  1.83k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 1383|       |
 1384|       |
 1385|       |
 1386|       |                    /* Column 1 of destination computed here */
 1387|       |                    /* It is stored in m_temp_reg_51 */
 1388|       |                    /* Column 6 of destination computed here */
 1389|       |                    /* It is stored in m_temp_reg_56 */
 1390|       |
 1391|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1392|  1.83k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1393|       |
 1394|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1395|  1.83k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1396|       |
 1397|  1.83k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1398|  1.83k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1399|       |
 1400|       |                    //o2:1B*50-3B*89,5B*18+7B*75
 1401|  1.83k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1402|  1.83k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 1403|       |
 1404|  1.83k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1405|  1.83k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1406|       |
 1407|       |
 1408|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1409|       |
 1410|       |                    /* Loading coeff for computing o3  in the next block */
 1411|       |
 1412|  1.83k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1413|  1.83k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 1414|       |
 1415|  1.83k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1416|       |
 1417|       |
 1418|       |                    /* Column 2 of destination computed here */
 1419|       |                    /* It is stored in m_temp_reg_52 */
 1420|       |                    /* Column 5 of destination computed here */
 1421|       |                    /* It is stored in m_temp_reg_55 */
 1422|       |
 1423|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1424|  1.83k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1425|       |
 1426|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1427|  1.83k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1428|       |
 1429|  1.83k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1430|  1.83k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1431|       |
 1432|       |                    //o3:1B*18-3B*50,5B*75-7B*89
 1433|  1.83k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1434|  1.83k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 1435|       |
 1436|  1.83k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1437|  1.83k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1438|       |
 1439|       |
 1440|       |
 1441|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1442|       |
 1443|  1.83k|                    m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_26);
 1444|       |
 1445|       |
 1446|       |                    /* Column 3 of destination computed here */
 1447|       |                    /* It is stored in m_temp_reg_53 */
 1448|       |                    /* Column 4 of destination computed here */
 1449|       |                    /* It is stored in m_temp_reg_54 */
 1450|       |
 1451|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1452|  1.83k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1453|       |
 1454|  1.83k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1455|  1.83k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1456|       |
 1457|  1.83k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1458|  1.83k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1459|       |
 1460|       |
 1461|  1.83k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1462|  1.83k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_63);
 1463|  1.83k|                }
 1464|  1.83k|            }
 1465|       |
 1466|       |            /* Transpose of the destination 8x8 matrix done here */
 1467|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1468|       |            /* respectively */
 1469|  1.83k|            {
 1470|  1.83k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1471|  1.83k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1472|       |                //m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 1473|       |                //m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 1474|  1.83k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1475|  1.83k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1476|       |                //m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 1477|       |                //m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 1478|       |
 1479|  1.83k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1480|  1.83k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1481|       |                //m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 1482|       |                //m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 1483|  1.83k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1484|  1.83k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1485|       |                //m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 1486|       |                //m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 1487|       |
 1488|  1.83k|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1489|  1.83k|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1490|  1.83k|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1491|  1.83k|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1492|       |
 1493|       |                /*m_temp_reg_54 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 1494|       |                m_temp_reg_55 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 1495|       |                m_temp_reg_56 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 1496|       |                m_temp_reg_57 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 1497|       |                */
 1498|  1.83k|                m_temp_reg_54 = _mm_setzero_si128();
 1499|  1.83k|                m_temp_reg_55 = _mm_setzero_si128();
 1500|  1.83k|                m_temp_reg_56 = _mm_setzero_si128();
 1501|  1.83k|                m_temp_reg_57 = _mm_setzero_si128();
 1502|  1.83k|            }
 1503|  1.83k|        }
 1504|       |
 1505|       |        /* Stage 2 */
 1506|  13.2k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  13.2k|#define IT_SHIFT_STAGE_2 12
  ------------------
 1507|  13.2k|        {
 1508|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1509|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1510|  13.2k|            {
 1511|  13.2k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]); //add
 1512|  13.2k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]); //sub
 1513|       |
 1514|  13.2k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_54);
 1515|  13.2k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_54);
 1516|       |
 1517|  13.2k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1518|  13.2k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1519|  13.2k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1520|  13.2k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1521|       |
 1522|       |
 1523|  13.2k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]);
 1524|  13.2k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]);
 1525|  13.2k|            }
 1526|       |
 1527|       |
 1528|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1529|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1530|  13.2k|            {
 1531|       |
 1532|  13.2k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_56);
 1533|  13.2k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_56);
 1534|       |
 1535|       |
 1536|  13.2k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1537|  13.2k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1538|  13.2k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1539|  13.2k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1540|       |
 1541|       |                /* Loading coeff for computing o0 in the next block */
 1542|  13.2k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1543|       |
 1544|       |
 1545|  13.2k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_51, m_temp_reg_53);
 1546|  13.2k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_51, m_temp_reg_53);
 1547|       |
 1548|       |
 1549|       |
 1550|       |                /* e */
 1551|       |
 1552|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1553|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1554|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1555|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1556|  13.2k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1557|  13.2k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1558|       |
 1559|  13.2k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1560|  13.2k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1561|       |
 1562|  13.2k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 1563|  13.2k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 1564|       |
 1565|  13.2k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 1566|  13.2k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 1567|       |
 1568|  13.2k|            }
 1569|       |
 1570|       |            /* o */
 1571|  13.2k|            {
 1572|       |
 1573|       |                //m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_55,m_temp_reg_57);
 1574|       |                //m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_55,m_temp_reg_57);
 1575|       |
 1576|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1577|  13.2k|                {
 1578|       |                    //o0:1B*89+3B*75,1T*89+3T*75
 1579|  13.2k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1580|  13.2k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1581|       |
 1582|  13.2k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1583|  13.2k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1584|       |                    /* Loading coeff for computing o1 in the next block */
 1585|  13.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1586|       |
 1587|       |
 1588|       |
 1589|       |                    /* Column 0 of destination computed here */
 1590|       |                    /* It is stored in m_temp_reg_50 */
 1591|       |                    /* Column 7 of destination computed here */
 1592|       |                    /* It is stored in m_temp_reg_57 */
 1593|       |
 1594|  13.2k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1595|  13.2k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1596|       |
 1597|  13.2k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 1598|  13.2k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 1599|       |
 1600|  13.2k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 1601|  13.2k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 1602|  13.2k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 1603|  13.2k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 1604|       |
 1605|       |                    //o1:1B*75-3B*18,1T*75-3T*18
 1606|  13.2k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 1607|  13.2k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 1608|       |
 1609|  13.2k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 1610|  13.2k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 1611|  13.2k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 1612|  13.2k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 1613|       |
 1614|  13.2k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 1615|  13.2k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 1616|       |
 1617|       |
 1618|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 1619|       |
 1620|       |
 1621|       |                    /* Loading coeff for computing o2  in the next block */
 1622|  13.2k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1623|       |
 1624|       |
 1625|       |
 1626|       |                    /* Column 1 of destination computed here */
 1627|       |                    /* It is stored in m_temp_reg_51 */
 1628|       |                    /* Column 6 of destination computed here */
 1629|       |                    /* It is stored in m_temp_reg_56 */
 1630|       |
 1631|  13.2k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1632|  13.2k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1633|       |
 1634|  13.2k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 1635|  13.2k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 1636|       |
 1637|  13.2k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 1638|  13.2k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 1639|  13.2k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 1640|  13.2k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 1641|       |
 1642|       |                    //o2:1B*50-3B*89,5T*18+7T*75.
 1643|  13.2k|                    m_temp_reg_34 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1644|  13.2k|                    m_temp_reg_35 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1645|       |
 1646|  13.2k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 1647|  13.2k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 1648|  13.2k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 1649|  13.2k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 1650|       |
 1651|  13.2k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 1652|  13.2k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 1653|       |
 1654|       |
 1655|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1656|       |
 1657|       |                    /* Loading coeff for computing o3  in the next block */
 1658|       |
 1659|  13.2k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1660|       |
 1661|       |
 1662|       |                    /* Column 2 of destination computed here */
 1663|       |                    /* It is stored in m_temp_reg_52 */
 1664|       |                    /* Column 5 of destination computed here */
 1665|       |                    /* It is stored in m_temp_reg_55 */
 1666|       |
 1667|  13.2k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 1668|  13.2k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 1669|       |
 1670|  13.2k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 1671|  13.2k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 1672|       |
 1673|  13.2k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 1674|  13.2k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 1675|  13.2k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 1676|  13.2k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 1677|       |
 1678|       |                    //o3:1B*18-3B*50,1T*18-3T*50
 1679|  13.2k|                    m_temp_reg_36 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 1680|  13.2k|                    m_temp_reg_37 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 1681|       |
 1682|  13.2k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 1683|  13.2k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 1684|  13.2k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 1685|  13.2k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 1686|       |
 1687|       |
 1688|  13.2k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 1689|  13.2k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 1690|       |
 1691|       |
 1692|       |
 1693|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 1694|       |
 1695|       |
 1696|       |                    /* Column 3 of destination computed here */
 1697|       |                    /* It is stored in m_temp_reg_53 */
 1698|       |                    /* Column 4 of destination computed here */
 1699|       |                    /* It is stored in m_temp_reg_54 */
 1700|       |
 1701|  13.2k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 1702|  13.2k|                    m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 1703|       |
 1704|  13.2k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 1705|  13.2k|                    m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 1706|       |
 1707|  13.2k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_rdng_factor);
 1708|  13.2k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_rdng_factor);
 1709|  13.2k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_rdng_factor);
 1710|  13.2k|                    m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_rdng_factor);
 1711|       |
 1712|  13.2k|                    m_temp_reg_20 = _mm_srai_epi32(m_temp_reg_20, i4_shift);
 1713|  13.2k|                    m_temp_reg_21 = _mm_srai_epi32(m_temp_reg_21, i4_shift);
 1714|  13.2k|                    m_temp_reg_22 = _mm_srai_epi32(m_temp_reg_22, i4_shift);
 1715|  13.2k|                    m_temp_reg_23 = _mm_srai_epi32(m_temp_reg_23, i4_shift);
 1716|       |
 1717|  13.2k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
 1718|  13.2k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
 1719|  13.2k|                }
 1720|  13.2k|            }
 1721|       |
 1722|       |            /* Transpose of the destination 8x8 matrix done here */
 1723|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 1724|       |            /* respectively */
 1725|  13.2k|            {
 1726|  13.2k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 1727|  13.2k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 1728|  13.2k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 1729|  13.2k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 1730|  13.2k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 1731|  13.2k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 1732|  13.2k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 1733|  13.2k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 1734|       |
 1735|  13.2k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 1736|  13.2k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 1737|  13.2k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 1738|  13.2k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 1739|  13.2k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 1740|  13.2k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 1741|  13.2k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 1742|  13.2k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 1743|  13.2k|                m_temp_reg_10 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 1744|  13.2k|                m_temp_reg_11 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 1745|  13.2k|                m_temp_reg_12 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 1746|  13.2k|                m_temp_reg_13 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 1747|       |
 1748|  13.2k|                m_temp_reg_14 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 1749|  13.2k|                m_temp_reg_15 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 1750|  13.2k|                m_temp_reg_16 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 1751|  13.2k|                m_temp_reg_17 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 1752|  13.2k|            }
 1753|       |
 1754|       |            /* Recon and store */
 1755|  13.2k|            {
 1756|  13.2k|                m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1757|  13.2k|                pu1_pred += pred_strd;
 1758|  13.2k|                m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1759|  13.2k|                pu1_pred += pred_strd;
 1760|  13.2k|                m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1761|  13.2k|                pu1_pred += pred_strd;
 1762|  13.2k|                m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1763|  13.2k|                pu1_pred += pred_strd;
 1764|  13.2k|                m_temp_reg_4 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1765|  13.2k|                pu1_pred += pred_strd;
 1766|  13.2k|                m_temp_reg_5 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1767|  13.2k|                pu1_pred += pred_strd;
 1768|  13.2k|                m_temp_reg_6 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1769|  13.2k|                pu1_pred += pred_strd;
 1770|  13.2k|                m_temp_reg_7 = _mm_loadl_epi64((__m128i *)pu1_pred);
 1771|       |
 1772|  13.2k|                m_temp_reg_50 = _mm_setzero_si128();
 1773|  13.2k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, m_temp_reg_50);
 1774|  13.2k|                m_temp_reg_1 = _mm_unpacklo_epi8(m_temp_reg_1, m_temp_reg_50);
 1775|  13.2k|                m_temp_reg_2 = _mm_unpacklo_epi8(m_temp_reg_2, m_temp_reg_50);
 1776|  13.2k|                m_temp_reg_3 = _mm_unpacklo_epi8(m_temp_reg_3, m_temp_reg_50);
 1777|  13.2k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_50);
 1778|  13.2k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_50);
 1779|  13.2k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_6, m_temp_reg_50);
 1780|  13.2k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_7, m_temp_reg_50);
 1781|       |
 1782|  13.2k|                m_temp_reg_50 = _mm_add_epi16(m_temp_reg_10, m_temp_reg_0);
 1783|  13.2k|                m_temp_reg_51 = _mm_add_epi16(m_temp_reg_11, m_temp_reg_1);
 1784|  13.2k|                m_temp_reg_52 = _mm_add_epi16(m_temp_reg_12, m_temp_reg_2);
 1785|  13.2k|                m_temp_reg_53 = _mm_add_epi16(m_temp_reg_13, m_temp_reg_3);
 1786|  13.2k|                m_temp_reg_54 = _mm_add_epi16(m_temp_reg_14, m_temp_reg_4);
 1787|  13.2k|                m_temp_reg_55 = _mm_add_epi16(m_temp_reg_15, m_temp_reg_5);
 1788|  13.2k|                m_temp_reg_56 = _mm_add_epi16(m_temp_reg_16, m_temp_reg_6);
 1789|  13.2k|                m_temp_reg_57 = _mm_add_epi16(m_temp_reg_17, m_temp_reg_7);
 1790|       |
 1791|  13.2k|                m_temp_reg_50 = _mm_packus_epi16(m_temp_reg_50, m_temp_reg_50);
 1792|  13.2k|                m_temp_reg_51 = _mm_packus_epi16(m_temp_reg_51, m_temp_reg_51);
 1793|  13.2k|                m_temp_reg_52 = _mm_packus_epi16(m_temp_reg_52, m_temp_reg_52);
 1794|  13.2k|                m_temp_reg_53 = _mm_packus_epi16(m_temp_reg_53, m_temp_reg_53);
 1795|  13.2k|                m_temp_reg_54 = _mm_packus_epi16(m_temp_reg_54, m_temp_reg_54);
 1796|  13.2k|                m_temp_reg_55 = _mm_packus_epi16(m_temp_reg_55, m_temp_reg_55);
 1797|  13.2k|                m_temp_reg_56 = _mm_packus_epi16(m_temp_reg_56, m_temp_reg_56);
 1798|  13.2k|                m_temp_reg_57 = _mm_packus_epi16(m_temp_reg_57, m_temp_reg_57);
 1799|       |
 1800|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_50);
 1801|  13.2k|                pu1_dst += dst_strd;
 1802|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_51);
 1803|  13.2k|                pu1_dst += dst_strd;
 1804|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_52);
 1805|  13.2k|                pu1_dst += dst_strd;
 1806|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_53);
 1807|  13.2k|                pu1_dst += dst_strd;
 1808|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_54);
 1809|  13.2k|                pu1_dst += dst_strd;
 1810|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_55);
 1811|  13.2k|                pu1_dst += dst_strd;
 1812|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_56);
 1813|  13.2k|                pu1_dst += dst_strd;
 1814|  13.2k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_57);
 1815|  13.2k|                pu1_dst += dst_strd;
 1816|  13.2k|            }
 1817|  13.2k|        }
 1818|  13.2k|    }
 1819|  6.45k|    else
 1820|       |
 1821|  6.45k|    {
 1822|       |
 1823|       |        /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1824|       |        /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1825|  6.45k|        if(!check_row_stage_1)
  ------------------
  |  Branch (1825:12): [True: 2.23k, False: 4.21k]
  ------------------
 1826|  2.23k|        {
 1827|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 1828|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 1829|  2.23k|            {
 1830|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 1831|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 1832|  2.23k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 1833|  2.23k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 1834|       |
 1835|  2.23k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 1836|  2.23k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_74);
 1837|       |
 1838|  2.23k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 1839|  2.23k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 1840|       |
 1841|       |
 1842|  2.23k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 1843|  2.23k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 1844|  2.23k|            }
 1845|       |
 1846|       |
 1847|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 1848|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 1849|  2.23k|            {
 1850|       |
 1851|  2.23k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 1852|  2.23k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 1853|       |
 1854|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 1855|       |                //Interleaving 2,6 row in 4, 5 Rishab
 1856|  2.23k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 1857|  2.23k|                m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76);
 1858|       |
 1859|  2.23k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 1860|  2.23k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 1861|       |
 1862|  2.23k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_5, m_coeff1);
 1863|  2.23k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 1864|       |
 1865|       |
 1866|       |
 1867|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 1868|       |
 1869|  2.23k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 1870|       |                //m_coeff4 = _mm_loadu_si128((__m128i *) &g_ai2_ihevc_trans_intr_odd_8[3][0]);
 1871|       |
 1872|  2.23k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 1873|       |                //m_coeff2 = _mm_loadu_si128((__m128i *) &g_ai2_ihevc_trans_intr_odd_8[1][0]);
 1874|       |
 1875|  2.23k|            }
 1876|       |
 1877|       |            /* e */
 1878|  2.23k|            {
 1879|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 1880|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 1881|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 1882|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 1883|  2.23k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 1884|  2.23k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 1885|       |
 1886|  2.23k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 1887|  2.23k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 1888|       |
 1889|  2.23k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 1890|  2.23k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 1891|       |
 1892|  2.23k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 1893|  2.23k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 1894|       |
 1895|  2.23k|            }
 1896|       |
 1897|       |            /* o */
 1898|  2.23k|            {
 1899|       |
 1900|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 1901|  2.23k|                {
 1902|       |
 1903|  2.23k|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 1904|  2.23k|                    m_temp_reg_61 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
 1905|       |                    //  m_temp_reg_64 = _mm_unpacklo_epi16(m_temp_reg_75,m_temp_reg_77);
 1906|       |                    //   m_temp_reg_65 = _mm_unpackhi_epi16(m_temp_reg_75,m_temp_reg_77);
 1907|       |                    //o0:1B*89+3B*75,1T*89+3T*75
 1908|  2.23k|                    m_temp_reg_30 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1909|  2.23k|                    m_temp_reg_31 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 1910|       |                    //m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 1911|       |                    //m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_65, m_coeff2);
 1912|       |
 1913|       |
 1914|  2.23k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 1915|  2.23k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 1916|       |
 1917|       |                    //m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1918|       |                    //m_temp_reg_31 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 1919|  2.23k|                }
 1920|       |
 1921|       |                /* Column 0 of destination computed here */
 1922|       |                /* It is stored in m_temp_reg_50 */
 1923|       |                /* Column 7 of destination computed here */
 1924|       |                /* It is stored in m_temp_reg_57 */
 1925|  2.23k|                {
 1926|       |
 1927|       |
 1928|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 1929|  2.23k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 1930|       |
 1931|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 1932|  2.23k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 1933|       |
 1934|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1935|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1936|  2.23k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1937|  2.23k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1938|       |
 1939|  2.23k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1940|  2.23k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1941|  2.23k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1942|  2.23k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1943|       |
 1944|       |                    //o1:1B*75-3B*18,1T*75-3T*18,5B*89+7B*50,5T*89+7T*50
 1945|  2.23k|                    m_temp_reg_32 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 1946|       |                    //m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 1947|  2.23k|                    m_temp_reg_33 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 1948|       |                    //m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_65, m_coeff4);
 1949|       |
 1950|  2.23k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1951|  2.23k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 1952|       |
 1953|       |                    /* Loading coeff for computing o2  in the next block */
 1954|       |
 1955|  2.23k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 1956|       |
 1957|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 1958|       |                    //m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 1959|       |                    //m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_27);
 1960|  2.23k|                }
 1961|       |
 1962|       |                /* Column 1 of destination computed here */
 1963|       |                /* It is stored in m_temp_reg_51 */
 1964|       |                /* Column 6 of destination computed here */
 1965|       |                /* It is stored in m_temp_reg_56 */
 1966|  2.23k|                {
 1967|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 1968|  2.23k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 1969|       |
 1970|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 1971|  2.23k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 1972|       |
 1973|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 1974|  2.23k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 1975|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 1976|  2.23k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 1977|       |
 1978|  2.23k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 1979|  2.23k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 1980|  2.23k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 1981|  2.23k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 1982|       |
 1983|       |                    //o2:1B*50-3B*89,1T*50-3T*89
 1984|  2.23k|                    m_temp_reg_34 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 1985|  2.23k|                    m_temp_reg_35 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 1986|       |
 1987|  2.23k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 1988|  2.23k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 1989|       |
 1990|       |
 1991|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 1992|       |
 1993|       |
 1994|       |                    /* Loading coeff for computing o3  in the next block */
 1995|       |
 1996|  2.23k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 1997|       |
 1998|       |                    //m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 1999|       |                    //m_temp_reg_35 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2000|  2.23k|                }
 2001|       |
 2002|       |                /* Column 2 of destination computed here */
 2003|       |                /* It is stored in m_temp_reg_52 */
 2004|       |                /* Column 5 of destination computed here */
 2005|       |                /* It is stored in m_temp_reg_55 */
 2006|  2.23k|                {
 2007|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 2008|  2.23k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 2009|       |
 2010|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 2011|  2.23k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 2012|       |
 2013|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2014|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2015|  2.23k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2016|  2.23k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2017|       |
 2018|  2.23k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2019|  2.23k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2020|  2.23k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2021|  2.23k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2022|       |
 2023|       |                    //o3:1B*18-3B*50,1T*18-3T*50
 2024|  2.23k|                    m_temp_reg_36 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 2025|  2.23k|                    m_temp_reg_37 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 2026|       |
 2027|  2.23k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2028|  2.23k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2029|       |
 2030|       |
 2031|       |
 2032|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 2033|       |
 2034|       |
 2035|  2.23k|                }
 2036|       |
 2037|       |                /* Column 3 of destination computed here */
 2038|       |                /* It is stored in m_temp_reg_53 */
 2039|       |                /* Column 4 of destination computed here */
 2040|       |                /* It is stored in m_temp_reg_54 */
 2041|  2.23k|                {
 2042|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 2043|  2.23k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 2044|       |
 2045|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 2046|  2.23k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 2047|       |
 2048|  2.23k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2049|  2.23k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2050|  2.23k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2051|  2.23k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2052|       |
 2053|  2.23k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2054|  2.23k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2055|  2.23k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2056|  2.23k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2057|       |
 2058|  2.23k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2059|  2.23k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2060|  2.23k|                }
 2061|  2.23k|            }
 2062|       |
 2063|       |            /* Transpose of the destination 8x8 matrix done here */
 2064|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 2065|       |            /* respectively */
 2066|  2.23k|            {
 2067|       |
 2068|       |
 2069|  2.23k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 2070|  2.23k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 2071|  2.23k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 2072|  2.23k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 2073|  2.23k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 2074|  2.23k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 2075|  2.23k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 2076|  2.23k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 2077|       |
 2078|  2.23k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 2079|  2.23k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 2080|  2.23k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 2081|  2.23k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 2082|  2.23k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 2083|  2.23k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 2084|  2.23k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 2085|  2.23k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 2086|       |
 2087|  2.23k|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 2088|  2.23k|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 2089|  2.23k|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 2090|  2.23k|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 2091|       |
 2092|  2.23k|                m_temp_reg_54 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 2093|  2.23k|                m_temp_reg_55 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 2094|  2.23k|                m_temp_reg_56 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 2095|  2.23k|                m_temp_reg_57 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 2096|  2.23k|            }
 2097|  2.23k|        }
 2098|  4.21k|        else
 2099|  4.21k|        {
 2100|       |
 2101|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 2102|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 2103|  4.21k|            {
 2104|       |                //Interleaving 0,4 row in 0 , 1 Rishab
 2105|       |                /*coef2 for m_temp_reg_12 and m_temp_reg_13 , coef1 for m_temp_reg_10 and m_temp_reg_11*/
 2106|  4.21k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]);
 2107|  4.21k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]);
 2108|       |
 2109|  4.21k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_70, m_temp_reg_74);
 2110|  4.21k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_70, m_temp_reg_74);
 2111|       |
 2112|  4.21k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2113|  4.21k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 2114|       |
 2115|       |
 2116|  4.21k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2117|  4.21k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 2118|  4.21k|            }
 2119|       |
 2120|       |
 2121|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 2122|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 2123|  4.21k|            {
 2124|       |
 2125|  4.21k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]); //sub 2B*36-6B*83 ,2T*36-6T*83
 2126|  4.21k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]); //add 2B*83+6B*36 ,2T*83+6T*36
 2127|       |
 2128|       |                /* Combining instructions to eliminate them based on zero_rows : Lokesh */
 2129|       |                //Interleaving 2,6 row in 4, 5 Rishab
 2130|  4.21k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_72, m_temp_reg_76);
 2131|  4.21k|                m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_72, m_temp_reg_76);
 2132|       |
 2133|  4.21k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_4, m_coeff1);
 2134|  4.21k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 2135|       |
 2136|  4.21k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_5, m_coeff1);
 2137|  4.21k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 2138|       |
 2139|       |
 2140|       |
 2141|       |                /* Loading coeff for computing o0, o1, o2 and o3 in the next block */
 2142|       |
 2143|  4.21k|                m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 2144|  4.21k|                m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 2145|       |
 2146|  4.21k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 2147|  4.21k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 2148|       |
 2149|  4.21k|            }
 2150|       |
 2151|       |            /* e */
 2152|  4.21k|            {
 2153|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 2154|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 2155|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 2156|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 2157|  4.21k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 2158|  4.21k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 2159|       |
 2160|  4.21k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 2161|  4.21k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 2162|       |
 2163|  4.21k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 2164|  4.21k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 2165|       |
 2166|  4.21k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 2167|  4.21k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 2168|       |
 2169|  4.21k|            }
 2170|       |
 2171|       |            /* o */
 2172|  4.21k|            {
 2173|       |
 2174|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 2175|  4.21k|                {
 2176|       |
 2177|  4.21k|                    m_temp_reg_60 = _mm_unpacklo_epi16(m_temp_reg_71, m_temp_reg_73);
 2178|  4.21k|                    m_temp_reg_61 = _mm_unpackhi_epi16(m_temp_reg_71, m_temp_reg_73);
 2179|  4.21k|                    m_temp_reg_64 = _mm_unpacklo_epi16(m_temp_reg_75, m_temp_reg_77);
 2180|  4.21k|                    m_temp_reg_65 = _mm_unpackhi_epi16(m_temp_reg_75, m_temp_reg_77);
 2181|       |                    //o0:1B*89+3B*75,1T*89+3T*75,5B*50+7B*18,5T*50+7T*18
 2182|  4.21k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 2183|  4.21k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 2184|  4.21k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 2185|  4.21k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_65, m_coeff2);
 2186|       |
 2187|       |
 2188|  4.21k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2189|  4.21k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 2190|       |
 2191|  4.21k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2192|  4.21k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2193|  4.21k|                }
 2194|       |
 2195|       |                /* Column 0 of destination computed here */
 2196|       |                /* It is stored in m_temp_reg_50 */
 2197|       |                /* Column 7 of destination computed here */
 2198|       |                /* It is stored in m_temp_reg_57 */
 2199|  4.21k|                {
 2200|       |
 2201|       |
 2202|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 2203|  4.21k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 2204|       |
 2205|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 2206|  4.21k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 2207|       |
 2208|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2209|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2210|  4.21k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2211|  4.21k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2212|       |
 2213|  4.21k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2214|  4.21k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2215|  4.21k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2216|  4.21k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2217|       |
 2218|       |                    //o1:1B*75-3B*18,1T*75-3T*18,5B*89+7B*50,5T*89+7T*50
 2219|  4.21k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 2220|  4.21k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 2221|  4.21k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 2222|  4.21k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_65, m_coeff4);
 2223|       |
 2224|  4.21k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2225|  4.21k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2226|       |
 2227|       |                    /* Loading coeff for computing o2  in the next block */
 2228|       |
 2229|  4.21k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 2230|  4.21k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 2231|       |
 2232|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 2233|  4.21k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 2234|  4.21k|                    m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_27);
 2235|  4.21k|                }
 2236|       |
 2237|       |                /* Column 1 of destination computed here */
 2238|       |                /* It is stored in m_temp_reg_51 */
 2239|       |                /* Column 6 of destination computed here */
 2240|       |                /* It is stored in m_temp_reg_56 */
 2241|  4.21k|                {
 2242|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 2243|  4.21k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 2244|       |
 2245|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 2246|  4.21k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 2247|       |
 2248|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2249|  4.21k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2250|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2251|  4.21k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2252|       |
 2253|  4.21k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2254|  4.21k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2255|  4.21k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2256|  4.21k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2257|       |
 2258|       |                    //o2:1B*50-3B*89,1T*50-3T*89,5B*18+7B*75,5T*18+7T*75
 2259|  4.21k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_60, m_coeff1);
 2260|  4.21k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_64, m_coeff2);
 2261|  4.21k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_61, m_coeff1);
 2262|  4.21k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_65, m_coeff2);
 2263|       |
 2264|  4.21k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2265|  4.21k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2266|       |
 2267|       |
 2268|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 2269|       |
 2270|       |
 2271|       |                    /* Loading coeff for computing o3  in the next block */
 2272|       |
 2273|  4.21k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 2274|  4.21k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 2275|       |
 2276|  4.21k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2277|  4.21k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2278|  4.21k|                }
 2279|       |
 2280|       |                /* Column 2 of destination computed here */
 2281|       |                /* It is stored in m_temp_reg_52 */
 2282|       |                /* Column 5 of destination computed here */
 2283|       |                /* It is stored in m_temp_reg_55 */
 2284|  4.21k|                {
 2285|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 2286|  4.21k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 2287|       |
 2288|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 2289|  4.21k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 2290|       |
 2291|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2292|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2293|  4.21k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2294|  4.21k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2295|       |
 2296|  4.21k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2297|  4.21k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2298|  4.21k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2299|  4.21k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2300|       |
 2301|       |                    //o3:1B*18-3B*50,1T*18-3T*50,5B*75-7B*89,5T*75-7T*89
 2302|  4.21k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_60, m_coeff3);
 2303|  4.21k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_64, m_coeff4);
 2304|  4.21k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_61, m_coeff3);
 2305|  4.21k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_65, m_coeff4);
 2306|       |
 2307|  4.21k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2308|  4.21k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2309|       |
 2310|       |
 2311|       |
 2312|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 2313|       |
 2314|       |
 2315|  4.21k|                    m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_26);
 2316|  4.21k|                    m_temp_reg_37 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_27);
 2317|  4.21k|                }
 2318|       |
 2319|       |                /* Column 3 of destination computed here */
 2320|       |                /* It is stored in m_temp_reg_53 */
 2321|       |                /* Column 4 of destination computed here */
 2322|       |                /* It is stored in m_temp_reg_54 */
 2323|  4.21k|                {
 2324|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 2325|  4.21k|                    m_temp_reg_66 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 2326|       |
 2327|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 2328|  4.21k|                    m_temp_reg_67 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 2329|       |
 2330|  4.21k|                    m_temp_reg_62 = _mm_add_epi32(m_temp_reg_62, m_rdng_factor);
 2331|  4.21k|                    m_temp_reg_63 = _mm_add_epi32(m_temp_reg_63, m_rdng_factor);
 2332|  4.21k|                    m_temp_reg_66 = _mm_add_epi32(m_temp_reg_66, m_rdng_factor);
 2333|  4.21k|                    m_temp_reg_67 = _mm_add_epi32(m_temp_reg_67, m_rdng_factor);
 2334|       |
 2335|  4.21k|                    m_temp_reg_62 = _mm_srai_epi32(m_temp_reg_62, i4_shift);
 2336|  4.21k|                    m_temp_reg_63 = _mm_srai_epi32(m_temp_reg_63, i4_shift);
 2337|  4.21k|                    m_temp_reg_66 = _mm_srai_epi32(m_temp_reg_66, i4_shift);
 2338|  4.21k|                    m_temp_reg_67 = _mm_srai_epi32(m_temp_reg_67, i4_shift);
 2339|       |
 2340|  4.21k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_62, m_temp_reg_63);
 2341|  4.21k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_66, m_temp_reg_67);
 2342|  4.21k|                }
 2343|  4.21k|            }
 2344|       |
 2345|       |            /* Transpose of the destination 8x8 matrix done here */
 2346|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 2347|       |            /* respectively */
 2348|  4.21k|            {
 2349|       |
 2350|       |
 2351|  4.21k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 2352|  4.21k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 2353|  4.21k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 2354|  4.21k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 2355|  4.21k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 2356|  4.21k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 2357|  4.21k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 2358|  4.21k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 2359|       |
 2360|  4.21k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 2361|  4.21k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 2362|  4.21k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 2363|  4.21k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 2364|  4.21k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 2365|  4.21k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 2366|  4.21k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 2367|  4.21k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 2368|       |
 2369|  4.21k|                m_temp_reg_50 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 2370|  4.21k|                m_temp_reg_51 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 2371|  4.21k|                m_temp_reg_52 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 2372|  4.21k|                m_temp_reg_53 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 2373|       |
 2374|  4.21k|                m_temp_reg_54 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 2375|  4.21k|                m_temp_reg_55 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 2376|  4.21k|                m_temp_reg_56 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 2377|  4.21k|                m_temp_reg_57 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 2378|  4.21k|            }
 2379|  4.21k|        }
 2380|       |        /* Stage 2 */
 2381|       |
 2382|  6.45k|        i4_shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  6.45k|#define IT_SHIFT_STAGE_2 12
  ------------------
 2383|       |
 2384|  6.45k|        {
 2385|       |
 2386|       |            /* ee0 is present in the registers m_temp_reg_10 and m_temp_reg_11 */
 2387|       |            /* ee1 is present in the registers m_temp_reg_12 and m_temp_reg_13 */
 2388|  6.45k|            {
 2389|  6.45k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[0][0]); //add
 2390|  6.45k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[3][0]); //sub
 2391|       |
 2392|  6.45k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_54);
 2393|  6.45k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_54);
 2394|       |
 2395|  6.45k|                m_temp_reg_10 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2396|  6.45k|                m_temp_reg_12 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 2397|  6.45k|                m_temp_reg_11 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2398|  6.45k|                m_temp_reg_13 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 2399|       |
 2400|       |
 2401|  6.45k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[1][0]);
 2402|  6.45k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_even_8[2][0]);
 2403|  6.45k|            }
 2404|       |
 2405|       |
 2406|       |            /* eo0 is present in the registers m_temp_reg_14 and m_temp_reg_15 */
 2407|       |            /* eo1 is present in the registers m_temp_reg_16 and m_temp_reg_17 */
 2408|  6.45k|            {
 2409|       |                //m_temp_reg_66 = _mm_mullo_epi32(m_temp_reg_2, m_coeff1);
 2410|       |                //m_temp_reg_64 = _mm_mullo_epi32(m_temp_reg_0, m_coeff2);
 2411|       |                //m_temp_reg_62 = _mm_mullo_epi32(m_temp_reg_2, m_coeff2);
 2412|       |                //m_temp_reg_60 = _mm_mullo_epi32(m_temp_reg_0, m_coeff1);
 2413|  6.45k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_56);
 2414|  6.45k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_56);
 2415|       |
 2416|       |
 2417|  6.45k|                m_temp_reg_16 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2418|  6.45k|                m_temp_reg_14 = _mm_madd_epi16(m_temp_reg_0, m_coeff2);
 2419|  6.45k|                m_temp_reg_17 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2420|  6.45k|                m_temp_reg_15 = _mm_madd_epi16(m_temp_reg_1, m_coeff2);
 2421|       |
 2422|       |                //m_temp_reg_16 = _mm_sub_epi32(m_temp_reg_64, m_temp_reg_66);
 2423|       |                //m_temp_reg_14 = _mm_add_epi32(m_temp_reg_60, m_temp_reg_62);
 2424|       |
 2425|       |                /* Loading coeff for computing o0 in the next block */
 2426|  6.45k|                m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[0][0]);
 2427|  6.45k|                m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[1][0]);
 2428|       |
 2429|       |
 2430|  6.45k|                m_temp_reg_0 = _mm_unpacklo_epi16(m_temp_reg_51, m_temp_reg_53);
 2431|  6.45k|                m_temp_reg_1 = _mm_unpackhi_epi16(m_temp_reg_51, m_temp_reg_53);
 2432|       |                /*m_temp_reg_3 = _mm_srli_si128(m_temp_reg_53, 8);
 2433|       |                m_temp_reg_1 = _mm_cvtepi16_epi32(m_temp_reg_1);
 2434|       |                m_temp_reg_3 = _mm_cvtepi16_epi32(m_temp_reg_3);
 2435|       |                */
 2436|       |
 2437|  6.45k|            }
 2438|       |
 2439|       |            /* e */
 2440|  6.45k|            {
 2441|       |                /* e0 stored in m_temp_reg_40 and m_temp_reg_41 */
 2442|       |                /* e1 stored in m_temp_reg_42 and m_temp_reg_43 */
 2443|       |                /* e3 stored in m_temp_reg_46 and m_temp_reg_47 */
 2444|       |                /* e2 stored in m_temp_reg_44 and m_temp_reg_45 */
 2445|  6.45k|                m_temp_reg_42 = _mm_add_epi32(m_temp_reg_12, m_temp_reg_16);
 2446|  6.45k|                m_temp_reg_44 = _mm_sub_epi32(m_temp_reg_12, m_temp_reg_16);
 2447|       |
 2448|  6.45k|                m_temp_reg_40 = _mm_add_epi32(m_temp_reg_10, m_temp_reg_14);
 2449|  6.45k|                m_temp_reg_46 = _mm_sub_epi32(m_temp_reg_10, m_temp_reg_14);
 2450|       |
 2451|  6.45k|                m_temp_reg_43 = _mm_add_epi32(m_temp_reg_13, m_temp_reg_17);
 2452|  6.45k|                m_temp_reg_45 = _mm_sub_epi32(m_temp_reg_13, m_temp_reg_17);
 2453|       |
 2454|  6.45k|                m_temp_reg_41 = _mm_add_epi32(m_temp_reg_11, m_temp_reg_15);
 2455|  6.45k|                m_temp_reg_47 = _mm_sub_epi32(m_temp_reg_11, m_temp_reg_15);
 2456|       |
 2457|  6.45k|            }
 2458|       |
 2459|       |            /* o */
 2460|  6.45k|            {
 2461|       |                /*  m_temp_reg_4 = _mm_cvtepi16_epi32(m_temp_reg_55);
 2462|       |                    m_temp_reg_5 = _mm_srli_si128(m_temp_reg_55, 8);
 2463|       |                    m_temp_reg_6 = _mm_cvtepi16_epi32(m_temp_reg_57);
 2464|       |                    m_temp_reg_7 = _mm_srli_si128(m_temp_reg_57, 8);
 2465|       |                    m_temp_reg_5 = _mm_cvtepi16_epi32(m_temp_reg_5);
 2466|       |                    m_temp_reg_7 = _mm_cvtepi16_epi32(m_temp_reg_7);
 2467|       |                    */
 2468|  6.45k|                m_temp_reg_4 = _mm_unpacklo_epi16(m_temp_reg_55, m_temp_reg_57);
 2469|  6.45k|                m_temp_reg_5 = _mm_unpackhi_epi16(m_temp_reg_55, m_temp_reg_57);
 2470|       |
 2471|       |                /* o0 stored in m_temp_reg_30 and m_temp_reg_31 */
 2472|  6.45k|                {
 2473|       |                    //o0:1B*89+3B*75,1T*89+3T*75,5B*50+7B*18,5T*50+7T*18
 2474|  6.45k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2475|  6.45k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2476|  6.45k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 2477|  6.45k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 2478|       |
 2479|  6.45k|                    m_rdng_factor = _mm_cvtsi32_si128((1 << (i4_shift - 1)));
 2480|  6.45k|                    m_rdng_factor = _mm_shuffle_epi32(m_rdng_factor, 0x0000);
 2481|       |                    /* Loading coeff for computing o1 in the next block */
 2482|  6.45k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[2][0]);
 2483|  6.45k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[3][0]);
 2484|       |
 2485|  6.45k|                    m_temp_reg_30 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2486|  6.45k|                    m_temp_reg_31 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2487|  6.45k|                }
 2488|       |
 2489|       |                /* Column 0 of destination computed here */
 2490|       |                /* It is stored in m_temp_reg_50 */
 2491|       |                /* Column 7 of destination computed here */
 2492|       |                /* It is stored in m_temp_reg_57 */
 2493|  6.45k|                {
 2494|  6.45k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_40, m_temp_reg_30);
 2495|  6.45k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_40, m_temp_reg_30);
 2496|       |
 2497|  6.45k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_41, m_temp_reg_31);
 2498|  6.45k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_41, m_temp_reg_31);
 2499|       |
 2500|  6.45k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 2501|  6.45k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 2502|  6.45k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 2503|  6.45k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 2504|       |
 2505|  6.45k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 2506|  6.45k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 2507|  6.45k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 2508|  6.45k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 2509|       |
 2510|       |                    //o1:1B*75-3B*18,1T*75-3T*18,5B*89+7B*50,5T*89+7T*50
 2511|  6.45k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 2512|  6.45k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_4, m_coeff4);
 2513|  6.45k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 2514|  6.45k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_5, m_coeff4);
 2515|       |
 2516|  6.45k|                    m_temp_reg_50 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 2517|  6.45k|                    m_temp_reg_57 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 2518|       |
 2519|       |
 2520|       |                    /* o1 stored in m_temp_reg_32 and m_temp_reg_33 */
 2521|       |
 2522|       |
 2523|       |                    /* Loading coeff for computing o2  in the next block */
 2524|  6.45k|                    m_coeff1 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[4][0]);
 2525|  6.45k|                    m_coeff2 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[5][0]);
 2526|       |
 2527|  6.45k|                    m_temp_reg_32 = _mm_sub_epi32(m_temp_reg_22, m_temp_reg_26);
 2528|  6.45k|                    m_temp_reg_33 = _mm_sub_epi32(m_temp_reg_23, m_temp_reg_27);
 2529|  6.45k|                }
 2530|       |
 2531|       |                /* Column 1 of destination computed here */
 2532|       |                /* It is stored in m_temp_reg_51 */
 2533|       |                /* Column 6 of destination computed here */
 2534|       |                /* It is stored in m_temp_reg_56 */
 2535|  6.45k|                {
 2536|  6.45k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_42, m_temp_reg_32);
 2537|  6.45k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_42, m_temp_reg_32);
 2538|       |
 2539|  6.45k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_43, m_temp_reg_33);
 2540|  6.45k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_43, m_temp_reg_33);
 2541|       |
 2542|  6.45k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 2543|  6.45k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 2544|  6.45k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 2545|  6.45k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 2546|       |
 2547|  6.45k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 2548|  6.45k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 2549|  6.45k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 2550|  6.45k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 2551|       |
 2552|       |                    //o2:1B*50-3B*89,1T*50-3T*89,5B*18+7B*75,5T*18+7T*75
 2553|  6.45k|                    m_temp_reg_20 = _mm_madd_epi16(m_temp_reg_0, m_coeff1);
 2554|  6.45k|                    m_temp_reg_24 = _mm_madd_epi16(m_temp_reg_4, m_coeff2);
 2555|  6.45k|                    m_temp_reg_21 = _mm_madd_epi16(m_temp_reg_1, m_coeff1);
 2556|  6.45k|                    m_temp_reg_25 = _mm_madd_epi16(m_temp_reg_5, m_coeff2);
 2557|       |
 2558|  6.45k|                    m_temp_reg_51 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 2559|  6.45k|                    m_temp_reg_56 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 2560|       |
 2561|       |
 2562|       |                    /* o2 stored in m_temp_reg_34 and m_temp_reg_35 */
 2563|       |
 2564|       |                    /* Loading coeff for computing o3  in the next block */
 2565|       |
 2566|  6.45k|                    m_coeff3 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[6][0]);
 2567|  6.45k|                    m_coeff4 = _mm_load_si128((__m128i *)&g_ai2_ihevc_trans_intr_odd_8[7][0]);
 2568|       |
 2569|  6.45k|                    m_temp_reg_34 = _mm_add_epi32(m_temp_reg_20, m_temp_reg_24);
 2570|  6.45k|                    m_temp_reg_35 = _mm_add_epi32(m_temp_reg_21, m_temp_reg_25);
 2571|  6.45k|                }
 2572|       |
 2573|       |                /* Column 2 of destination computed here */
 2574|       |                /* It is stored in m_temp_reg_52 */
 2575|       |                /* Column 5 of destination computed here */
 2576|       |                /* It is stored in m_temp_reg_55 */
 2577|  6.45k|                {
 2578|  6.45k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_44, m_temp_reg_34);
 2579|  6.45k|                    m_temp_reg_6 = _mm_sub_epi32(m_temp_reg_44, m_temp_reg_34);
 2580|       |
 2581|  6.45k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_45, m_temp_reg_35);
 2582|  6.45k|                    m_temp_reg_7 = _mm_sub_epi32(m_temp_reg_45, m_temp_reg_35);
 2583|       |
 2584|  6.45k|                    m_temp_reg_2 = _mm_add_epi32(m_temp_reg_2, m_rdng_factor);
 2585|  6.45k|                    m_temp_reg_3 = _mm_add_epi32(m_temp_reg_3, m_rdng_factor);
 2586|  6.45k|                    m_temp_reg_6 = _mm_add_epi32(m_temp_reg_6, m_rdng_factor);
 2587|  6.45k|                    m_temp_reg_7 = _mm_add_epi32(m_temp_reg_7, m_rdng_factor);
 2588|       |
 2589|  6.45k|                    m_temp_reg_2 = _mm_srai_epi32(m_temp_reg_2, i4_shift);
 2590|  6.45k|                    m_temp_reg_3 = _mm_srai_epi32(m_temp_reg_3, i4_shift);
 2591|  6.45k|                    m_temp_reg_6 = _mm_srai_epi32(m_temp_reg_6, i4_shift);
 2592|  6.45k|                    m_temp_reg_7 = _mm_srai_epi32(m_temp_reg_7, i4_shift);
 2593|       |
 2594|       |                    //o3:1B*18-3B*50,1T*18-3T*50,5B*75-7B*89,5T*75-7T*89
 2595|  6.45k|                    m_temp_reg_22 = _mm_madd_epi16(m_temp_reg_0, m_coeff3);
 2596|  6.45k|                    m_temp_reg_26 = _mm_madd_epi16(m_temp_reg_4, m_coeff4);
 2597|  6.45k|                    m_temp_reg_23 = _mm_madd_epi16(m_temp_reg_1, m_coeff3);
 2598|  6.45k|                    m_temp_reg_27 = _mm_madd_epi16(m_temp_reg_5, m_coeff4);
 2599|       |
 2600|  6.45k|                    m_temp_reg_52 = _mm_packs_epi32(m_temp_reg_2, m_temp_reg_3);
 2601|  6.45k|                    m_temp_reg_55 = _mm_packs_epi32(m_temp_reg_6, m_temp_reg_7);
 2602|       |
 2603|       |
 2604|       |
 2605|       |                    /* o3 stored in m_temp_reg_36 and m_temp_reg_37 */
 2606|       |
 2607|       |
 2608|  6.45k|                    m_temp_reg_36 = _mm_add_epi32(m_temp_reg_22, m_temp_reg_26);
 2609|  6.45k|                    m_temp_reg_37 = _mm_add_epi32(m_temp_reg_23, m_temp_reg_27);
 2610|  6.45k|                }
 2611|       |
 2612|       |                /* Column 3 of destination computed here */
 2613|       |                /* It is stored in m_temp_reg_53 */
 2614|       |                /* Column 4 of destination computed here */
 2615|       |                /* It is stored in m_temp_reg_54 */
 2616|  6.45k|                {
 2617|  6.45k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_46, m_temp_reg_36);
 2618|  6.45k|                    m_temp_reg_22 = _mm_sub_epi32(m_temp_reg_46, m_temp_reg_36);
 2619|       |
 2620|  6.45k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_47, m_temp_reg_37);
 2621|  6.45k|                    m_temp_reg_23 = _mm_sub_epi32(m_temp_reg_47, m_temp_reg_37);
 2622|       |
 2623|  6.45k|                    m_temp_reg_20 = _mm_add_epi32(m_temp_reg_20, m_rdng_factor);
 2624|  6.45k|                    m_temp_reg_21 = _mm_add_epi32(m_temp_reg_21, m_rdng_factor);
 2625|  6.45k|                    m_temp_reg_22 = _mm_add_epi32(m_temp_reg_22, m_rdng_factor);
 2626|  6.45k|                    m_temp_reg_23 = _mm_add_epi32(m_temp_reg_23, m_rdng_factor);
 2627|       |
 2628|  6.45k|                    m_temp_reg_20 = _mm_srai_epi32(m_temp_reg_20, i4_shift);
 2629|  6.45k|                    m_temp_reg_21 = _mm_srai_epi32(m_temp_reg_21, i4_shift);
 2630|  6.45k|                    m_temp_reg_22 = _mm_srai_epi32(m_temp_reg_22, i4_shift);
 2631|  6.45k|                    m_temp_reg_23 = _mm_srai_epi32(m_temp_reg_23, i4_shift);
 2632|       |
 2633|  6.45k|                    m_temp_reg_53 = _mm_packs_epi32(m_temp_reg_20, m_temp_reg_21);
 2634|  6.45k|                    m_temp_reg_54 = _mm_packs_epi32(m_temp_reg_22, m_temp_reg_23);
 2635|  6.45k|                }
 2636|  6.45k|            }
 2637|       |
 2638|       |            /* Transpose of the destination 8x8 matrix done here */
 2639|       |            /* and ultimately stored in registers m_temp_reg_50 to m_temp_reg_57 */
 2640|       |            /* respectively */
 2641|  6.45k|            {
 2642|  6.45k|                m_temp_reg_10 = _mm_unpacklo_epi16(m_temp_reg_50, m_temp_reg_51);
 2643|  6.45k|                m_temp_reg_11 = _mm_unpacklo_epi16(m_temp_reg_52, m_temp_reg_53);
 2644|  6.45k|                m_temp_reg_14 = _mm_unpackhi_epi16(m_temp_reg_50, m_temp_reg_51);
 2645|  6.45k|                m_temp_reg_15 = _mm_unpackhi_epi16(m_temp_reg_52, m_temp_reg_53);
 2646|  6.45k|                m_temp_reg_0 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
 2647|  6.45k|                m_temp_reg_1 = _mm_unpackhi_epi32(m_temp_reg_10, m_temp_reg_11);
 2648|  6.45k|                m_temp_reg_2 = _mm_unpacklo_epi32(m_temp_reg_14, m_temp_reg_15);
 2649|  6.45k|                m_temp_reg_3 = _mm_unpackhi_epi32(m_temp_reg_14, m_temp_reg_15);
 2650|       |
 2651|  6.45k|                m_temp_reg_12 = _mm_unpacklo_epi16(m_temp_reg_54, m_temp_reg_55);
 2652|  6.45k|                m_temp_reg_13 = _mm_unpacklo_epi16(m_temp_reg_56, m_temp_reg_57);
 2653|  6.45k|                m_temp_reg_16 = _mm_unpackhi_epi16(m_temp_reg_54, m_temp_reg_55);
 2654|  6.45k|                m_temp_reg_17 = _mm_unpackhi_epi16(m_temp_reg_56, m_temp_reg_57);
 2655|  6.45k|                m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
 2656|  6.45k|                m_temp_reg_5 = _mm_unpackhi_epi32(m_temp_reg_12, m_temp_reg_13);
 2657|  6.45k|                m_temp_reg_6 = _mm_unpacklo_epi32(m_temp_reg_16, m_temp_reg_17);
 2658|  6.45k|                m_temp_reg_7 = _mm_unpackhi_epi32(m_temp_reg_16, m_temp_reg_17);
 2659|  6.45k|                m_temp_reg_10 = _mm_unpacklo_epi64(m_temp_reg_0, m_temp_reg_4);
 2660|  6.45k|                m_temp_reg_11 = _mm_unpackhi_epi64(m_temp_reg_0, m_temp_reg_4);
 2661|  6.45k|                m_temp_reg_12 = _mm_unpacklo_epi64(m_temp_reg_1, m_temp_reg_5);
 2662|  6.45k|                m_temp_reg_13 = _mm_unpackhi_epi64(m_temp_reg_1, m_temp_reg_5);
 2663|       |
 2664|  6.45k|                m_temp_reg_14 = _mm_unpacklo_epi64(m_temp_reg_2, m_temp_reg_6);
 2665|  6.45k|                m_temp_reg_15 = _mm_unpackhi_epi64(m_temp_reg_2, m_temp_reg_6);
 2666|  6.45k|                m_temp_reg_16 = _mm_unpacklo_epi64(m_temp_reg_3, m_temp_reg_7);
 2667|  6.45k|                m_temp_reg_17 = _mm_unpackhi_epi64(m_temp_reg_3, m_temp_reg_7);
 2668|  6.45k|            }
 2669|       |
 2670|       |            /* Recon and store */
 2671|  6.45k|            {
 2672|  6.45k|                m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2673|  6.45k|                pu1_pred += pred_strd;
 2674|  6.45k|                m_temp_reg_1 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2675|  6.45k|                pu1_pred += pred_strd;
 2676|  6.45k|                m_temp_reg_2 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2677|  6.45k|                pu1_pred += pred_strd;
 2678|  6.45k|                m_temp_reg_3 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2679|  6.45k|                pu1_pred += pred_strd;
 2680|  6.45k|                m_temp_reg_4 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2681|  6.45k|                pu1_pred += pred_strd;
 2682|  6.45k|                m_temp_reg_5 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2683|  6.45k|                pu1_pred += pred_strd;
 2684|  6.45k|                m_temp_reg_6 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2685|  6.45k|                pu1_pred += pred_strd;
 2686|  6.45k|                m_temp_reg_7 = _mm_loadl_epi64((__m128i *)pu1_pred);
 2687|       |
 2688|       |
 2689|  6.45k|                m_temp_reg_50 = _mm_setzero_si128();
 2690|  6.45k|                m_temp_reg_0 = _mm_unpacklo_epi8(m_temp_reg_0, m_temp_reg_50);
 2691|  6.45k|                m_temp_reg_1 = _mm_unpacklo_epi8(m_temp_reg_1, m_temp_reg_50);
 2692|  6.45k|                m_temp_reg_2 = _mm_unpacklo_epi8(m_temp_reg_2, m_temp_reg_50);
 2693|  6.45k|                m_temp_reg_3 = _mm_unpacklo_epi8(m_temp_reg_3, m_temp_reg_50);
 2694|  6.45k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_50);
 2695|  6.45k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_50);
 2696|  6.45k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_6, m_temp_reg_50);
 2697|  6.45k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_7, m_temp_reg_50);
 2698|       |
 2699|  6.45k|                m_temp_reg_50 = _mm_add_epi16(m_temp_reg_10, m_temp_reg_0);
 2700|  6.45k|                m_temp_reg_51 = _mm_add_epi16(m_temp_reg_11, m_temp_reg_1);
 2701|  6.45k|                m_temp_reg_52 = _mm_add_epi16(m_temp_reg_12, m_temp_reg_2);
 2702|  6.45k|                m_temp_reg_53 = _mm_add_epi16(m_temp_reg_13, m_temp_reg_3);
 2703|  6.45k|                m_temp_reg_54 = _mm_add_epi16(m_temp_reg_14, m_temp_reg_4);
 2704|  6.45k|                m_temp_reg_55 = _mm_add_epi16(m_temp_reg_15, m_temp_reg_5);
 2705|  6.45k|                m_temp_reg_56 = _mm_add_epi16(m_temp_reg_16, m_temp_reg_6);
 2706|  6.45k|                m_temp_reg_57 = _mm_add_epi16(m_temp_reg_17, m_temp_reg_7);
 2707|       |
 2708|  6.45k|                m_temp_reg_50 = _mm_packus_epi16(m_temp_reg_50, m_temp_reg_50);
 2709|  6.45k|                m_temp_reg_51 = _mm_packus_epi16(m_temp_reg_51, m_temp_reg_51);
 2710|  6.45k|                m_temp_reg_52 = _mm_packus_epi16(m_temp_reg_52, m_temp_reg_52);
 2711|  6.45k|                m_temp_reg_53 = _mm_packus_epi16(m_temp_reg_53, m_temp_reg_53);
 2712|  6.45k|                m_temp_reg_54 = _mm_packus_epi16(m_temp_reg_54, m_temp_reg_54);
 2713|  6.45k|                m_temp_reg_55 = _mm_packus_epi16(m_temp_reg_55, m_temp_reg_55);
 2714|  6.45k|                m_temp_reg_56 = _mm_packus_epi16(m_temp_reg_56, m_temp_reg_56);
 2715|  6.45k|                m_temp_reg_57 = _mm_packus_epi16(m_temp_reg_57, m_temp_reg_57);
 2716|       |
 2717|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_50);
 2718|  6.45k|                pu1_dst += dst_strd;
 2719|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_51);
 2720|  6.45k|                pu1_dst += dst_strd;
 2721|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_52);
 2722|  6.45k|                pu1_dst += dst_strd;
 2723|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_53);
 2724|  6.45k|                pu1_dst += dst_strd;
 2725|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_54);
 2726|  6.45k|                pu1_dst += dst_strd;
 2727|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_55);
 2728|  6.45k|                pu1_dst += dst_strd;
 2729|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_56);
 2730|  6.45k|                pu1_dst += dst_strd;
 2731|  6.45k|                _mm_storel_epi64((__m128i *)pu1_dst, m_temp_reg_57);
 2732|  6.45k|                pu1_dst += dst_strd;
 2733|       |
 2734|  6.45k|            }
 2735|       |
 2736|       |
 2737|  6.45k|        }
 2738|       |
 2739|       |
 2740|  6.45k|    }
 2741|  19.6k|}

ihevcd_bitstream.c:CLZ:
   76|   359k|{
   77|   359k|    if(u4_word)
  ------------------
  |  Branch (77:8): [True: 338k, False: 20.1k]
  ------------------
   78|   338k|        return (__builtin_clz(u4_word));
   79|  20.1k|    else
   80|  20.1k|        return 31;
   81|   359k|}
ihevcd_parse_slice_header.c:CLZ:
   76|  7.56k|{
   77|  7.56k|    if(u4_word)
  ------------------
  |  Branch (77:8): [True: 7.54k, False: 11]
  ------------------
   78|  7.54k|        return (__builtin_clz(u4_word));
   79|     11|    else
   80|     11|        return 31;
   81|  7.56k|}
ihevcd_parse_residual.c:CLZ:
   76|   171M|{
   77|   171M|    if(u4_word)
  ------------------
  |  Branch (77:8): [True: 159M, False: 12.6M]
  ------------------
   78|   159M|        return (__builtin_clz(u4_word));
   79|  12.6M|    else
   80|  12.6M|        return 31;
   81|   171M|}
ihevcd_parse_residual.c:CTZ:
   89|  6.92M|{
   90|  6.92M|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 0, False: 6.92M]
  ------------------
   91|      0|        return 31;
   92|  6.92M|    else
   93|  6.92M|    {
   94|  6.92M|        unsigned int index;
   95|  6.92M|        index = __builtin_ctz(u4_word);
   96|  6.92M|        return (UWORD32)index;
   97|  6.92M|    }
   98|  6.92M|}
ihevcd_cabac.c:CLZ:
   76|  42.9M|{
   77|  42.9M|    if(u4_word)
  ------------------
  |  Branch (77:8): [True: 42.9M, False: 0]
  ------------------
   78|  42.9M|        return (__builtin_clz(u4_word));
   79|      0|    else
   80|      0|        return 31;
   81|  42.9M|}
ihevcd_iquant_itrans_recon_ctb.c:CLZ:
   76|  27.0M|{
   77|  27.0M|    if(u4_word)
  ------------------
  |  Branch (77:8): [True: 27.0M, False: 37]
  ------------------
   78|  27.0M|        return (__builtin_clz(u4_word));
   79|     37|    else
   80|     37|        return 31;
   81|  27.0M|}
ihevcd_deblk.c:CTZ:
   89|   140M|{
   90|   140M|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 64.1M, False: 75.8M]
  ------------------
   91|  64.1M|        return 31;
   92|  75.8M|    else
   93|  75.8M|    {
   94|  75.8M|        unsigned int index;
   95|  75.8M|        index = __builtin_ctz(u4_word);
   96|  75.8M|        return (UWORD32)index;
   97|  75.8M|    }
   98|   140M|}
ihevcd_sao.c:CTZ:
   89|  78.1M|{
   90|  78.1M|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 461k, False: 77.6M]
  ------------------
   91|   461k|        return 31;
   92|  77.6M|    else
   93|  77.6M|    {
   94|  77.6M|        unsigned int index;
   95|  77.6M|        index = __builtin_ctz(u4_word);
   96|  77.6M|        return (UWORD32)index;
   97|  77.6M|    }
   98|  78.1M|}
ihevc_intra_pred_filters.c:CTZ:
   89|  5.48M|{
   90|  5.48M|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 0, False: 5.48M]
  ------------------
   91|      0|        return 31;
   92|  5.48M|    else
   93|  5.48M|    {
   94|  5.48M|        unsigned int index;
   95|  5.48M|        index = __builtin_ctz(u4_word);
   96|  5.48M|        return (UWORD32)index;
   97|  5.48M|    }
   98|  5.48M|}
ihevc_chroma_intra_pred_filters.c:CTZ:
   89|  2.25M|{
   90|  2.25M|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 0, False: 2.25M]
  ------------------
   91|      0|        return 31;
   92|  2.25M|    else
   93|  2.25M|    {
   94|  2.25M|        unsigned int index;
   95|  2.25M|        index = __builtin_ctz(u4_word);
   96|  2.25M|        return (UWORD32)index;
   97|  2.25M|    }
   98|  2.25M|}
ihevc_intra_pred_filters_ssse3_intr.c:CTZ:
   89|   329k|{
   90|   329k|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 0, False: 329k]
  ------------------
   91|      0|        return 31;
   92|   329k|    else
   93|   329k|    {
   94|   329k|        unsigned int index;
   95|   329k|        index = __builtin_ctz(u4_word);
   96|   329k|        return (UWORD32)index;
   97|   329k|    }
   98|   329k|}
ihevc_intra_pred_filters_sse42_intr.c:CTZ:
   89|   202k|{
   90|   202k|    if(0 == u4_word)
  ------------------
  |  Branch (90:8): [True: 0, False: 202k]
  ------------------
   91|      0|        return 31;
   92|   202k|    else
   93|   202k|    {
   94|   202k|        unsigned int index;
   95|   202k|        index = __builtin_ctz(u4_word);
   96|   202k|        return (UWORD32)index;
   97|   202k|    }
   98|   202k|}

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

ihevc_weighted_pred_uni_sse42:
  121|  96.7k|{
  122|  96.7k|    WORD32 row, col, temp;
  123|  96.7k|    WORD32 dst0, dst1, dst2, dst3;
  124|       |
  125|       |    /* all 128 bit registers are named with a suffix mxnb, where m is the */
  126|       |    /* number of n bits packed in the register                            */
  127|  96.7k|    __m128i src_temp0_4x32b, src_temp1_4x32b, src_temp2_4x32b, src_temp3_4x32b;
  128|  96.7k|    __m128i const_temp_4x32b, lvl_shift_4x32b, wgt0_4x32b, off0_4x32b;
  129|       |
  130|  96.7k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  96.7k|#define ASSERT(x) assert((x))
  ------------------
  131|  96.7k|    ASSERT(ht % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  96.7k|#define ASSERT(x) assert((x))
  ------------------
  132|       |
  133|  96.7k|    temp = 1 << (shift - 1);
  134|       |
  135|       |    // seting values in register
  136|  96.7k|    const_temp_4x32b = _mm_set1_epi32(temp);
  137|  96.7k|    lvl_shift_4x32b = _mm_set1_epi32(lvl_shift);
  138|  96.7k|    wgt0_4x32b = _mm_set1_epi32(wgt0);
  139|  96.7k|    off0_4x32b = _mm_set1_epi32(off0);
  140|       |
  141|  96.7k|    if(0 == (wd & 7)) /* wd multiple of 8 case */
  ------------------
  |  Branch (141:8): [True: 96.2k, False: 524]
  ------------------
  142|  96.2k|    {
  143|  96.2k|        __m128i src_temp4_4x32b, src_temp5_4x32b, src_temp6_4x32b, src_temp7_4x32b;
  144|       |
  145|       |        /*  outer for loop starts from here */
  146|   300k|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (146:22): [True: 204k, False: 96.2k]
  ------------------
  147|   204k|        {
  148|   467k|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (148:26): [True: 263k, False: 204k]
  ------------------
  149|   263k|            {   /* for row =0 ,1,2,3*/
  150|       |
  151|       |                /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  152|   263k|                src_temp0_4x32b = _mm_loadu_si128((__m128i *)(pi2_src));
  153|       |                /* row = 1 */
  154|   263k|                src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
  155|       |                /* row = 2 */
  156|   263k|                src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 2 * src_strd));
  157|       |                /* row = 3 */
  158|   263k|                src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 3 * src_strd));
  159|       |
  160|       |                /* row = 0 */ /* Last 4 pixels */
  161|   263k|                src_temp4_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 4));
  162|       |                /* row = 1 */
  163|   263k|                src_temp5_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd + 4));
  164|       |                /* row = 2 */
  165|   263k|                src_temp6_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 2 * src_strd + 4));
  166|       |                /* row = 3 */
  167|   263k|                src_temp7_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 3 * src_strd + 4));
  168|       |
  169|       |                /* considering pix. 4:0 by converting 16-into 32 bit */ /* First 4 pixels */
  170|   263k|                src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
  171|   263k|                src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
  172|   263k|                src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
  173|   263k|                src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
  174|       |
  175|       |                /* (pi2_src[col] + lvl_shift)*/ /* First 4 pixels */
  176|   263k|                src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, lvl_shift_4x32b);
  177|   263k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift_4x32b);
  178|   263k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift_4x32b);
  179|   263k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift_4x32b);
  180|       |
  181|       |                /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/ /* First 4 pixels */
  182|   263k|                src_temp0_4x32b  = _mm_mullo_epi32(src_temp0_4x32b, wgt0_4x32b);
  183|   263k|                src_temp1_4x32b  = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
  184|   263k|                src_temp2_4x32b  = _mm_mullo_epi32(src_temp2_4x32b, wgt0_4x32b);
  185|   263k|                src_temp3_4x32b  = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
  186|       |
  187|       |                /* considering pix. 4:0 by converting 16-into 32 bit */ /* Last 4 pixels */
  188|   263k|                src_temp4_4x32b  = _mm_cvtepi16_epi32(src_temp4_4x32b);
  189|   263k|                src_temp5_4x32b  = _mm_cvtepi16_epi32(src_temp5_4x32b);
  190|   263k|                src_temp6_4x32b  = _mm_cvtepi16_epi32(src_temp6_4x32b);
  191|   263k|                src_temp7_4x32b  = _mm_cvtepi16_epi32(src_temp7_4x32b);
  192|       |
  193|       |                /* (pi2_src[col] + lvl_shift)*/ /* Last 4 pixels */
  194|   263k|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, lvl_shift_4x32b);
  195|   263k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, lvl_shift_4x32b);
  196|   263k|                src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, lvl_shift_4x32b);
  197|   263k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, lvl_shift_4x32b);
  198|       |
  199|       |                /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/ /* Last 4 pixels */
  200|   263k|                src_temp4_4x32b  = _mm_mullo_epi32(src_temp4_4x32b, wgt0_4x32b);
  201|   263k|                src_temp5_4x32b  = _mm_mullo_epi32(src_temp5_4x32b, wgt0_4x32b);
  202|   263k|                src_temp6_4x32b  = _mm_mullo_epi32(src_temp6_4x32b, wgt0_4x32b);
  203|   263k|                src_temp7_4x32b  = _mm_mullo_epi32(src_temp7_4x32b, wgt0_4x32b);
  204|       |
  205|       |                /* i4_tmp += 1 << (shift - 1) */ /* First 4 pixels */
  206|   263k|                src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, const_temp_4x32b);
  207|   263k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
  208|   263k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, const_temp_4x32b);
  209|   263k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
  210|       |
  211|       |                /* (i4_tmp >> shift) */ /* First 4 pixels */
  212|   263k|                src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b, shift);
  213|   263k|                src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b, shift);
  214|   263k|                src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b, shift);
  215|   263k|                src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b, shift);
  216|       |
  217|       |                /* i4_tmp += 1 << (shift - 1) */ /* Last 4 pixels */
  218|   263k|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, const_temp_4x32b);
  219|   263k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, const_temp_4x32b);
  220|   263k|                src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, const_temp_4x32b);
  221|   263k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, const_temp_4x32b);
  222|       |
  223|       |                /* (i4_tmp >> shift) */ /* Last 4 pixels */
  224|   263k|                src_temp4_4x32b = _mm_srai_epi32(src_temp4_4x32b, shift);
  225|   263k|                src_temp5_4x32b = _mm_srai_epi32(src_temp5_4x32b, shift);
  226|   263k|                src_temp6_4x32b = _mm_srai_epi32(src_temp6_4x32b, shift);
  227|   263k|                src_temp7_4x32b = _mm_srai_epi32(src_temp7_4x32b, shift);
  228|       |
  229|       |                /*i4_tmp = (i4_tmp >> shift) + off0; */ /* First 4 pixels */
  230|   263k|                src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, off0_4x32b);
  231|   263k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, off0_4x32b);
  232|   263k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, off0_4x32b);
  233|   263k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, off0_4x32b);
  234|       |
  235|       |                /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  236|   263k|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, off0_4x32b);
  237|   263k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, off0_4x32b);
  238|   263k|                src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, off0_4x32b);
  239|   263k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, off0_4x32b);
  240|       |
  241|   263k|                src_temp0_4x32b = _mm_packs_epi32(src_temp0_4x32b, src_temp4_4x32b);
  242|   263k|                src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp5_4x32b);
  243|   263k|                src_temp2_4x32b = _mm_packs_epi32(src_temp2_4x32b, src_temp6_4x32b);
  244|   263k|                src_temp3_4x32b = _mm_packs_epi32(src_temp3_4x32b, src_temp7_4x32b);
  245|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  246|   263k|                src_temp0_4x32b = _mm_packus_epi16(src_temp0_4x32b, src_temp0_4x32b);
  247|   263k|                src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp1_4x32b);
  248|   263k|                src_temp2_4x32b = _mm_packus_epi16(src_temp2_4x32b, src_temp2_4x32b);
  249|   263k|                src_temp3_4x32b = _mm_packus_epi16(src_temp3_4x32b, src_temp3_4x32b);
  250|       |
  251|       |                /* store four 8-bit output values  */
  252|   263k|                _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_temp0_4x32b); /* row = 0*/
  253|   263k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_temp1_4x32b); /* row = 2*/
  254|   263k|                _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_temp2_4x32b); /* row = 1*/
  255|   263k|                _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_temp3_4x32b); /* row = 3*/
  256|       |
  257|       |                /* To update pointer */
  258|   263k|                pi2_src += 8;
  259|   263k|                pu1_dst += 8;
  260|       |
  261|   263k|            } /* inner loop ends here(4-output values in single iteration) */
  262|       |
  263|   204k|            pi2_src = pi2_src - wd + 4 * src_strd;    /* Pointer update */
  264|   204k|            pu1_dst = pu1_dst - wd + 4 * dst_strd; /* Pointer update */
  265|       |
  266|   204k|        }
  267|  96.2k|    }
  268|    524|    else  /* wd multiple of 4 case */
  269|    524|    {
  270|       |        /*  outer for loop starts from here */
  271|  1.65k|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (271:22): [True: 1.12k, False: 524]
  ------------------
  272|  1.12k|        {
  273|  2.41k|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (273:26): [True: 1.28k, False: 1.12k]
  ------------------
  274|  1.28k|            {   /* for row =0 ,1,2,3*/
  275|       |
  276|       |                /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  277|  1.28k|                src_temp0_4x32b = _mm_loadu_si128((__m128i *)(pi2_src));
  278|       |                /* row = 1 */
  279|  1.28k|                src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
  280|       |                /* row = 2 */
  281|  1.28k|                src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 2 * src_strd));
  282|       |                /* row = 3 */
  283|  1.28k|                src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 3 * src_strd));
  284|       |
  285|       |                /* considering pix. 4:0 by converting 16-into 32 bit */
  286|  1.28k|                src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
  287|  1.28k|                src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
  288|  1.28k|                src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
  289|  1.28k|                src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
  290|       |
  291|       |                /* (pi2_src[col] + lvl_shift)*/
  292|  1.28k|                src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, lvl_shift_4x32b);
  293|  1.28k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift_4x32b);
  294|  1.28k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift_4x32b);
  295|  1.28k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift_4x32b);
  296|       |
  297|       |                /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  298|  1.28k|                src_temp0_4x32b  = _mm_mullo_epi32(src_temp0_4x32b, wgt0_4x32b);
  299|  1.28k|                src_temp1_4x32b  = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
  300|  1.28k|                src_temp2_4x32b  = _mm_mullo_epi32(src_temp2_4x32b, wgt0_4x32b);
  301|  1.28k|                src_temp3_4x32b  = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
  302|       |
  303|       |                /* i4_tmp += 1 << (shift - 1) */
  304|  1.28k|                src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, const_temp_4x32b);
  305|  1.28k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
  306|  1.28k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, const_temp_4x32b);
  307|  1.28k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
  308|       |
  309|       |                /* (i4_tmp >> shift) */
  310|  1.28k|                src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b, shift);
  311|  1.28k|                src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b, shift);
  312|  1.28k|                src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b, shift);
  313|  1.28k|                src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b, shift);
  314|       |
  315|       |                /*i4_tmp = (i4_tmp >> shift) + off0; */
  316|  1.28k|                src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, off0_4x32b);
  317|  1.28k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, off0_4x32b);
  318|  1.28k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, off0_4x32b);
  319|  1.28k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, off0_4x32b);
  320|       |
  321|  1.28k|                src_temp0_4x32b = _mm_packs_epi32(src_temp0_4x32b, src_temp1_4x32b);
  322|  1.28k|                src_temp2_4x32b = _mm_packs_epi32(src_temp2_4x32b, src_temp3_4x32b);
  323|       |
  324|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  325|  1.28k|                src_temp0_4x32b = _mm_packus_epi16(src_temp0_4x32b, src_temp2_4x32b);
  326|       |
  327|  1.28k|                dst0 = _mm_cvtsi128_si32(src_temp0_4x32b);
  328|       |                /* dst row = 1 to 3 */
  329|  1.28k|                src_temp1_4x32b = _mm_shuffle_epi32(src_temp0_4x32b, 1);
  330|  1.28k|                src_temp2_4x32b = _mm_shuffle_epi32(src_temp0_4x32b, 2);
  331|  1.28k|                src_temp3_4x32b = _mm_shuffle_epi32(src_temp0_4x32b, 3);
  332|       |
  333|       |                /* store four 8-bit output values  */
  334|  1.28k|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
  335|       |
  336|  1.28k|                dst1 = _mm_cvtsi128_si32(src_temp1_4x32b);
  337|  1.28k|                dst2 = _mm_cvtsi128_si32(src_temp2_4x32b);
  338|  1.28k|                dst3 = _mm_cvtsi128_si32(src_temp3_4x32b);
  339|       |
  340|       |                /* row = 1 to row = 3 */
  341|  1.28k|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
  342|  1.28k|                *(WORD32 *)(&pu1_dst[2 * dst_strd]) = dst2;
  343|  1.28k|                *(WORD32 *)(&pu1_dst[3 * dst_strd]) = dst3;
  344|       |
  345|       |                /* To update pointer */
  346|  1.28k|                pi2_src += 4;
  347|  1.28k|                pu1_dst += 4;
  348|       |
  349|  1.28k|            } /* inner loop ends here(4-output values in single iteration) */
  350|       |
  351|  1.12k|            pi2_src = pi2_src - wd + 4 * src_strd;    /* Pointer update */
  352|  1.12k|            pu1_dst = pu1_dst - wd + 4 * dst_strd; /* Pointer update */
  353|       |
  354|  1.12k|        }
  355|    524|    }
  356|  96.7k|}
ihevc_weighted_pred_chroma_uni_sse42:
  422|  96.7k|{
  423|  96.7k|    WORD32 row, col, temp, wdx2;
  424|       |    /* all 128 bit registers are named with a suffix mxnb, where m is the */
  425|       |    /* number of n bits packed in the register                            */
  426|       |
  427|  96.7k|    __m128i src_temp0_4x32b, src_temp1_4x32b;
  428|  96.7k|    __m128i const_temp_4x32b, lvl_shift_4x32b, wgt0_4x32b, off0_4x32b;
  429|       |
  430|  96.7k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  96.7k|#define ASSERT(x) assert((x))
  ------------------
  431|  96.7k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  96.7k|#define ASSERT(x) assert((x))
  ------------------
  432|       |
  433|  96.7k|    temp = 1 << (shift - 1);
  434|  96.7k|    wdx2 = 2 * wd;
  435|       |
  436|       |    // seting values in register
  437|  96.7k|    const_temp_4x32b = _mm_set1_epi32(temp);
  438|  96.7k|    lvl_shift_4x32b = _mm_set1_epi32(lvl_shift);
  439|  96.7k|    wgt0_4x32b = _mm_set_epi32(wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb);
  440|  96.7k|    off0_4x32b = _mm_set_epi32(off0_cr, off0_cb, off0_cr, off0_cb);
  441|       |
  442|       |#if 0 /* Enable this for ht%4=0 case. But was degrading performance for lower sizes and improving for higher sizes!!! */
  443|       |    if( 0 == (ht & 3)) /* ht multiple of 4 case */
  444|       |    {
  445|       |        if( 0 == (wdx2 & 15)) /* 2*wd multiple of 168 case */
  446|       |        {
  447|       |            __m128i src_temp2_4x32b, src_temp3_4x32b;
  448|       |            __m128i src_temp4_4x32b, src_temp5_4x32b, src_temp6_4x32b, src_temp7_4x32b;
  449|       |            __m128i src_temp8_4x32b, src_temp9_4x32b, src_temp10_4x32b, src_temp11_4x32b;
  450|       |            __m128i src_temp12_4x32b, src_temp13_4x32b, src_temp14_4x32b, src_temp15_4x32b;
  451|       |            /*  outer for loop starts from here */
  452|       |            for(row = 0; row < ht; row +=4)
  453|       |            {
  454|       |                for(col = 0; col < wdx2; col +=16)
  455|       |                {
  456|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  457|       |                    src_temp0_4x32b = _mm_loadu_si128((__m128i*)(pi2_src));
  458|       |                    /* row = 1 */
  459|       |                    src_temp1_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+src_strd));
  460|       |                    /* row = 0 */ /* Second 4 pixels */
  461|       |                    src_temp2_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+4));
  462|       |                    /* row = 1 */
  463|       |                    src_temp3_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+src_strd+4));
  464|       |                    /* row = 0 */ /* Third 4 pixels */
  465|       |                    src_temp4_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+8));
  466|       |                    /* row = 1 */
  467|       |                    src_temp5_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+src_strd+8));
  468|       |                    /* row = 0 */ /* Last 4 pixels */
  469|       |                    src_temp6_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+12));
  470|       |                    /* row = 1 */
  471|       |                    src_temp7_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+src_strd+12));
  472|       |
  473|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  474|       |                    src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
  475|       |                    src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
  476|       |                    /* (pi2_src[col] + lvl_shift)*/
  477|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, lvl_shift_4x32b);
  478|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, lvl_shift_4x32b);
  479|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  480|       |                    src_temp0_4x32b  = _mm_mullo_epi32 (src_temp0_4x32b, wgt0_4x32b);
  481|       |                    src_temp1_4x32b  = _mm_mullo_epi32 (src_temp1_4x32b, wgt0_4x32b);
  482|       |
  483|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Second 4 pixels */
  484|       |                    src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
  485|       |                    src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
  486|       |                    /* (pi2_src[col] + lvl_shift)*/
  487|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, lvl_shift_4x32b);
  488|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, lvl_shift_4x32b);
  489|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  490|       |                    src_temp2_4x32b  = _mm_mullo_epi32 (src_temp2_4x32b, wgt0_4x32b);
  491|       |                    src_temp3_4x32b  = _mm_mullo_epi32 (src_temp3_4x32b, wgt0_4x32b);
  492|       |
  493|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Third 4 pixels */
  494|       |                    src_temp4_4x32b  = _mm_cvtepi16_epi32(src_temp4_4x32b);
  495|       |                    src_temp5_4x32b  = _mm_cvtepi16_epi32(src_temp5_4x32b);
  496|       |                    /* (pi2_src[col] + lvl_shift)*/
  497|       |                    src_temp4_4x32b = _mm_add_epi32 (src_temp4_4x32b, lvl_shift_4x32b);
  498|       |                    src_temp5_4x32b = _mm_add_epi32 (src_temp5_4x32b, lvl_shift_4x32b);
  499|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  500|       |                    src_temp4_4x32b  = _mm_mullo_epi32 (src_temp4_4x32b, wgt0_4x32b);
  501|       |                    src_temp5_4x32b  = _mm_mullo_epi32 (src_temp5_4x32b, wgt0_4x32b);
  502|       |
  503|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Last 4 pixels */
  504|       |                    src_temp6_4x32b  = _mm_cvtepi16_epi32(src_temp6_4x32b);
  505|       |                    src_temp7_4x32b  = _mm_cvtepi16_epi32(src_temp7_4x32b);
  506|       |                    /* (pi2_src[col] + lvl_shift)*/
  507|       |                    src_temp6_4x32b = _mm_add_epi32 (src_temp6_4x32b, lvl_shift_4x32b);
  508|       |                    src_temp7_4x32b = _mm_add_epi32 (src_temp7_4x32b, lvl_shift_4x32b);
  509|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  510|       |                    src_temp6_4x32b  = _mm_mullo_epi32 (src_temp6_4x32b, wgt0_4x32b);
  511|       |                    src_temp7_4x32b  = _mm_mullo_epi32 (src_temp7_4x32b, wgt0_4x32b);
  512|       |
  513|       |                    /* i4_tmp += 1 << (shift - 1) */
  514|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, const_temp_4x32b);
  515|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, const_temp_4x32b);
  516|       |                    /* (i4_tmp >> shift) */
  517|       |                    src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b,  shift);
  518|       |                    src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
  519|       |
  520|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Second 4 pixels */
  521|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, const_temp_4x32b);
  522|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, const_temp_4x32b);
  523|       |                    /* (i4_tmp >> shift) */
  524|       |                    src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b,  shift);
  525|       |                    src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
  526|       |
  527|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Third 4 pixels */
  528|       |                    src_temp4_4x32b = _mm_add_epi32 (src_temp4_4x32b, const_temp_4x32b);
  529|       |                    src_temp5_4x32b = _mm_add_epi32 (src_temp5_4x32b, const_temp_4x32b);
  530|       |                    /* (i4_tmp >> shift) */
  531|       |                    src_temp4_4x32b = _mm_srai_epi32(src_temp4_4x32b,  shift);
  532|       |                    src_temp5_4x32b = _mm_srai_epi32(src_temp5_4x32b,  shift);
  533|       |
  534|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Last 4 pixels */
  535|       |                    src_temp6_4x32b = _mm_add_epi32 (src_temp6_4x32b, const_temp_4x32b);
  536|       |                    src_temp7_4x32b = _mm_add_epi32 (src_temp7_4x32b, const_temp_4x32b);
  537|       |                    /* (i4_tmp >> shift) */
  538|       |                    src_temp6_4x32b = _mm_srai_epi32(src_temp6_4x32b,  shift);
  539|       |                    src_temp7_4x32b = _mm_srai_epi32(src_temp7_4x32b,  shift);
  540|       |
  541|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  542|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, off0_4x32b);
  543|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, off0_4x32b);
  544|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Second 4 pixels */
  545|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, off0_4x32b);
  546|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, off0_4x32b);
  547|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Third 4 pixels */
  548|       |                    src_temp4_4x32b = _mm_add_epi32 (src_temp4_4x32b, off0_4x32b);
  549|       |                    src_temp5_4x32b = _mm_add_epi32 (src_temp5_4x32b, off0_4x32b);
  550|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  551|       |                    src_temp6_4x32b = _mm_add_epi32 (src_temp6_4x32b, off0_4x32b);
  552|       |                    src_temp7_4x32b = _mm_add_epi32 (src_temp7_4x32b, off0_4x32b);
  553|       |
  554|       |                    src_temp0_4x32b = _mm_packs_epi32 (src_temp0_4x32b, src_temp2_4x32b);
  555|       |                    src_temp1_4x32b = _mm_packs_epi32 (src_temp1_4x32b, src_temp3_4x32b);
  556|       |                    src_temp4_4x32b = _mm_packs_epi32 (src_temp4_4x32b, src_temp6_4x32b);
  557|       |                    src_temp5_4x32b = _mm_packs_epi32 (src_temp5_4x32b, src_temp7_4x32b);
  558|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  559|       |                    src_temp0_4x32b = _mm_packus_epi16 (src_temp0_4x32b, src_temp4_4x32b);
  560|       |                    src_temp1_4x32b = _mm_packus_epi16 (src_temp1_4x32b, src_temp5_4x32b);
  561|       |
  562|       |                    /* store 16 8-bit output values  */
  563|       |                    _mm_storeu_si128((__m128i*)(pu1_dst+0*dst_strd), src_temp0_4x32b); /* row = 0*/
  564|       |                    _mm_storeu_si128((__m128i*)(pu1_dst+1*dst_strd), src_temp1_4x32b); /* row = 1*/
  565|       |
  566|       |                    /* row = 2 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  567|       |                    src_temp8_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd));
  568|       |                    /* row = 3 */
  569|       |                    src_temp9_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd));
  570|       |                    /* row = 2 */ /* Second 4 pixels */
  571|       |                    src_temp10_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd+4));
  572|       |                    /* row = 3 */
  573|       |                    src_temp11_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd+4));
  574|       |                    /* row = 2 */ /* Third 4 pixels */
  575|       |                    src_temp12_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd+8));
  576|       |                    /* row = 3 */
  577|       |                    src_temp13_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd+8));
  578|       |                    /* row = 2 */ /* Last 4 pixels */
  579|       |                    src_temp14_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd+12));
  580|       |                    /* row = 3 */
  581|       |                    src_temp15_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd+12));
  582|       |
  583|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  584|       |                    src_temp8_4x32b  = _mm_cvtepi16_epi32(src_temp8_4x32b);
  585|       |                    src_temp9_4x32b  = _mm_cvtepi16_epi32(src_temp9_4x32b);
  586|       |                    /* (pi2_src[col] + lvl_shift)*/
  587|       |                    src_temp8_4x32b = _mm_add_epi32 (src_temp8_4x32b, lvl_shift_4x32b);
  588|       |                    src_temp9_4x32b = _mm_add_epi32 (src_temp9_4x32b, lvl_shift_4x32b);
  589|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  590|       |                    src_temp8_4x32b  = _mm_mullo_epi32 (src_temp8_4x32b, wgt0_4x32b);
  591|       |                    src_temp9_4x32b  = _mm_mullo_epi32 (src_temp9_4x32b, wgt0_4x32b);
  592|       |
  593|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Second 4 pixels */
  594|       |                    src_temp10_4x32b  = _mm_cvtepi16_epi32(src_temp10_4x32b);
  595|       |                    src_temp11_4x32b  = _mm_cvtepi16_epi32(src_temp11_4x32b);
  596|       |                    /* (pi2_src[col] + lvl_shift)*/
  597|       |                    src_temp10_4x32b = _mm_add_epi32 (src_temp10_4x32b, lvl_shift_4x32b);
  598|       |                    src_temp11_4x32b = _mm_add_epi32 (src_temp11_4x32b, lvl_shift_4x32b);
  599|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  600|       |                    src_temp10_4x32b  = _mm_mullo_epi32 (src_temp10_4x32b, wgt0_4x32b);
  601|       |                    src_temp11_4x32b  = _mm_mullo_epi32 (src_temp11_4x32b, wgt0_4x32b);
  602|       |
  603|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Third 4 pixels */
  604|       |                    src_temp12_4x32b  = _mm_cvtepi16_epi32(src_temp12_4x32b);
  605|       |                    src_temp13_4x32b  = _mm_cvtepi16_epi32(src_temp13_4x32b);
  606|       |                    /* (pi2_src[col] + lvl_shift)*/
  607|       |                    src_temp12_4x32b = _mm_add_epi32 (src_temp12_4x32b, lvl_shift_4x32b);
  608|       |                    src_temp13_4x32b = _mm_add_epi32 (src_temp13_4x32b, lvl_shift_4x32b);
  609|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  610|       |                    src_temp12_4x32b  = _mm_mullo_epi32 (src_temp12_4x32b, wgt0_4x32b);
  611|       |                    src_temp13_4x32b  = _mm_mullo_epi32 (src_temp13_4x32b, wgt0_4x32b);
  612|       |
  613|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Last 4 pixels */
  614|       |                    src_temp14_4x32b  = _mm_cvtepi16_epi32(src_temp14_4x32b);
  615|       |                    src_temp15_4x32b  = _mm_cvtepi16_epi32(src_temp15_4x32b);
  616|       |                    /* (pi2_src[col] + lvl_shift)*/
  617|       |                    src_temp14_4x32b = _mm_add_epi32 (src_temp14_4x32b, lvl_shift_4x32b);
  618|       |                    src_temp15_4x32b = _mm_add_epi32 (src_temp15_4x32b, lvl_shift_4x32b);
  619|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  620|       |                    src_temp14_4x32b  = _mm_mullo_epi32 (src_temp14_4x32b, wgt0_4x32b);
  621|       |                    src_temp15_4x32b  = _mm_mullo_epi32 (src_temp15_4x32b, wgt0_4x32b);
  622|       |
  623|       |                    /* i4_tmp += 1 << (shift - 1) */
  624|       |                    src_temp8_4x32b = _mm_add_epi32 (src_temp8_4x32b, const_temp_4x32b);
  625|       |                    src_temp9_4x32b = _mm_add_epi32 (src_temp9_4x32b, const_temp_4x32b);
  626|       |                    /* (i4_tmp >> shift) */
  627|       |                    src_temp8_4x32b = _mm_srai_epi32(src_temp8_4x32b,  shift);
  628|       |                    src_temp9_4x32b = _mm_srai_epi32(src_temp9_4x32b,  shift);
  629|       |
  630|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Second 4 pixels */
  631|       |                    src_temp10_4x32b = _mm_add_epi32 (src_temp10_4x32b, const_temp_4x32b);
  632|       |                    src_temp11_4x32b = _mm_add_epi32 (src_temp11_4x32b, const_temp_4x32b);
  633|       |                    /* (i4_tmp >> shift) */
  634|       |                    src_temp10_4x32b = _mm_srai_epi32(src_temp10_4x32b,  shift);
  635|       |                    src_temp11_4x32b = _mm_srai_epi32(src_temp11_4x32b,  shift);
  636|       |
  637|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Third 4 pixels */
  638|       |                    src_temp12_4x32b = _mm_add_epi32 (src_temp12_4x32b, const_temp_4x32b);
  639|       |                    src_temp13_4x32b = _mm_add_epi32 (src_temp13_4x32b, const_temp_4x32b);
  640|       |                    /* (i4_tmp >> shift) */
  641|       |                    src_temp12_4x32b = _mm_srai_epi32(src_temp12_4x32b,  shift);
  642|       |                    src_temp13_4x32b = _mm_srai_epi32(src_temp13_4x32b,  shift);
  643|       |
  644|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Last 4 pixels */
  645|       |                    src_temp14_4x32b = _mm_add_epi32 (src_temp14_4x32b, const_temp_4x32b);
  646|       |                    src_temp15_4x32b = _mm_add_epi32 (src_temp15_4x32b, const_temp_4x32b);
  647|       |                    /* (i4_tmp >> shift) */
  648|       |                    src_temp14_4x32b = _mm_srai_epi32(src_temp14_4x32b,  shift);
  649|       |                    src_temp15_4x32b = _mm_srai_epi32(src_temp15_4x32b,  shift);
  650|       |
  651|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  652|       |                    src_temp8_4x32b = _mm_add_epi32 (src_temp8_4x32b, off0_4x32b);
  653|       |                    src_temp9_4x32b = _mm_add_epi32 (src_temp9_4x32b, off0_4x32b);
  654|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Second 4 pixels */
  655|       |                    src_temp10_4x32b = _mm_add_epi32 (src_temp10_4x32b, off0_4x32b);
  656|       |                    src_temp11_4x32b = _mm_add_epi32 (src_temp11_4x32b, off0_4x32b);
  657|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Third 4 pixels */
  658|       |                    src_temp12_4x32b = _mm_add_epi32 (src_temp12_4x32b, off0_4x32b);
  659|       |                    src_temp13_4x32b = _mm_add_epi32 (src_temp13_4x32b, off0_4x32b);
  660|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  661|       |                    src_temp14_4x32b = _mm_add_epi32 (src_temp14_4x32b, off0_4x32b);
  662|       |                    src_temp15_4x32b = _mm_add_epi32 (src_temp15_4x32b, off0_4x32b);
  663|       |
  664|       |                    src_temp8_4x32b = _mm_packs_epi32 (src_temp8_4x32b, src_temp10_4x32b);
  665|       |                    src_temp9_4x32b = _mm_packs_epi32 (src_temp9_4x32b, src_temp11_4x32b);
  666|       |                    src_temp12_4x32b = _mm_packs_epi32 (src_temp12_4x32b, src_temp14_4x32b);
  667|       |                    src_temp13_4x32b = _mm_packs_epi32 (src_temp13_4x32b, src_temp15_4x32b);
  668|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  669|       |                    src_temp8_4x32b = _mm_packus_epi16 (src_temp8_4x32b, src_temp12_4x32b);
  670|       |                    src_temp9_4x32b = _mm_packus_epi16 (src_temp9_4x32b, src_temp13_4x32b);
  671|       |
  672|       |                    /* store 16 8-bit output values  */
  673|       |                    _mm_storeu_si128((__m128i*)(pu1_dst+2*dst_strd), src_temp8_4x32b); /* row = 2*/
  674|       |                    _mm_storeu_si128((__m128i*)(pu1_dst+3*dst_strd), src_temp9_4x32b); /* row = 3*/
  675|       |
  676|       |                    pi2_src += 16;  /* Pointer update */
  677|       |                    pu1_dst += 16; /* Pointer update */
  678|       |
  679|       |                } /* inner loop ends here(4-output values in single iteration) */
  680|       |                pi2_src = pi2_src - wdx2 + 4*src_strd;  /* Pointer update */
  681|       |                pu1_dst = pu1_dst - wdx2 + 4*dst_strd; /* Pointer update */
  682|       |            }
  683|       |        }
  684|       |        else if( 0 == (wdx2 & 7)) /* 2*wd multiple of 8 case */
  685|       |        {
  686|       |            __m128i src_temp2_4x32b,src_temp3_4x32b;
  687|       |            __m128i src_temp4_4x32b, src_temp5_4x32b, src_temp6_4x32b, src_temp7_4x32b;
  688|       |            /*  outer for loop starts from here */
  689|       |            for(row = 0; row < ht; row +=4)
  690|       |            {
  691|       |                for(col = 0; col < wdx2; col +=8)
  692|       |                {
  693|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  694|       |                    src_temp0_4x32b = _mm_loadu_si128((__m128i*)(pi2_src));
  695|       |                    /* row = 1 */
  696|       |                    src_temp1_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+src_strd));
  697|       |                    /* row = 2 */
  698|       |                    src_temp2_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd));
  699|       |                    /* row = 3 */
  700|       |                    src_temp3_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd));
  701|       |
  702|       |                    /* row = 0 */ /* Last 4 pixels */
  703|       |                    src_temp4_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+4));
  704|       |                    /* row = 1 */
  705|       |                    src_temp5_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+src_strd+4));
  706|       |                    /* row = 2 */
  707|       |                    src_temp6_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd+4));
  708|       |                    /* row = 3 */
  709|       |                    src_temp7_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd+4));
  710|       |
  711|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  712|       |                    src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
  713|       |                    src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
  714|       |                    /* (pi2_src[col] + lvl_shift)*/
  715|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, lvl_shift_4x32b);
  716|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, lvl_shift_4x32b);
  717|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  718|       |                    src_temp0_4x32b  = _mm_mullo_epi32 (src_temp0_4x32b, wgt0_4x32b);
  719|       |                    src_temp1_4x32b  = _mm_mullo_epi32 (src_temp1_4x32b, wgt0_4x32b);
  720|       |
  721|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Last 4 pixels */
  722|       |                    src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
  723|       |                    src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
  724|       |                    /* (pi2_src[col] + lvl_shift)*/
  725|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, lvl_shift_4x32b);
  726|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, lvl_shift_4x32b);
  727|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  728|       |                    src_temp2_4x32b  = _mm_mullo_epi32 (src_temp2_4x32b, wgt0_4x32b);
  729|       |                    src_temp3_4x32b  = _mm_mullo_epi32 (src_temp3_4x32b, wgt0_4x32b);
  730|       |
  731|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  732|       |                    src_temp4_4x32b  = _mm_cvtepi16_epi32(src_temp4_4x32b);
  733|       |                    src_temp5_4x32b  = _mm_cvtepi16_epi32(src_temp5_4x32b);
  734|       |                    /* (pi2_src[col] + lvl_shift)*/
  735|       |                    src_temp4_4x32b = _mm_add_epi32 (src_temp4_4x32b, lvl_shift_4x32b);
  736|       |                    src_temp5_4x32b = _mm_add_epi32 (src_temp5_4x32b, lvl_shift_4x32b);
  737|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  738|       |                    src_temp4_4x32b  = _mm_mullo_epi32 (src_temp4_4x32b, wgt0_4x32b);
  739|       |                    src_temp5_4x32b  = _mm_mullo_epi32 (src_temp5_4x32b, wgt0_4x32b);
  740|       |
  741|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  742|       |                    src_temp6_4x32b  = _mm_cvtepi16_epi32(src_temp6_4x32b);
  743|       |                    src_temp7_4x32b  = _mm_cvtepi16_epi32(src_temp7_4x32b);
  744|       |                    /* (pi2_src[col] + lvl_shift)*/
  745|       |                    src_temp6_4x32b = _mm_add_epi32 (src_temp6_4x32b, lvl_shift_4x32b);
  746|       |                    src_temp7_4x32b = _mm_add_epi32 (src_temp7_4x32b, lvl_shift_4x32b);
  747|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  748|       |                    src_temp6_4x32b  = _mm_mullo_epi32 (src_temp6_4x32b, wgt0_4x32b);
  749|       |                    src_temp7_4x32b  = _mm_mullo_epi32 (src_temp7_4x32b, wgt0_4x32b);
  750|       |
  751|       |                    /* i4_tmp += 1 << (shift - 1) */
  752|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, const_temp_4x32b);
  753|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, const_temp_4x32b);
  754|       |                    /* (i4_tmp >> shift) */
  755|       |                    src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b,  shift);
  756|       |                    src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
  757|       |
  758|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Last 4 pixels */
  759|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, const_temp_4x32b);
  760|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, const_temp_4x32b);
  761|       |                    /* (i4_tmp >> shift) */
  762|       |                    src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b,  shift);
  763|       |                    src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
  764|       |
  765|       |                    /* i4_tmp += 1 << (shift - 1) */
  766|       |                    src_temp4_4x32b = _mm_add_epi32 (src_temp4_4x32b, const_temp_4x32b);
  767|       |                    src_temp5_4x32b = _mm_add_epi32 (src_temp5_4x32b, const_temp_4x32b);
  768|       |                    /* (i4_tmp >> shift) */
  769|       |                    src_temp4_4x32b = _mm_srai_epi32(src_temp4_4x32b,  shift);
  770|       |                    src_temp5_4x32b = _mm_srai_epi32(src_temp5_4x32b,  shift);
  771|       |
  772|       |                    /* i4_tmp += 1 << (shift - 1) */
  773|       |                    src_temp6_4x32b = _mm_add_epi32 (src_temp6_4x32b, const_temp_4x32b);
  774|       |                    src_temp7_4x32b = _mm_add_epi32 (src_temp7_4x32b, const_temp_4x32b);
  775|       |                    /* (i4_tmp >> shift) */
  776|       |                    src_temp6_4x32b = _mm_srai_epi32(src_temp6_4x32b,  shift);
  777|       |                    src_temp7_4x32b = _mm_srai_epi32(src_temp7_4x32b,  shift);
  778|       |
  779|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  780|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, off0_4x32b);
  781|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, off0_4x32b);
  782|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  783|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, off0_4x32b);
  784|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, off0_4x32b);
  785|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  786|       |                    src_temp4_4x32b = _mm_add_epi32 (src_temp4_4x32b, off0_4x32b);
  787|       |                    src_temp5_4x32b = _mm_add_epi32 (src_temp5_4x32b, off0_4x32b);
  788|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  789|       |                    src_temp6_4x32b = _mm_add_epi32 (src_temp6_4x32b, off0_4x32b);
  790|       |                    src_temp7_4x32b = _mm_add_epi32 (src_temp7_4x32b, off0_4x32b);
  791|       |
  792|       |                    src_temp0_4x32b = _mm_packs_epi32 (src_temp0_4x32b, src_temp4_4x32b);
  793|       |                    src_temp1_4x32b = _mm_packs_epi32 (src_temp1_4x32b, src_temp5_4x32b);
  794|       |                    src_temp2_4x32b = _mm_packs_epi32 (src_temp2_4x32b, src_temp6_4x32b);
  795|       |                    src_temp3_4x32b = _mm_packs_epi32 (src_temp3_4x32b, src_temp7_4x32b);
  796|       |
  797|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  798|       |                    src_temp0_4x32b = _mm_packus_epi16 (src_temp0_4x32b, src_temp0_4x32b);
  799|       |                    src_temp1_4x32b = _mm_packus_epi16 (src_temp1_4x32b, src_temp1_4x32b);
  800|       |                    src_temp2_4x32b = _mm_packus_epi16 (src_temp2_4x32b, src_temp2_4x32b);
  801|       |                    src_temp3_4x32b = _mm_packus_epi16 (src_temp3_4x32b, src_temp3_4x32b);
  802|       |
  803|       |                    /* store four 8-bit output values  */
  804|       |                    _mm_storel_epi64((__m128i*)(pu1_dst+0*dst_strd), src_temp0_4x32b); /* row = 0*/
  805|       |                    _mm_storel_epi64((__m128i*)(pu1_dst+1*dst_strd), src_temp1_4x32b); /* row = 1*/
  806|       |                    _mm_storel_epi64((__m128i*)(pu1_dst+2*dst_strd), src_temp2_4x32b); /* row = 0*/
  807|       |                    _mm_storel_epi64((__m128i*)(pu1_dst+3*dst_strd), src_temp3_4x32b); /* row = 1*/
  808|       |
  809|       |                    pi2_src += 8;   /* Pointer update */
  810|       |                    pu1_dst += 8; /* Pointer update */
  811|       |
  812|       |                } /* inner loop ends here(4-output values in single iteration) */
  813|       |                pi2_src = pi2_src - wdx2 + 4*src_strd;  /* Pointer update */
  814|       |                pu1_dst = pu1_dst - wdx2 + 4*dst_strd; /* Pointer update */
  815|       |            }
  816|       |        }
  817|       |        else /* 2*wd multiple of 4 case */
  818|       |        {
  819|       |            WORD32 dst0, dst1, dst2, dst3;
  820|       |            __m128i src_temp2_4x32b,src_temp3_4x32b;
  821|       |            /*  outer for loop starts from here */
  822|       |            for(row = 0; row < ht; row +=4)
  823|       |            {
  824|       |                for(col = 0; col < wdx2; col +=4)
  825|       |                {
  826|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  827|       |                    src_temp0_4x32b = _mm_loadu_si128((__m128i*)(pi2_src));
  828|       |                    /* row = 1 */
  829|       |                    src_temp1_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+1*src_strd));
  830|       |                    /* row = 2 */
  831|       |                    src_temp2_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+2*src_strd));
  832|       |                    /* row = 3 */
  833|       |                    src_temp3_4x32b = _mm_loadu_si128((__m128i*)(pi2_src+3*src_strd));
  834|       |
  835|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  836|       |                    src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
  837|       |                    src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
  838|       |                    src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
  839|       |                    src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
  840|       |
  841|       |                    /* (pi2_src[col] + lvl_shift)*/
  842|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, lvl_shift_4x32b);
  843|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, lvl_shift_4x32b);
  844|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  845|       |                    src_temp0_4x32b  = _mm_mullo_epi32 (src_temp0_4x32b, wgt0_4x32b);
  846|       |                    src_temp1_4x32b  = _mm_mullo_epi32 (src_temp1_4x32b, wgt0_4x32b);
  847|       |
  848|       |                    /* (pi2_src[col] + lvl_shift)*/
  849|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, lvl_shift_4x32b);
  850|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, lvl_shift_4x32b);
  851|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  852|       |                    src_temp2_4x32b  = _mm_mullo_epi32 (src_temp2_4x32b, wgt0_4x32b);
  853|       |                    src_temp3_4x32b  = _mm_mullo_epi32 (src_temp3_4x32b, wgt0_4x32b);
  854|       |
  855|       |                    /* i4_tmp += 1 << (shift - 1) */
  856|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, const_temp_4x32b);
  857|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, const_temp_4x32b);
  858|       |                    /* (i4_tmp >> shift) */
  859|       |                    src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b,  shift);
  860|       |                    src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
  861|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  862|       |                    src_temp0_4x32b = _mm_add_epi32 (src_temp0_4x32b, off0_4x32b);
  863|       |                    src_temp1_4x32b = _mm_add_epi32 (src_temp1_4x32b, off0_4x32b);
  864|       |
  865|       |                    /* i4_tmp += 1 << (shift - 1) */
  866|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, const_temp_4x32b);
  867|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, const_temp_4x32b);
  868|       |                    /* (i4_tmp >> shift) */
  869|       |                    src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b,  shift);
  870|       |                    src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
  871|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  872|       |                    src_temp2_4x32b = _mm_add_epi32 (src_temp2_4x32b, off0_4x32b);
  873|       |                    src_temp3_4x32b = _mm_add_epi32 (src_temp3_4x32b, off0_4x32b);
  874|       |
  875|       |                    src_temp0_4x32b = _mm_packs_epi32 (src_temp0_4x32b, src_temp1_4x32b);
  876|       |                    src_temp2_4x32b = _mm_packs_epi32 (src_temp2_4x32b, src_temp3_4x32b);
  877|       |
  878|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  879|       |                    src_temp0_4x32b = _mm_packus_epi16 (src_temp0_4x32b, src_temp2_4x32b);
  880|       |
  881|       |                    dst0 = _mm_cvtsi128_si32(src_temp0_4x32b);
  882|       |                    /* dst row = 1 to 3 */
  883|       |                    src_temp1_4x32b = _mm_shuffle_epi32 (src_temp0_4x32b, 1);
  884|       |                    src_temp2_4x32b = _mm_shuffle_epi32 (src_temp0_4x32b, 2);
  885|       |                    src_temp3_4x32b = _mm_shuffle_epi32 (src_temp0_4x32b, 3);
  886|       |
  887|       |                    /* store four 8-bit output values  */
  888|       |                    *(WORD32 *) (&pu1_dst[0*dst_strd]) = dst0;
  889|       |
  890|       |                    dst1 = _mm_cvtsi128_si32(src_temp1_4x32b);
  891|       |                    dst2 = _mm_cvtsi128_si32(src_temp2_4x32b);
  892|       |                    dst3 = _mm_cvtsi128_si32(src_temp3_4x32b);
  893|       |                    /* row = 1 */
  894|       |                    *(WORD32 *) (&pu1_dst[1*dst_strd]) = dst1;
  895|       |                    /* row = 2 */
  896|       |                    *(WORD32 *) (&pu1_dst[2*dst_strd]) = dst2;
  897|       |                    /* row = 3 */
  898|       |                    *(WORD32 *) (&pu1_dst[3*dst_strd]) = dst3;
  899|       |
  900|       |                    pi2_src += 4;   /* Pointer update */
  901|       |                    pu1_dst += 4; /* Pointer update */
  902|       |
  903|       |                } /* inner loop ends here(4-output values in single iteration) */
  904|       |                pi2_src = pi2_src - wdx2 + 4*src_strd;  /* Pointer update */
  905|       |                pu1_dst = pu1_dst - wdx2 + 4*dst_strd; /* Pointer update */
  906|       |            }
  907|       |        }
  908|       |    }
  909|       |    else /* ht multiple of 2 case */
  910|       |#endif
  911|       |
  912|  96.7k|    {
  913|  96.7k|        if(0 == (wdx2 & 15)) /* 2*wd multiple of 168 case */
  ------------------
  |  Branch (913:12): [True: 1.61k, False: 95.1k]
  ------------------
  914|  1.61k|        {
  915|  1.61k|            __m128i src_temp2_4x32b, src_temp3_4x32b;
  916|  1.61k|            __m128i src_temp4_4x32b, src_temp5_4x32b, src_temp6_4x32b, src_temp7_4x32b;
  917|       |            /*  outer for loop starts from here */
  918|  16.8k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (918:26): [True: 15.2k, False: 1.61k]
  ------------------
  919|  15.2k|            {
  920|  52.4k|                for(col = 0; col < wdx2; col += 16)
  ------------------
  |  Branch (920:30): [True: 37.1k, False: 15.2k]
  ------------------
  921|  37.1k|                {
  922|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  923|  37.1k|                    src_temp0_4x32b = _mm_loadu_si128((__m128i *)(pi2_src));
  924|       |                    /* row = 1 */
  925|  37.1k|                    src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
  926|       |
  927|       |                    /* row = 0 */ /* Second 4 pixels */
  928|  37.1k|                    src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 4));
  929|       |                    /* row = 1 */
  930|  37.1k|                    src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd + 4));
  931|       |                    /* row = 0 */ /* Third 4 pixels */
  932|  37.1k|                    src_temp4_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 8));
  933|       |                    /* row = 1 */
  934|  37.1k|                    src_temp5_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd + 8));
  935|       |                    /* row = 0 */ /* Last 4 pixels */
  936|  37.1k|                    src_temp6_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 12));
  937|       |                    /* row = 1 */
  938|  37.1k|                    src_temp7_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd + 12));
  939|       |
  940|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
  941|  37.1k|                    src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
  942|  37.1k|                    src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
  943|       |                    /* (pi2_src[col] + lvl_shift)*/
  944|  37.1k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, lvl_shift_4x32b);
  945|  37.1k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift_4x32b);
  946|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  947|  37.1k|                    src_temp0_4x32b  = _mm_mullo_epi32(src_temp0_4x32b, wgt0_4x32b);
  948|  37.1k|                    src_temp1_4x32b  = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
  949|       |
  950|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Second 4 pixels */
  951|  37.1k|                    src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
  952|  37.1k|                    src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
  953|       |                    /* (pi2_src[col] + lvl_shift)*/
  954|  37.1k|                    src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift_4x32b);
  955|  37.1k|                    src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift_4x32b);
  956|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  957|  37.1k|                    src_temp2_4x32b  = _mm_mullo_epi32(src_temp2_4x32b, wgt0_4x32b);
  958|  37.1k|                    src_temp3_4x32b  = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
  959|       |
  960|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Third 4 pixels */
  961|  37.1k|                    src_temp4_4x32b  = _mm_cvtepi16_epi32(src_temp4_4x32b);
  962|  37.1k|                    src_temp5_4x32b  = _mm_cvtepi16_epi32(src_temp5_4x32b);
  963|       |                    /* (pi2_src[col] + lvl_shift)*/
  964|  37.1k|                    src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, lvl_shift_4x32b);
  965|  37.1k|                    src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, lvl_shift_4x32b);
  966|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  967|  37.1k|                    src_temp4_4x32b  = _mm_mullo_epi32(src_temp4_4x32b, wgt0_4x32b);
  968|  37.1k|                    src_temp5_4x32b  = _mm_mullo_epi32(src_temp5_4x32b, wgt0_4x32b);
  969|       |
  970|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Last 4 pixels */
  971|  37.1k|                    src_temp6_4x32b  = _mm_cvtepi16_epi32(src_temp6_4x32b);
  972|  37.1k|                    src_temp7_4x32b  = _mm_cvtepi16_epi32(src_temp7_4x32b);
  973|       |                    /* (pi2_src[col] + lvl_shift)*/
  974|  37.1k|                    src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, lvl_shift_4x32b);
  975|  37.1k|                    src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, lvl_shift_4x32b);
  976|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
  977|  37.1k|                    src_temp6_4x32b  = _mm_mullo_epi32(src_temp6_4x32b, wgt0_4x32b);
  978|  37.1k|                    src_temp7_4x32b  = _mm_mullo_epi32(src_temp7_4x32b, wgt0_4x32b);
  979|       |
  980|       |                    /* i4_tmp += 1 << (shift - 1) */
  981|  37.1k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, const_temp_4x32b);
  982|  37.1k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
  983|       |                    /* (i4_tmp >> shift) */
  984|  37.1k|                    src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b,  shift);
  985|  37.1k|                    src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
  986|       |
  987|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Second 4 pixels */
  988|  37.1k|                    src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, const_temp_4x32b);
  989|  37.1k|                    src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
  990|       |                    /* (i4_tmp >> shift) */
  991|  37.1k|                    src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b,  shift);
  992|  37.1k|                    src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
  993|       |
  994|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Third 4 pixels */
  995|  37.1k|                    src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, const_temp_4x32b);
  996|  37.1k|                    src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, const_temp_4x32b);
  997|       |                    /* (i4_tmp >> shift) */
  998|  37.1k|                    src_temp4_4x32b = _mm_srai_epi32(src_temp4_4x32b,  shift);
  999|  37.1k|                    src_temp5_4x32b = _mm_srai_epi32(src_temp5_4x32b,  shift);
 1000|       |
 1001|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Last 4 pixels */
 1002|  37.1k|                    src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, const_temp_4x32b);
 1003|  37.1k|                    src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, const_temp_4x32b);
 1004|       |                    /* (i4_tmp >> shift) */
 1005|  37.1k|                    src_temp6_4x32b = _mm_srai_epi32(src_temp6_4x32b,  shift);
 1006|  37.1k|                    src_temp7_4x32b = _mm_srai_epi32(src_temp7_4x32b,  shift);
 1007|       |
 1008|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
 1009|  37.1k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, off0_4x32b);
 1010|  37.1k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, off0_4x32b);
 1011|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Second 4 pixels */
 1012|  37.1k|                    src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, off0_4x32b);
 1013|  37.1k|                    src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, off0_4x32b);
 1014|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Third 4 pixels */
 1015|  37.1k|                    src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, off0_4x32b);
 1016|  37.1k|                    src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, off0_4x32b);
 1017|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
 1018|  37.1k|                    src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, off0_4x32b);
 1019|  37.1k|                    src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, off0_4x32b);
 1020|       |
 1021|  37.1k|                    src_temp0_4x32b = _mm_packs_epi32(src_temp0_4x32b, src_temp2_4x32b);
 1022|  37.1k|                    src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp3_4x32b);
 1023|  37.1k|                    src_temp4_4x32b = _mm_packs_epi32(src_temp4_4x32b, src_temp6_4x32b);
 1024|  37.1k|                    src_temp5_4x32b = _mm_packs_epi32(src_temp5_4x32b, src_temp7_4x32b);
 1025|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
 1026|  37.1k|                    src_temp0_4x32b = _mm_packus_epi16(src_temp0_4x32b, src_temp4_4x32b);
 1027|  37.1k|                    src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp5_4x32b);
 1028|       |
 1029|       |                    /* store 16 8-bit output values  */
 1030|  37.1k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 0 * dst_strd), src_temp0_4x32b); /* row = 0*/
 1031|  37.1k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), src_temp1_4x32b); /* row = 1*/
 1032|       |
 1033|  37.1k|                    pi2_src += 16;  /* Pointer update */
 1034|  37.1k|                    pu1_dst += 16; /* Pointer update */
 1035|       |
 1036|  37.1k|                } /* inner loop ends here(4-output values in single iteration) */
 1037|  15.2k|                pi2_src = pi2_src - wdx2 + 2 * src_strd;  /* Pointer update */
 1038|  15.2k|                pu1_dst = pu1_dst - wdx2 + 2 * dst_strd; /* Pointer update */
 1039|  15.2k|            }
 1040|  1.61k|        }
 1041|  95.1k|        else if(0 == (wdx2 & 7)) /* 2*wd multiple of 8 case */
  ------------------
  |  Branch (1041:17): [True: 94.6k, False: 524]
  ------------------
 1042|  94.6k|        {
 1043|  94.6k|            __m128i src_temp2_4x32b, src_temp3_4x32b;
 1044|       |            /*  outer for loop starts from here */
 1045|   283k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1045:26): [True: 188k, False: 94.6k]
  ------------------
 1046|   188k|            {
 1047|   378k|                for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (1047:30): [True: 189k, False: 188k]
  ------------------
 1048|   189k|                {
 1049|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1050|   189k|                    src_temp0_4x32b = _mm_loadu_si128((__m128i *)(pi2_src));
 1051|       |                    /* row = 1 */
 1052|   189k|                    src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
 1053|       |
 1054|       |                    /* row = 0 */ /* Last 4 pixels */
 1055|   189k|                    src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + 4));
 1056|       |                    /* row = 1 */
 1057|   189k|                    src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd + 4));
 1058|       |
 1059|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
 1060|   189k|                    src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
 1061|   189k|                    src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
 1062|       |                    /* (pi2_src[col] + lvl_shift)*/
 1063|   189k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, lvl_shift_4x32b);
 1064|   189k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift_4x32b);
 1065|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
 1066|   189k|                    src_temp0_4x32b  = _mm_mullo_epi32(src_temp0_4x32b, wgt0_4x32b);
 1067|   189k|                    src_temp1_4x32b  = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
 1068|       |
 1069|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */ /* Last 4 pixels */
 1070|   189k|                    src_temp2_4x32b  = _mm_cvtepi16_epi32(src_temp2_4x32b);
 1071|   189k|                    src_temp3_4x32b  = _mm_cvtepi16_epi32(src_temp3_4x32b);
 1072|       |                    /* (pi2_src[col] + lvl_shift)*/
 1073|   189k|                    src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift_4x32b);
 1074|   189k|                    src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift_4x32b);
 1075|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
 1076|   189k|                    src_temp2_4x32b  = _mm_mullo_epi32(src_temp2_4x32b, wgt0_4x32b);
 1077|   189k|                    src_temp3_4x32b  = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
 1078|       |
 1079|       |                    /* i4_tmp += 1 << (shift - 1) */
 1080|   189k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, const_temp_4x32b);
 1081|   189k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
 1082|       |                    /* (i4_tmp >> shift) */
 1083|   189k|                    src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b,  shift);
 1084|   189k|                    src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
 1085|       |
 1086|       |                    /* i4_tmp += 1 << (shift - 1) */ /* Last 4 pixels */
 1087|   189k|                    src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, const_temp_4x32b);
 1088|   189k|                    src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
 1089|       |                    /* (i4_tmp >> shift) */
 1090|   189k|                    src_temp2_4x32b = _mm_srai_epi32(src_temp2_4x32b,  shift);
 1091|   189k|                    src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
 1092|       |
 1093|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
 1094|   189k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, off0_4x32b);
 1095|   189k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, off0_4x32b);
 1096|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
 1097|   189k|                    src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, off0_4x32b);
 1098|   189k|                    src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, off0_4x32b);
 1099|       |
 1100|   189k|                    src_temp0_4x32b = _mm_packs_epi32(src_temp0_4x32b, src_temp2_4x32b);
 1101|   189k|                    src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp3_4x32b);
 1102|       |
 1103|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
 1104|   189k|                    src_temp0_4x32b = _mm_packus_epi16(src_temp0_4x32b, src_temp0_4x32b);
 1105|   189k|                    src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp1_4x32b);
 1106|       |
 1107|       |                    /* store four 8-bit output values  */
 1108|   189k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_temp0_4x32b); /* row = 0*/
 1109|   189k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_temp1_4x32b); /* row = 1*/
 1110|       |
 1111|   189k|                    pi2_src += 8;   /* Pointer update */
 1112|   189k|                    pu1_dst += 8; /* Pointer update */
 1113|       |
 1114|   189k|                } /* inner loop ends here(4-output values in single iteration) */
 1115|   188k|                pi2_src = pi2_src - wdx2 + 2 * src_strd;  /* Pointer update */
 1116|   188k|                pu1_dst = pu1_dst - wdx2 + 2 * dst_strd; /* Pointer update */
 1117|   188k|            }
 1118|  94.6k|        }
 1119|    524|        else /* 2*wd multiple of 4 case */
 1120|    524|        {
 1121|    524|            WORD32 dst0, dst1;
 1122|       |            /*  outer for loop starts from here */
 1123|  1.65k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1123:26): [True: 1.12k, False: 524]
  ------------------
 1124|  1.12k|            {
 1125|  2.41k|                for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (1125:30): [True: 1.28k, False: 1.12k]
  ------------------
 1126|  1.28k|                {
 1127|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1128|  1.28k|                    src_temp0_4x32b = _mm_loadu_si128((__m128i *)(pi2_src));
 1129|       |                    /* row = 1 */
 1130|  1.28k|                    src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
 1131|       |
 1132|       |                    /* considering pix. 4:0 by converting 16-into 32 bit */
 1133|  1.28k|                    src_temp0_4x32b  = _mm_cvtepi16_epi32(src_temp0_4x32b);
 1134|  1.28k|                    src_temp1_4x32b  = _mm_cvtepi16_epi32(src_temp1_4x32b);
 1135|       |
 1136|       |                    /* (pi2_src[col] + lvl_shift)*/
 1137|  1.28k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, lvl_shift_4x32b);
 1138|  1.28k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift_4x32b);
 1139|       |
 1140|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0*/
 1141|  1.28k|                    src_temp0_4x32b  = _mm_mullo_epi32(src_temp0_4x32b, wgt0_4x32b);
 1142|  1.28k|                    src_temp1_4x32b  = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
 1143|       |
 1144|       |                    /* i4_tmp += 1 << (shift - 1) */
 1145|  1.28k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, const_temp_4x32b);
 1146|  1.28k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
 1147|       |
 1148|       |                    /* (i4_tmp >> shift) */
 1149|  1.28k|                    src_temp0_4x32b = _mm_srai_epi32(src_temp0_4x32b,  shift);
 1150|  1.28k|                    src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
 1151|       |
 1152|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
 1153|  1.28k|                    src_temp0_4x32b = _mm_add_epi32(src_temp0_4x32b, off0_4x32b);
 1154|  1.28k|                    src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, off0_4x32b);
 1155|       |
 1156|  1.28k|                    src_temp0_4x32b = _mm_packs_epi32(src_temp0_4x32b, src_temp1_4x32b);
 1157|       |
 1158|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
 1159|  1.28k|                    src_temp0_4x32b = _mm_packus_epi16(src_temp0_4x32b, src_temp0_4x32b);
 1160|       |
 1161|  1.28k|                    dst0 = _mm_cvtsi128_si32(src_temp0_4x32b);
 1162|       |                    /* dst row = 1 to 3 */
 1163|  1.28k|                    src_temp1_4x32b = _mm_shuffle_epi32(src_temp0_4x32b, 1);
 1164|       |
 1165|       |                    /* store four 8-bit output values  */
 1166|  1.28k|                    *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 1167|       |
 1168|  1.28k|                    dst1 = _mm_cvtsi128_si32(src_temp1_4x32b);
 1169|       |                    /* row = 1 */
 1170|  1.28k|                    *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 1171|       |
 1172|  1.28k|                    pi2_src += 4;   /* Pointer update */
 1173|  1.28k|                    pu1_dst += 4; /* Pointer update */
 1174|       |
 1175|  1.28k|                } /* inner loop ends here(4-output values in single iteration) */
 1176|  1.12k|                pi2_src = pi2_src - wdx2 + 2 * src_strd;  /* Pointer update */
 1177|  1.12k|                pu1_dst = pu1_dst - wdx2 + 2 * dst_strd; /* Pointer update */
 1178|  1.12k|            }
 1179|    524|        }
 1180|  96.7k|    }
 1181|  96.7k|}
ihevc_weighted_pred_bi_sse42:
 1262|   123k|{
 1263|   123k|    WORD32 row, col, temp;
 1264|       |
 1265|   123k|    __m128i src_temp1_4x32b, src_temp2_4x32b, src_temp3_4x32b, src_temp4_4x32b;
 1266|   123k|    __m128i const_temp_4x32b, lvl_shift1_4x32b, lvl_shift2_4x32b, wgt0_4x32b, wgt1_4x32b;
 1267|       |
 1268|       |
 1269|   123k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|   123k|#define ASSERT(x) assert((x))
  ------------------
 1270|   123k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   123k|#define ASSERT(x) assert((x))
  ------------------
 1271|       |
 1272|   123k|    temp = (off0 + off1 + 1) << (shift - 1);
 1273|       |
 1274|       |    // seting values in register
 1275|   123k|    const_temp_4x32b = _mm_set1_epi32(temp);
 1276|   123k|    lvl_shift1_4x32b = _mm_set1_epi32(lvl_shift1);
 1277|   123k|    lvl_shift2_4x32b = _mm_set1_epi32(lvl_shift2);
 1278|   123k|    wgt0_4x32b = _mm_set1_epi32(wgt0);
 1279|   123k|    wgt1_4x32b = _mm_set1_epi32(wgt1);
 1280|       |
 1281|   123k|    if(0 == (wd & 7)) /* wd multiple of 8 case */
  ------------------
  |  Branch (1281:8): [True: 123k, False: 63]
  ------------------
 1282|   123k|    {
 1283|   123k|        __m128i src_temp5_4x32b, src_temp6_4x32b, src_temp7_4x32b, src_temp8_4x32b;
 1284|       |        /*  outer for loop starts from here */
 1285|   616k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1285:22): [True: 492k, False: 123k]
  ------------------
 1286|   492k|        {
 1287|   989k|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (1287:26): [True: 496k, False: 492k]
  ------------------
 1288|   496k|            {
 1289|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1290|   496k|                src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1)); /* row = 0 */
 1291|   496k|                src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2)); /* row = 0 */
 1292|   496k|                src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
 1293|   496k|                src_temp4_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
 1294|       |                /* Next 4 pixels */
 1295|   496k|                src_temp5_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 4)); /* row = 0 */
 1296|   496k|                src_temp6_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 4)); /* row = 0 */
 1297|   496k|                src_temp7_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1 + 4)); /* row = 1 */
 1298|   496k|                src_temp8_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2 + 4)); /* row = 1 */
 1299|       |
 1300|       |                /* considering pix. 4:0 by converting 16-into 32 bit */
 1301|   496k|                src_temp1_4x32b = _mm_cvtepi16_epi32(src_temp1_4x32b);
 1302|   496k|                src_temp2_4x32b = _mm_cvtepi16_epi32(src_temp2_4x32b);
 1303|       |                /* (pi2_src1[col] + lvl_shift1) */
 1304|   496k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift1_4x32b);
 1305|       |                /* (pi2_src2[col] + lvl_shift2) */
 1306|   496k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift2_4x32b);
 1307|       |                /*i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0 */
 1308|   496k|                src_temp1_4x32b = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
 1309|       |                /*(pi2_src2[col] + lvl_shift2) * wgt1 */
 1310|   496k|                src_temp2_4x32b = _mm_mullo_epi32(src_temp2_4x32b, wgt1_4x32b);
 1311|       |
 1312|   496k|                src_temp3_4x32b = _mm_cvtepi16_epi32(src_temp3_4x32b);
 1313|   496k|                src_temp4_4x32b = _mm_cvtepi16_epi32(src_temp4_4x32b);
 1314|   496k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift1_4x32b);
 1315|   496k|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, lvl_shift2_4x32b);
 1316|   496k|                src_temp3_4x32b = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
 1317|   496k|                src_temp4_4x32b = _mm_mullo_epi32(src_temp4_4x32b, wgt1_4x32b);
 1318|       |
 1319|       |                /* Next 4 Pixels */
 1320|   496k|                src_temp5_4x32b = _mm_cvtepi16_epi32(src_temp5_4x32b);
 1321|   496k|                src_temp6_4x32b = _mm_cvtepi16_epi32(src_temp6_4x32b);
 1322|   496k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, lvl_shift1_4x32b);
 1323|   496k|                src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, lvl_shift2_4x32b);
 1324|   496k|                src_temp5_4x32b = _mm_mullo_epi32(src_temp5_4x32b, wgt0_4x32b);
 1325|   496k|                src_temp6_4x32b = _mm_mullo_epi32(src_temp6_4x32b, wgt1_4x32b);
 1326|   496k|                src_temp7_4x32b = _mm_cvtepi16_epi32(src_temp7_4x32b);
 1327|   496k|                src_temp8_4x32b = _mm_cvtepi16_epi32(src_temp8_4x32b);
 1328|   496k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, lvl_shift1_4x32b);
 1329|   496k|                src_temp8_4x32b = _mm_add_epi32(src_temp8_4x32b, lvl_shift2_4x32b);
 1330|   496k|                src_temp7_4x32b = _mm_mullo_epi32(src_temp7_4x32b, wgt0_4x32b);
 1331|   496k|                src_temp8_4x32b = _mm_mullo_epi32(src_temp8_4x32b, wgt1_4x32b);
 1332|       |
 1333|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
 1334|   496k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, src_temp2_4x32b);
 1335|   496k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, src_temp4_4x32b);
 1336|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
 1337|   496k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
 1338|   496k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
 1339|       |                /* (i4_tmp >> shift) */
 1340|   496k|                src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
 1341|   496k|                src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
 1342|       |
 1343|       |                /* Next 4 Pixels */
 1344|   496k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, src_temp6_4x32b);
 1345|   496k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, src_temp8_4x32b);
 1346|   496k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, const_temp_4x32b);
 1347|   496k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, const_temp_4x32b);
 1348|   496k|                src_temp5_4x32b = _mm_srai_epi32(src_temp5_4x32b,  shift);
 1349|   496k|                src_temp7_4x32b = _mm_srai_epi32(src_temp7_4x32b,  shift);
 1350|       |
 1351|   496k|                src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp5_4x32b);
 1352|   496k|                src_temp3_4x32b = _mm_packs_epi32(src_temp3_4x32b, src_temp7_4x32b);
 1353|       |
 1354|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1355|   496k|                src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp1_4x32b);
 1356|   496k|                src_temp3_4x32b = _mm_packus_epi16(src_temp3_4x32b, src_temp3_4x32b);
 1357|       |
 1358|       |                /* store four 8-bit output values  */
 1359|   496k|                _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_temp1_4x32b); /* row = 0*/
 1360|   496k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_temp3_4x32b); /* row = 1*/
 1361|       |
 1362|   496k|                pi2_src1 += 8;  /* Pointer update */
 1363|   496k|                pi2_src2 += 8;  /* Pointer update */
 1364|   496k|                pu1_dst  += 8;  /* Pointer update */
 1365|       |
 1366|   496k|            } /* inner loop ends here(4-output values in single iteration) */
 1367|       |
 1368|   492k|            pi2_src1 = pi2_src1 - wd + 2 * src_strd1;  /* Pointer update */
 1369|   492k|            pi2_src2 = pi2_src2 - wd + 2 * src_strd2;  /* Pointer update */
 1370|   492k|            pu1_dst  = pu1_dst  - wd + 2 * dst_strd;   /* Pointer update */
 1371|       |
 1372|   492k|        } /* outer loop ends */
 1373|   123k|    }
 1374|     63|    else /* wd multiple of 4 case */
 1375|     63|    {
 1376|     63|        WORD32 dst0, dst1;
 1377|       |        /*  outer for loop starts from here */
 1378|     95|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1378:22): [True: 32, False: 63]
  ------------------
 1379|     32|        {
 1380|     96|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1380:26): [True: 64, False: 32]
  ------------------
 1381|     64|            {
 1382|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1383|     64|                src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1)); /* row = 0 */
 1384|     64|                src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2)); /* row = 0 */
 1385|     64|                src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
 1386|     64|                src_temp4_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
 1387|       |
 1388|       |                /* considering pix. 4:0 by converting 16-into 32 bit */
 1389|     64|                src_temp1_4x32b = _mm_cvtepi16_epi32(src_temp1_4x32b);
 1390|     64|                src_temp2_4x32b = _mm_cvtepi16_epi32(src_temp2_4x32b);
 1391|       |                /* (pi2_src1[col] + lvl_shift1) */
 1392|     64|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift1_4x32b);
 1393|       |                /* (pi2_src2[col] + lvl_shift2) */
 1394|     64|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift2_4x32b);
 1395|       |                /*i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0 */
 1396|     64|                src_temp1_4x32b = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
 1397|       |                /*(pi2_src2[col] + lvl_shift2) * wgt1 */
 1398|     64|                src_temp2_4x32b = _mm_mullo_epi32(src_temp2_4x32b, wgt1_4x32b);
 1399|       |
 1400|     64|                src_temp3_4x32b = _mm_cvtepi16_epi32(src_temp3_4x32b);
 1401|     64|                src_temp4_4x32b = _mm_cvtepi16_epi32(src_temp4_4x32b);
 1402|     64|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift1_4x32b);
 1403|     64|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, lvl_shift2_4x32b);
 1404|     64|                src_temp3_4x32b = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
 1405|     64|                src_temp4_4x32b = _mm_mullo_epi32(src_temp4_4x32b, wgt1_4x32b);
 1406|       |
 1407|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
 1408|     64|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, src_temp2_4x32b);
 1409|     64|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, src_temp4_4x32b);
 1410|       |
 1411|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
 1412|     64|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
 1413|     64|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
 1414|       |
 1415|       |                /* (i4_tmp >> shift) */
 1416|     64|                src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
 1417|     64|                src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
 1418|       |
 1419|     64|                src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp3_4x32b);
 1420|       |
 1421|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1422|     64|                src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp1_4x32b);
 1423|       |
 1424|     64|                dst0 = _mm_cvtsi128_si32(src_temp1_4x32b);
 1425|       |
 1426|       |                /* dst row = 1 to 3 */
 1427|     64|                src_temp2_4x32b = _mm_shuffle_epi32(src_temp1_4x32b, 1);
 1428|       |
 1429|       |                /* store four 8-bit output values  */
 1430|     64|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 1431|       |
 1432|     64|                dst1 = _mm_cvtsi128_si32(src_temp2_4x32b);
 1433|       |
 1434|       |                /* row = 1 to 3 */
 1435|     64|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 1436|       |
 1437|     64|                pi2_src1 += 4;  /* Pointer update */
 1438|     64|                pi2_src2 += 4;  /* Pointer update */
 1439|     64|                pu1_dst  += 4;  /* Pointer update */
 1440|       |
 1441|     64|            } /* inner loop ends here(4-output values in single iteration) */
 1442|       |
 1443|     32|            pi2_src1 = pi2_src1 - wd + 2 * src_strd1;  /* Pointer update */
 1444|     32|            pi2_src2 = pi2_src2 - wd + 2 * src_strd2;  /* Pointer update */
 1445|     32|            pu1_dst  = pu1_dst  - wd + 2 * dst_strd;   /* Pointer update */
 1446|       |
 1447|     32|        } /* outer loop ends */
 1448|     63|    }
 1449|       |
 1450|   123k|}
ihevc_weighted_pred_chroma_bi_sse42:
 1535|   123k|{
 1536|   123k|    WORD32 row, col, temp1, temp2;
 1537|   123k|    WORD32 wdx2;
 1538|       |
 1539|   123k|    __m128i src_temp1_4x32b, src_temp2_4x32b, src_temp3_4x32b, src_temp4_4x32b;
 1540|   123k|    __m128i const_temp_4x32b, lvl_shift1_4x32b, lvl_shift2_4x32b, wgt0_4x32b, wgt1_4x32b;
 1541|       |
 1542|       |
 1543|   123k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   123k|#define ASSERT(x) assert((x))
  ------------------
 1544|   123k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   123k|#define ASSERT(x) assert((x))
  ------------------
 1545|       |
 1546|   123k|    temp1 = (off0_cb + off1_cb + 1) << (shift - 1);
 1547|   123k|    temp2 = (off0_cr + off1_cr + 1) << (shift - 1);
 1548|       |
 1549|       |    // seting values in register
 1550|   123k|    const_temp_4x32b = _mm_set_epi32(temp2, temp1, temp2, temp1);
 1551|   123k|    lvl_shift1_4x32b = _mm_set1_epi32(lvl_shift1);
 1552|   123k|    lvl_shift2_4x32b = _mm_set1_epi32(lvl_shift2);
 1553|   123k|    wgt0_4x32b = _mm_set_epi32(wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb);
 1554|   123k|    wgt1_4x32b = _mm_set_epi32(wgt1_cr, wgt1_cb, wgt1_cr, wgt1_cb);
 1555|       |
 1556|   123k|    wdx2 = wd * 2;
 1557|       |
 1558|   123k|    if(0 == (wdx2 & 7)) /* wdx2 multiple of 8 case */
  ------------------
  |  Branch (1558:8): [True: 123k, False: 58]
  ------------------
 1559|   123k|    {
 1560|   123k|        __m128i src_temp5_4x32b, src_temp6_4x32b, src_temp7_4x32b, src_temp8_4x32b;
 1561|       |        /*  outer for loop starts from here */
 1562|   370k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1562:22): [True: 246k, False: 123k]
  ------------------
 1563|   246k|        {
 1564|   495k|            for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (1564:26): [True: 248k, False: 246k]
  ------------------
 1565|   248k|            {
 1566|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1567|   248k|                src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1)); /* row = 0 */
 1568|   248k|                src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2)); /* row = 0 */
 1569|   248k|                src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
 1570|   248k|                src_temp4_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
 1571|       |                /* Next 4 pixels */
 1572|   248k|                src_temp5_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 4)); /* row = 0 */
 1573|   248k|                src_temp6_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 4)); /* row = 0 */
 1574|   248k|                src_temp7_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1 + 4)); /* row = 1 */
 1575|   248k|                src_temp8_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2 + 4)); /* row = 1 */
 1576|       |
 1577|       |                /* considering pix. 4:0 by converting 16-into 32 bit */
 1578|   248k|                src_temp1_4x32b = _mm_cvtepi16_epi32(src_temp1_4x32b);
 1579|   248k|                src_temp2_4x32b = _mm_cvtepi16_epi32(src_temp2_4x32b);
 1580|       |                /* (pi2_src1[col] + lvl_shift1) */
 1581|   248k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift1_4x32b);
 1582|       |                /* (pi2_src2[col] + lvl_shift2) */
 1583|   248k|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift2_4x32b);
 1584|       |                /*i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0 */
 1585|   248k|                src_temp1_4x32b = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
 1586|       |                /*(pi2_src2[col] + lvl_shift2) * wgt1 */
 1587|   248k|                src_temp2_4x32b = _mm_mullo_epi32(src_temp2_4x32b, wgt1_4x32b);
 1588|       |
 1589|   248k|                src_temp3_4x32b = _mm_cvtepi16_epi32(src_temp3_4x32b);
 1590|   248k|                src_temp4_4x32b = _mm_cvtepi16_epi32(src_temp4_4x32b);
 1591|   248k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift1_4x32b);
 1592|   248k|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, lvl_shift2_4x32b);
 1593|   248k|                src_temp3_4x32b = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
 1594|   248k|                src_temp4_4x32b = _mm_mullo_epi32(src_temp4_4x32b, wgt1_4x32b);
 1595|       |
 1596|       |                /* Next 4 Pixels */
 1597|   248k|                src_temp5_4x32b = _mm_cvtepi16_epi32(src_temp5_4x32b);
 1598|   248k|                src_temp6_4x32b = _mm_cvtepi16_epi32(src_temp6_4x32b);
 1599|   248k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, lvl_shift1_4x32b);
 1600|   248k|                src_temp6_4x32b = _mm_add_epi32(src_temp6_4x32b, lvl_shift2_4x32b);
 1601|   248k|                src_temp5_4x32b = _mm_mullo_epi32(src_temp5_4x32b, wgt0_4x32b);
 1602|   248k|                src_temp6_4x32b = _mm_mullo_epi32(src_temp6_4x32b, wgt1_4x32b);
 1603|   248k|                src_temp7_4x32b = _mm_cvtepi16_epi32(src_temp7_4x32b);
 1604|   248k|                src_temp8_4x32b = _mm_cvtepi16_epi32(src_temp8_4x32b);
 1605|   248k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, lvl_shift1_4x32b);
 1606|   248k|                src_temp8_4x32b = _mm_add_epi32(src_temp8_4x32b, lvl_shift2_4x32b);
 1607|   248k|                src_temp7_4x32b = _mm_mullo_epi32(src_temp7_4x32b, wgt0_4x32b);
 1608|   248k|                src_temp8_4x32b = _mm_mullo_epi32(src_temp8_4x32b, wgt1_4x32b);
 1609|       |
 1610|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
 1611|   248k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, src_temp2_4x32b);
 1612|   248k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, src_temp4_4x32b);
 1613|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
 1614|   248k|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
 1615|   248k|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
 1616|       |                /* (i4_tmp >> shift) */
 1617|   248k|                src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
 1618|   248k|                src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
 1619|       |
 1620|       |                /* Next 4 Pixels */
 1621|   248k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, src_temp6_4x32b);
 1622|   248k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, src_temp8_4x32b);
 1623|   248k|                src_temp5_4x32b = _mm_add_epi32(src_temp5_4x32b, const_temp_4x32b);
 1624|   248k|                src_temp7_4x32b = _mm_add_epi32(src_temp7_4x32b, const_temp_4x32b);
 1625|   248k|                src_temp5_4x32b = _mm_srai_epi32(src_temp5_4x32b,  shift);
 1626|   248k|                src_temp7_4x32b = _mm_srai_epi32(src_temp7_4x32b,  shift);
 1627|       |
 1628|   248k|                src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp5_4x32b);
 1629|   248k|                src_temp3_4x32b = _mm_packs_epi32(src_temp3_4x32b, src_temp7_4x32b);
 1630|       |
 1631|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1632|   248k|                src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp1_4x32b);
 1633|   248k|                src_temp3_4x32b = _mm_packus_epi16(src_temp3_4x32b, src_temp3_4x32b);
 1634|       |
 1635|       |                /* store four 8-bit output values  */
 1636|   248k|                _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_temp1_4x32b); /* row = 0*/
 1637|   248k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_temp3_4x32b); /* row = 1*/
 1638|       |
 1639|   248k|                pi2_src1 += 8;  /* Pointer update */
 1640|   248k|                pi2_src2 += 8;  /* Pointer update */
 1641|   248k|                pu1_dst  += 8;  /* Pointer update */
 1642|       |
 1643|   248k|            } /* inner loop ends here(4-output values in single iteration) */
 1644|       |
 1645|   246k|            pi2_src1 = pi2_src1 - wdx2 + 2 * src_strd1;    /* Pointer update */
 1646|   246k|            pi2_src2 = pi2_src2 - wdx2 + 2 * src_strd2;    /* Pointer update */
 1647|   246k|            pu1_dst  = pu1_dst  - wdx2 + 2 * dst_strd;   /* Pointer update */
 1648|       |
 1649|   246k|        } /* outer loop ends */
 1650|   123k|    }
 1651|     58|    else /* wdx2 multiple of 4 case */
 1652|     58|    {
 1653|     58|        WORD32 dst0, dst1;
 1654|       |        /*  outer for loop starts from here */
 1655|     74|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1655:22): [True: 16, False: 58]
  ------------------
 1656|     16|        {
 1657|     48|            for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (1657:26): [True: 32, False: 16]
  ------------------
 1658|     32|            {
 1659|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1660|     32|                src_temp1_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1)); /* row = 0 */
 1661|     32|                src_temp2_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2)); /* row = 0 */
 1662|     32|                src_temp3_4x32b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
 1663|     32|                src_temp4_4x32b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
 1664|       |
 1665|       |                /* considering pix. 4:0 by converting 16-into 32 bit */
 1666|     32|                src_temp1_4x32b = _mm_cvtepi16_epi32(src_temp1_4x32b);
 1667|     32|                src_temp2_4x32b = _mm_cvtepi16_epi32(src_temp2_4x32b);
 1668|       |                /* (pi2_src1[col] + lvl_shift1) */
 1669|     32|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, lvl_shift1_4x32b);
 1670|       |                /* (pi2_src2[col] + lvl_shift2) */
 1671|     32|                src_temp2_4x32b = _mm_add_epi32(src_temp2_4x32b, lvl_shift2_4x32b);
 1672|       |                /*i4_tmp = (pi2_src1[col] + lvl_shift1) * wgt0 */
 1673|     32|                src_temp1_4x32b = _mm_mullo_epi32(src_temp1_4x32b, wgt0_4x32b);
 1674|       |                /*(pi2_src2[col] + lvl_shift2) * wgt1 */
 1675|     32|                src_temp2_4x32b = _mm_mullo_epi32(src_temp2_4x32b, wgt1_4x32b);
 1676|       |
 1677|     32|                src_temp3_4x32b = _mm_cvtepi16_epi32(src_temp3_4x32b);
 1678|     32|                src_temp4_4x32b = _mm_cvtepi16_epi32(src_temp4_4x32b);
 1679|     32|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, lvl_shift1_4x32b);
 1680|     32|                src_temp4_4x32b = _mm_add_epi32(src_temp4_4x32b, lvl_shift2_4x32b);
 1681|     32|                src_temp3_4x32b = _mm_mullo_epi32(src_temp3_4x32b, wgt0_4x32b);
 1682|     32|                src_temp4_4x32b = _mm_mullo_epi32(src_temp4_4x32b, wgt1_4x32b);
 1683|       |
 1684|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
 1685|     32|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, src_temp2_4x32b);
 1686|     32|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, src_temp4_4x32b);
 1687|       |
 1688|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
 1689|     32|                src_temp1_4x32b = _mm_add_epi32(src_temp1_4x32b, const_temp_4x32b);
 1690|     32|                src_temp3_4x32b = _mm_add_epi32(src_temp3_4x32b, const_temp_4x32b);
 1691|       |
 1692|       |                /* (i4_tmp >> shift) */
 1693|     32|                src_temp1_4x32b = _mm_srai_epi32(src_temp1_4x32b,  shift);
 1694|     32|                src_temp3_4x32b = _mm_srai_epi32(src_temp3_4x32b,  shift);
 1695|       |
 1696|     32|                src_temp1_4x32b = _mm_packs_epi32(src_temp1_4x32b, src_temp3_4x32b);
 1697|       |
 1698|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1699|     32|                src_temp1_4x32b = _mm_packus_epi16(src_temp1_4x32b, src_temp1_4x32b);
 1700|       |
 1701|     32|                dst0 = _mm_cvtsi128_si32(src_temp1_4x32b);
 1702|       |
 1703|       |                /* dst row = 1 to 3 */
 1704|     32|                src_temp2_4x32b = _mm_shuffle_epi32(src_temp1_4x32b, 1);
 1705|       |
 1706|       |                /* store four 8-bit output values  */
 1707|     32|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 1708|       |
 1709|     32|                dst1 = _mm_cvtsi128_si32(src_temp2_4x32b);
 1710|       |
 1711|       |                /* row = 1 to 3 */
 1712|     32|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 1713|       |
 1714|     32|                pi2_src1 += 4;  /* Pointer update */
 1715|     32|                pi2_src2 += 4;  /* Pointer update */
 1716|     32|                pu1_dst  += 4;  /* Pointer update */
 1717|       |
 1718|     32|            } /* inner loop ends here(4-output values in single iteration) */
 1719|       |
 1720|     16|            pi2_src1 = pi2_src1 - wdx2 + 2 * src_strd1;    /* Pointer update */
 1721|     16|            pi2_src2 = pi2_src2 - wdx2 + 2 * src_strd2;    /* Pointer update */
 1722|     16|            pu1_dst  = pu1_dst  - wdx2 + 2 * dst_strd;   /* Pointer update */
 1723|     16|        }
 1724|     58|    }
 1725|       |
 1726|   123k|}
ihevc_weighted_pred_bi_default_sse42:
 1791|   260k|{
 1792|   260k|    WORD32 row, col, temp;
 1793|   260k|    WORD32 shift;
 1794|       |
 1795|   260k|    __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1796|   260k|    __m128i const_temp_8x16b, lvl_shift1_8x16b, lvl_shift2_8x16b;
 1797|   260k|    __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1798|       |
 1799|   260k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|   260k|#define ASSERT(x) assert((x))
  ------------------
 1800|   260k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|   260k|#define ASSERT(x) assert((x))
  ------------------
 1801|       |
 1802|   260k|    shift = SHIFT_14_MINUS_BIT_DEPTH + 1;
  ------------------
  |  |   41|   260k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   260k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1803|   260k|    temp = 1 << (shift - 1);
 1804|       |
 1805|       |    // seting values in register
 1806|   260k|    lvl_shift1_8x16b = _mm_set1_epi16(lvl_shift1);
 1807|   260k|    lvl_shift2_8x16b = _mm_set1_epi16(lvl_shift2);
 1808|   260k|    const_temp_8x16b = _mm_set1_epi16(temp);
 1809|       |
 1810|   260k|    lvl_shift1_8x16b = _mm_adds_epi16(lvl_shift1_8x16b, lvl_shift2_8x16b);
 1811|   260k|    lvl_shift1_8x16b = _mm_adds_epi16(lvl_shift1_8x16b, const_temp_8x16b);
 1812|       |
 1813|   260k|    if(0 == (ht & 3)) /* ht multiple of 4*/
  ------------------
  |  Branch (1813:8): [True: 260k, False: 646]
  ------------------
 1814|   260k|    {
 1815|   260k|        if(0 == (wd & 15)) /* wd multiple of 16 case */
  ------------------
  |  Branch (1815:12): [True: 6.31k, False: 253k]
  ------------------
 1816|  6.31k|        {
 1817|  6.31k|            __m128i src_temp9_8x16b,  src_temp10_8x16b, src_temp11_8x16b, src_temp12_8x16b;
 1818|  6.31k|            __m128i src_temp13_8x16b, src_temp14_8x16b, src_temp15_8x16b, src_temp16_8x16b;
 1819|       |            /*  outer for loop starts from here */
 1820|  43.0k|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (1820:26): [True: 36.7k, False: 6.31k]
  ------------------
 1821|  36.7k|            {
 1822|  98.6k|                for(col = 0; col < wd; col += 16)
  ------------------
  |  Branch (1822:30): [True: 61.9k, False: 36.7k]
  ------------------
 1823|  61.9k|                {
 1824|       |                    /*load 8 pixel values */ /* First 8 Values */
 1825|  61.9k|                    src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1));
 1826|  61.9k|                    src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2));
 1827|       |                    /* row = 1 */
 1828|  61.9k|                    src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + src_strd1));
 1829|  61.9k|                    src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + src_strd2));
 1830|       |                    /* row = 2 */
 1831|  61.9k|                    src_temp5_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 2 * src_strd1));
 1832|  61.9k|                    src_temp6_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 2 * src_strd2));
 1833|       |                    /* row = 3 */
 1834|  61.9k|                    src_temp7_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 3 * src_strd1));
 1835|  61.9k|                    src_temp8_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 3 * src_strd2));
 1836|       |
 1837|       |                    /*load 8 pixel values */ /* Second 8 Values */
 1838|  61.9k|                    src_temp9_8x16b  = _mm_loadu_si128((__m128i *)(pi2_src1 + 8));
 1839|  61.9k|                    src_temp10_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 8));
 1840|       |                    /* row = 1 */
 1841|  61.9k|                    src_temp11_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + src_strd1 + 8));
 1842|  61.9k|                    src_temp12_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + src_strd2 + 8));
 1843|       |                    /* row = 2 */
 1844|  61.9k|                    src_temp13_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 2 * src_strd1 + 8));
 1845|  61.9k|                    src_temp14_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 2 * src_strd2 + 8));
 1846|       |
 1847|       |                    /* (pi2_src1[col] + pi2_src2[col]) */ /* First 8 Values */
 1848|  61.9k|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1849|  61.9k|                    src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1850|  61.9k|                    src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1851|  61.9k|                    src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, src_temp8_8x16b);
 1852|       |
 1853|       |                    /*load 8 pixel values */ /* Second 8 Values */
 1854|       |                    /* row = 3 */
 1855|  61.9k|                    src_temp15_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 3 * src_strd1 + 8));
 1856|  61.9k|                    src_temp16_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 3 * src_strd2 + 8));
 1857|       |
 1858|       |                    /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */ /* First 8 Values */
 1859|  61.9k|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 1860|  61.9k|                    src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, lvl_shift1_8x16b);
 1861|  61.9k|                    src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, lvl_shift1_8x16b);
 1862|  61.9k|                    src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, lvl_shift1_8x16b);
 1863|       |
 1864|       |                    /* (pi2_src1[col] + pi2_src2[col]) */ /* Second 8 Values */
 1865|  61.9k|                    src_temp9_8x16b  = _mm_adds_epi16(src_temp9_8x16b,  src_temp10_8x16b);
 1866|  61.9k|                    src_temp11_8x16b = _mm_adds_epi16(src_temp11_8x16b, src_temp12_8x16b);
 1867|  61.9k|                    src_temp13_8x16b = _mm_adds_epi16(src_temp13_8x16b, src_temp14_8x16b);
 1868|  61.9k|                    src_temp15_8x16b = _mm_adds_epi16(src_temp15_8x16b, src_temp16_8x16b);
 1869|       |
 1870|       |                    /* (i4_tmp >> shift) */ /* First 8 Values */
 1871|  61.9k|                    src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 1872|  61.9k|                    src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  shift);
 1873|  61.9k|                    src_temp5_8x16b = _mm_srai_epi16(src_temp5_8x16b,  shift);
 1874|  61.9k|                    src_temp7_8x16b = _mm_srai_epi16(src_temp7_8x16b,  shift);
 1875|       |
 1876|       |                    /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */ /* Second 8 Values */
 1877|  61.9k|                    src_temp9_8x16b  = _mm_adds_epi16(src_temp9_8x16b, lvl_shift1_8x16b);
 1878|  61.9k|                    src_temp11_8x16b = _mm_adds_epi16(src_temp11_8x16b, lvl_shift1_8x16b);
 1879|  61.9k|                    src_temp13_8x16b = _mm_adds_epi16(src_temp13_8x16b, lvl_shift1_8x16b);
 1880|  61.9k|                    src_temp15_8x16b = _mm_adds_epi16(src_temp15_8x16b, lvl_shift1_8x16b);
 1881|       |
 1882|       |                    /* (i4_tmp >> shift) */ /* Second 8 Values */
 1883|  61.9k|                    src_temp9_8x16b  = _mm_srai_epi16(src_temp9_8x16b,  shift);
 1884|  61.9k|                    src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  shift);
 1885|  61.9k|                    src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  shift);
 1886|  61.9k|                    src_temp15_8x16b = _mm_srai_epi16(src_temp15_8x16b,  shift);
 1887|       |
 1888|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */ /* 16 8 Values */
 1889|  61.9k|                    src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp9_8x16b);
 1890|  61.9k|                    src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, src_temp11_8x16b);
 1891|  61.9k|                    src_temp5_8x16b = _mm_packus_epi16(src_temp5_8x16b, src_temp13_8x16b);
 1892|  61.9k|                    src_temp7_8x16b = _mm_packus_epi16(src_temp7_8x16b, src_temp15_8x16b);
 1893|       |
 1894|       |                    /* store four 8-bit output values  */ /* 16 8 Values */
 1895|  61.9k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 0 * dst_strd), src_temp1_8x16b); /* row = 0*/
 1896|  61.9k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), src_temp3_8x16b); /* row = 2*/
 1897|  61.9k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 2 * dst_strd), src_temp5_8x16b); /* row = 1*/
 1898|  61.9k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 3 * dst_strd), src_temp7_8x16b); /* row = 3*/
 1899|       |
 1900|       |                    /* To update pointer */
 1901|  61.9k|                    pi2_src1 += 16;
 1902|  61.9k|                    pi2_src2 += 16;
 1903|  61.9k|                    pu1_dst  += 16;
 1904|       |
 1905|  61.9k|                } /* inner loop ends here(8-output values in single iteration) */
 1906|       |
 1907|  36.7k|                pi2_src1 = pi2_src1 - wd + 4 * src_strd1;  /* Pointer update */
 1908|  36.7k|                pi2_src2 = pi2_src2 - wd + 4 * src_strd2;  /* Pointer update */
 1909|  36.7k|                pu1_dst  = pu1_dst - wd + 4 * dst_strd;   /* Pointer update */
 1910|       |
 1911|  36.7k|            }
 1912|  6.31k|        }
 1913|   253k|        else if(0 == (wd & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (1913:17): [True: 253k, False: 150]
  ------------------
 1914|   253k|        {
 1915|       |            /*  outer for loop starts from here */
 1916|   633k|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (1916:26): [True: 379k, False: 253k]
  ------------------
 1917|   379k|            {
 1918|   760k|                for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (1918:30): [True: 380k, False: 379k]
  ------------------
 1919|   380k|                {
 1920|       |                    /*load 8 pixel values */
 1921|   380k|                    src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1));
 1922|   380k|                    src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2));
 1923|       |                    /* row = 1 */
 1924|   380k|                    src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + src_strd1));
 1925|   380k|                    src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + src_strd2));
 1926|       |                    /* row = 2 */
 1927|   380k|                    src_temp5_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 2 * src_strd1));
 1928|   380k|                    src_temp6_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 2 * src_strd2));
 1929|       |                    /* row = 3 */
 1930|   380k|                    src_temp7_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 3 * src_strd1));
 1931|   380k|                    src_temp8_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 3 * src_strd2));
 1932|       |
 1933|       |                    /* (pi2_src1[col] + pi2_src2[col]) */
 1934|   380k|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1935|   380k|                    src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1936|   380k|                    src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1937|   380k|                    src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, src_temp8_8x16b);
 1938|       |
 1939|       |                    /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */
 1940|   380k|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 1941|   380k|                    src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, lvl_shift1_8x16b);
 1942|   380k|                    src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, lvl_shift1_8x16b);
 1943|   380k|                    src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, lvl_shift1_8x16b);
 1944|       |
 1945|       |                    /* (i4_tmp >> shift) */
 1946|   380k|                    src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 1947|   380k|                    src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  shift);
 1948|   380k|                    src_temp5_8x16b = _mm_srai_epi16(src_temp5_8x16b,  shift);
 1949|   380k|                    src_temp7_8x16b = _mm_srai_epi16(src_temp7_8x16b,  shift);
 1950|       |
 1951|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1952|   380k|                    src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp1_8x16b);
 1953|   380k|                    src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, src_temp3_8x16b);
 1954|   380k|                    src_temp5_8x16b = _mm_packus_epi16(src_temp5_8x16b, src_temp5_8x16b);
 1955|   380k|                    src_temp7_8x16b = _mm_packus_epi16(src_temp7_8x16b, src_temp7_8x16b);
 1956|       |
 1957|       |                    /* store four 8-bit output values  */
 1958|   380k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_temp1_8x16b); /* row = 0*/
 1959|   380k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_temp3_8x16b); /* row = 2*/
 1960|   380k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_temp5_8x16b); /* row = 1*/
 1961|   380k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_temp7_8x16b); /* row = 3*/
 1962|       |
 1963|       |                    /* To update pointer */
 1964|   380k|                    pi2_src1 += 8;
 1965|   380k|                    pi2_src2 += 8;
 1966|   380k|                    pu1_dst  += 8;
 1967|       |
 1968|   380k|                } /* inner loop ends here(8-output values in single iteration) */
 1969|       |
 1970|   379k|                pi2_src1 = pi2_src1 - wd + 4 * src_strd1;  /* Pointer update */
 1971|   379k|                pi2_src2 = pi2_src2 - wd + 4 * src_strd2;  /* Pointer update */
 1972|   379k|                pu1_dst  = pu1_dst - wd + 4 * dst_strd;   /* Pointer update */
 1973|       |
 1974|   379k|            }
 1975|   253k|        }
 1976|    150|        else /* wd multiple of 4 case*/
 1977|    150|        {
 1978|    150|            WORD32 dst0, dst1, dst2, dst3;
 1979|       |
 1980|       |            /*  outer for loop starts from here */
 1981|    264|            for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (1981:26): [True: 114, False: 150]
  ------------------
 1982|    114|            {
 1983|    336|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1983:30): [True: 222, False: 114]
  ------------------
 1984|    222|                {
 1985|       |                    /*load 4 pixel values from 7:0 pos. relative to cur. pos.*/
 1986|    222|                    src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1));
 1987|       |                    /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1988|    222|                    src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2));
 1989|       |
 1990|       |                    /* row = 1 */
 1991|    222|                    src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + src_strd1));
 1992|    222|                    src_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + src_strd2));
 1993|       |                    /* row = 2 */
 1994|    222|                    src_temp5_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + 2 * src_strd1));
 1995|    222|                    src_temp6_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + 2 * src_strd2));
 1996|       |                    /* row = 3 */
 1997|    222|                    src_temp7_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + 3 * src_strd1));
 1998|    222|                    src_temp8_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + 3 * src_strd2));
 1999|       |
 2000|       |                    /* Pack two rows together */
 2001|    222|                    src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
 2002|    222|                    src_temp2_8x16b = _mm_unpacklo_epi64(src_temp2_8x16b, src_temp4_8x16b);
 2003|    222|                    src_temp5_8x16b = _mm_unpacklo_epi64(src_temp5_8x16b, src_temp7_8x16b);
 2004|    222|                    src_temp6_8x16b = _mm_unpacklo_epi64(src_temp6_8x16b, src_temp8_8x16b);
 2005|       |
 2006|       |                    /* (pi2_src1[col] + pi2_src2[col]) */
 2007|    222|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 2008|    222|                    src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, src_temp6_8x16b);
 2009|       |
 2010|       |                    /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */
 2011|    222|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 2012|    222|                    src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, lvl_shift1_8x16b);
 2013|       |
 2014|       |                    /* (i4_tmp >> shift) */
 2015|    222|                    src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 2016|    222|                    src_temp5_8x16b = _mm_srai_epi16(src_temp5_8x16b,  shift);
 2017|       |
 2018|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 2019|    222|                    src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp1_8x16b);
 2020|    222|                    src_temp5_8x16b = _mm_packus_epi16(src_temp5_8x16b, src_temp5_8x16b);
 2021|       |
 2022|    222|                    dst0 = _mm_cvtsi128_si32(src_temp1_8x16b);
 2023|       |                    /* dst row = 1 to 3 */
 2024|    222|                    src_temp2_8x16b = _mm_shuffle_epi32(src_temp1_8x16b, 1);
 2025|    222|                    src_temp4_8x16b = _mm_shuffle_epi32(src_temp5_8x16b, 1);
 2026|       |
 2027|       |                    /* store four 8-bit output values  */
 2028|    222|                    *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 2029|       |
 2030|    222|                    dst1 = _mm_cvtsi128_si32(src_temp2_8x16b);
 2031|    222|                    dst2 = _mm_cvtsi128_si32(src_temp5_8x16b);
 2032|    222|                    dst3 = _mm_cvtsi128_si32(src_temp4_8x16b);
 2033|       |
 2034|       |                    /* row = 1 to row = 3 */
 2035|    222|                    *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 2036|    222|                    *(WORD32 *)(&pu1_dst[2 * dst_strd]) = dst2;
 2037|    222|                    *(WORD32 *)(&pu1_dst[3 * dst_strd]) = dst3;
 2038|       |
 2039|       |                    /* To update pointer */
 2040|    222|                    pi2_src1 += 4;
 2041|    222|                    pi2_src2 += 4;
 2042|    222|                    pu1_dst  += 4;
 2043|       |
 2044|    222|                } /* inner loop ends here(4-output values in single iteration) */
 2045|       |
 2046|    114|                pi2_src1 = pi2_src1 - wd + 4 * src_strd1; /* Pointer update */
 2047|    114|                pi2_src2 = pi2_src2 - wd + 4 * src_strd2; /* Pointer update */
 2048|    114|                pu1_dst  = pu1_dst  - wd + 4 * dst_strd;  /* Pointer update */
 2049|       |
 2050|    114|            }
 2051|    150|        }
 2052|   260k|    }
 2053|    646|    else /* ht multiple of 2 case and wd multiple of 4 case*/
 2054|    646|    {
 2055|       |
 2056|    646|        WORD32 dst0, dst1;
 2057|       |
 2058|       |        /*  outer for loop starts from here */
 2059|    737|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (2059:22): [True: 91, False: 646]
  ------------------
 2060|     91|        {
 2061|    455|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (2061:26): [True: 364, False: 91]
  ------------------
 2062|    364|            {
 2063|       |                /*load 4 pixel values from 7:0 pos. relative to cur. pos.*/
 2064|    364|                src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1));
 2065|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 2066|    364|                src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2));
 2067|       |
 2068|       |                /* row = 1 */
 2069|    364|                src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + src_strd1));
 2070|    364|                src_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + src_strd2));
 2071|       |
 2072|       |                /* Pack two rows together */
 2073|    364|                src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
 2074|    364|                src_temp2_8x16b = _mm_unpacklo_epi64(src_temp2_8x16b, src_temp4_8x16b);
 2075|       |
 2076|       |                /* (pi2_src1[col] + pi2_src2[col]) */
 2077|    364|                src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 2078|       |
 2079|       |                /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */
 2080|    364|                src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 2081|       |
 2082|       |                /* (i4_tmp >> shift) */
 2083|    364|                src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 2084|       |
 2085|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 2086|    364|                src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp1_8x16b);
 2087|       |
 2088|    364|                dst0 = _mm_cvtsi128_si32(src_temp1_8x16b);
 2089|       |                /* dst row = 1 to 3 */
 2090|    364|                src_temp2_8x16b = _mm_shuffle_epi32(src_temp1_8x16b, 1);
 2091|       |
 2092|       |                /* store four 8-bit output values  */
 2093|    364|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 2094|       |
 2095|    364|                dst1 = _mm_cvtsi128_si32(src_temp2_8x16b);
 2096|       |
 2097|       |                /* row = 1 to row = 3 */
 2098|    364|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 2099|       |
 2100|       |                /* To update pointer */
 2101|    364|                pi2_src1 += 4;
 2102|    364|                pi2_src2 += 4;
 2103|    364|                pu1_dst  += 4;
 2104|       |
 2105|    364|            } /* inner loop ends here(4-output values in single iteration) */
 2106|       |
 2107|     91|            pi2_src1 = pi2_src1 - wd + 2 * src_strd1; /* Pointer update */
 2108|     91|            pi2_src2 = pi2_src2 - wd + 2 * src_strd2; /* Pointer update */
 2109|     91|            pu1_dst  = pu1_dst  - wd + 2 * dst_strd;  /* Pointer update */
 2110|       |
 2111|     91|        }
 2112|       |
 2113|    646|    }
 2114|       |
 2115|   260k|}

ihevc_weighted_pred_uni_ssse3:
  123|  15.2k|{
  124|  15.2k|    WORD32 row, col, temp;
  125|       |
  126|       |    /* all 128 bit registers are named with a suffix mxnb, where m is the */
  127|       |    /* number of n bits packed in the register                            */
  128|  15.2k|    __m128i src_temp0_8x16b, src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b;
  129|  15.2k|    __m128i const_temp_4x32b, lvl_shift_4x32b, wgt0_8x16b, off0_4x32b;
  130|  15.2k|    __m128i res_temp0_4x32b, res_temp1_4x32b, res_temp2_4x32b, res_temp3_4x32b;
  131|       |
  132|  15.2k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  15.2k|#define ASSERT(x) assert((x))
  ------------------
  133|  15.2k|    ASSERT(ht % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  15.2k|#define ASSERT(x) assert((x))
  ------------------
  134|       |
  135|  15.2k|    temp = 1 << (shift - 1);
  136|       |
  137|       |    // seting values in register
  138|  15.2k|    lvl_shift_4x32b = _mm_set1_epi16(lvl_shift);
  139|  15.2k|    wgt0_8x16b = _mm_set1_epi16(wgt0);
  140|       |
  141|       |    /* lvl_shift * wgt0 */
  142|  15.2k|    res_temp0_4x32b = _mm_mullo_epi16(lvl_shift_4x32b, wgt0_8x16b);
  143|  15.2k|    res_temp1_4x32b = _mm_mulhi_epi16(lvl_shift_4x32b, wgt0_8x16b);
  144|       |
  145|  15.2k|    const_temp_4x32b = _mm_set1_epi32(temp);
  146|  15.2k|    off0_4x32b = _mm_set1_epi32(off0);
  147|       |
  148|       |
  149|       |    /* lvl_shift * wgt0 */
  150|  15.2k|    lvl_shift_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, res_temp1_4x32b);
  151|       |    /* lvl_shift * wgt0 + 1 << (shift - 1) */
  152|  15.2k|    lvl_shift_4x32b = _mm_add_epi32(lvl_shift_4x32b, const_temp_4x32b);
  153|       |
  154|  15.2k|    if(0 == (wd & 7)) /* wd multiple of 8 case */
  ------------------
  |  Branch (154:8): [True: 15.1k, False: 120]
  ------------------
  155|  15.1k|    {
  156|  15.1k|        __m128i res_temp4_4x32b, res_temp5_4x32b, res_temp6_4x32b, res_temp7_4x32b;
  157|       |
  158|       |        /*  outer for loop starts from here */
  159|  49.1k|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (159:22): [True: 33.9k, False: 15.1k]
  ------------------
  160|  33.9k|        {
  161|  85.0k|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (161:26): [True: 51.0k, False: 33.9k]
  ------------------
  162|  51.0k|            {   /* for row =0 ,1,2,3*/
  163|       |
  164|       |                /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  165|  51.0k|                src_temp0_8x16b = _mm_loadu_si128((__m128i *)(pi2_src));
  166|       |                /* row = 1 */
  167|  51.0k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
  168|       |                /* row = 2 */
  169|  51.0k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + 2 * src_strd));
  170|       |                /* row = 3 */
  171|  51.0k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + 3 * src_strd));
  172|       |
  173|       |                /*i4_tmp = (pi2_src[col]) * wgt0*/ /* Lower 16 bit */
  174|  51.0k|                res_temp0_4x32b  = _mm_mullo_epi16(src_temp0_8x16b, wgt0_8x16b);
  175|  51.0k|                res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
  176|  51.0k|                res_temp2_4x32b  = _mm_mullo_epi16(src_temp2_8x16b, wgt0_8x16b);
  177|  51.0k|                res_temp3_4x32b  = _mm_mullo_epi16(src_temp3_8x16b, wgt0_8x16b);
  178|       |
  179|       |                /*i4_tmp = (pi2_src[col] ) * wgt0*/ /* Higher 16 bit */
  180|  51.0k|                src_temp0_8x16b  = _mm_mulhi_epi16(src_temp0_8x16b, wgt0_8x16b);
  181|  51.0k|                src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
  182|  51.0k|                src_temp2_8x16b  = _mm_mulhi_epi16(src_temp2_8x16b, wgt0_8x16b);
  183|  51.0k|                src_temp3_8x16b  = _mm_mulhi_epi16(src_temp3_8x16b, wgt0_8x16b);
  184|       |
  185|       |                /* Get 32 bit Result */
  186|  51.0k|                res_temp4_4x32b = _mm_unpackhi_epi16(res_temp0_4x32b, src_temp0_8x16b);
  187|  51.0k|                res_temp5_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
  188|  51.0k|                res_temp6_4x32b = _mm_unpackhi_epi16(res_temp2_4x32b, src_temp2_8x16b);
  189|  51.0k|                res_temp7_4x32b = _mm_unpackhi_epi16(res_temp3_4x32b, src_temp3_8x16b);
  190|       |
  191|  51.0k|                res_temp0_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, src_temp0_8x16b);
  192|  51.0k|                res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
  193|  51.0k|                res_temp2_4x32b = _mm_unpacklo_epi16(res_temp2_4x32b, src_temp2_8x16b);
  194|  51.0k|                res_temp3_4x32b = _mm_unpacklo_epi16(res_temp3_4x32b, src_temp3_8x16b);
  195|       |
  196|       |                /* i4_tmp = (pi2_src[col] + lvl_shift) * wgt0 + 1 << (shift - 1) */
  197|  51.0k|                res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, lvl_shift_4x32b);
  198|  51.0k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, lvl_shift_4x32b);
  199|  51.0k|                res_temp6_4x32b = _mm_add_epi32(res_temp6_4x32b, lvl_shift_4x32b);
  200|  51.0k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, lvl_shift_4x32b);
  201|  51.0k|                res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, lvl_shift_4x32b);
  202|  51.0k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift_4x32b);
  203|  51.0k|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift_4x32b);
  204|  51.0k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift_4x32b);
  205|       |
  206|       |                /* (i4_tmp >> shift) */ /* First 4 pixels */
  207|  51.0k|                res_temp0_4x32b = _mm_srai_epi32(res_temp0_4x32b, shift);
  208|  51.0k|                res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b, shift);
  209|  51.0k|                res_temp2_4x32b = _mm_srai_epi32(res_temp2_4x32b, shift);
  210|  51.0k|                res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b, shift);
  211|       |
  212|       |                /* (i4_tmp >> shift) */ /* Last 4 pixels */
  213|  51.0k|                res_temp4_4x32b = _mm_srai_epi32(res_temp4_4x32b, shift);
  214|  51.0k|                res_temp5_4x32b = _mm_srai_epi32(res_temp5_4x32b, shift);
  215|  51.0k|                res_temp6_4x32b = _mm_srai_epi32(res_temp6_4x32b, shift);
  216|  51.0k|                res_temp7_4x32b = _mm_srai_epi32(res_temp7_4x32b, shift);
  217|       |
  218|       |                /*i4_tmp = (i4_tmp >> shift) + off0; */ /* First 4 pixels */
  219|  51.0k|                res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, off0_4x32b);
  220|  51.0k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, off0_4x32b);
  221|  51.0k|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, off0_4x32b);
  222|  51.0k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, off0_4x32b);
  223|       |
  224|       |                /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  225|  51.0k|                res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, off0_4x32b);
  226|  51.0k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, off0_4x32b);
  227|  51.0k|                res_temp6_4x32b = _mm_add_epi32(res_temp6_4x32b, off0_4x32b);
  228|  51.0k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, off0_4x32b);
  229|       |
  230|  51.0k|                res_temp0_4x32b = _mm_packs_epi32(res_temp0_4x32b, res_temp4_4x32b);
  231|  51.0k|                res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp5_4x32b);
  232|  51.0k|                res_temp2_4x32b = _mm_packs_epi32(res_temp2_4x32b, res_temp6_4x32b);
  233|  51.0k|                res_temp3_4x32b = _mm_packs_epi32(res_temp3_4x32b, res_temp7_4x32b);
  234|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  235|  51.0k|                res_temp0_4x32b = _mm_packus_epi16(res_temp0_4x32b, res_temp0_4x32b);
  236|  51.0k|                res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp1_4x32b);
  237|  51.0k|                res_temp2_4x32b = _mm_packus_epi16(res_temp2_4x32b, res_temp2_4x32b);
  238|  51.0k|                res_temp3_4x32b = _mm_packus_epi16(res_temp3_4x32b, res_temp3_4x32b);
  239|       |
  240|       |                /* store four 8-bit output values  */
  241|  51.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), res_temp0_4x32b); /* row = 0*/
  242|  51.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), res_temp1_4x32b); /* row = 2*/
  243|  51.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), res_temp2_4x32b); /* row = 1*/
  244|  51.0k|                _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), res_temp3_4x32b); /* row = 3*/
  245|       |
  246|       |                /* To update pointer */
  247|  51.0k|                pi2_src += 8;
  248|  51.0k|                pu1_dst += 8;
  249|       |
  250|  51.0k|            } /* inner loop ends here(4-output values in single iteration) */
  251|       |
  252|  33.9k|            pi2_src = pi2_src - wd + 4 * src_strd;    /* Pointer update */
  253|  33.9k|            pu1_dst = pu1_dst - wd + 4 * dst_strd; /* Pointer update */
  254|       |
  255|  33.9k|        }
  256|  15.1k|    }
  257|    120|    else  /* wd multiple of 4 case */
  258|    120|    {
  259|    120|        WORD32 dst0, dst1, dst2, dst3;
  260|       |        /*  outer for loop starts from here */
  261|    423|        for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (261:22): [True: 303, False: 120]
  ------------------
  262|    303|        {
  263|    646|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (263:26): [True: 343, False: 303]
  ------------------
  264|    343|            {   /* for row =0 ,1,2,3*/
  265|       |
  266|       |                /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  267|    343|                src_temp0_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src));
  268|       |                /* row = 1 */
  269|    343|                src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + src_strd));
  270|       |                /* row = 2 */
  271|    343|                src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + 2 * src_strd));
  272|       |                /* row = 3 */
  273|    343|                src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + 3 * src_strd));
  274|       |
  275|       |                /* 2 rows together */
  276|    343|                src_temp0_8x16b = _mm_unpacklo_epi64(src_temp0_8x16b, src_temp2_8x16b);
  277|    343|                src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
  278|       |
  279|       |                /*i4_tmp = (pi2_src[col]) * wgt0*/ /* Lower 16 bit */
  280|    343|                res_temp0_4x32b  = _mm_mullo_epi16(src_temp0_8x16b, wgt0_8x16b);
  281|    343|                res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
  282|       |                /*i4_tmp = (pi2_src[col]) * wgt0*/ /* Higher 16 bit */
  283|    343|                src_temp0_8x16b  = _mm_mulhi_epi16(src_temp0_8x16b, wgt0_8x16b);
  284|    343|                src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
  285|       |
  286|       |                /* Get 32 bit Result */
  287|    343|                res_temp2_4x32b = _mm_unpackhi_epi16(res_temp0_4x32b, src_temp0_8x16b);
  288|    343|                res_temp3_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
  289|       |
  290|    343|                res_temp0_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, src_temp0_8x16b);
  291|    343|                res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
  292|       |
  293|       |                /* i4_tmp = (pi2_src[col] + lvl_shift) * wgt0 + 1 << (shift - 1) */
  294|    343|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift_4x32b);
  295|    343|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift_4x32b);
  296|    343|                res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, lvl_shift_4x32b);
  297|    343|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift_4x32b);
  298|       |
  299|       |                /* (i4_tmp >> shift) */
  300|    343|                res_temp0_4x32b = _mm_srai_epi32(res_temp0_4x32b, shift);
  301|    343|                res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b, shift);
  302|    343|                res_temp2_4x32b = _mm_srai_epi32(res_temp2_4x32b, shift);
  303|    343|                res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b, shift);
  304|       |
  305|       |                /*i4_tmp = (i4_tmp >> shift) + off0; */
  306|    343|                res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, off0_4x32b);
  307|    343|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, off0_4x32b);
  308|    343|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, off0_4x32b);
  309|    343|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, off0_4x32b);
  310|       |
  311|    343|                res_temp0_4x32b = _mm_packs_epi32(res_temp0_4x32b, res_temp1_4x32b);
  312|    343|                res_temp2_4x32b = _mm_packs_epi32(res_temp2_4x32b, res_temp3_4x32b);
  313|       |
  314|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  315|    343|                res_temp0_4x32b = _mm_packus_epi16(res_temp0_4x32b, res_temp2_4x32b);
  316|       |
  317|    343|                dst0 = _mm_cvtsi128_si32(res_temp0_4x32b);
  318|       |                /* dst row = 1 to 3 */
  319|    343|                res_temp1_4x32b = _mm_shuffle_epi32(res_temp0_4x32b, 1);
  320|    343|                res_temp2_4x32b = _mm_shuffle_epi32(res_temp0_4x32b, 2);
  321|    343|                res_temp3_4x32b = _mm_shuffle_epi32(res_temp0_4x32b, 3);
  322|       |
  323|       |                /* store four 8-bit output values  */
  324|    343|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
  325|       |
  326|    343|                dst1 = _mm_cvtsi128_si32(res_temp1_4x32b);
  327|    343|                dst2 = _mm_cvtsi128_si32(res_temp2_4x32b);
  328|    343|                dst3 = _mm_cvtsi128_si32(res_temp3_4x32b);
  329|       |
  330|       |                /* row = 1 to row = 3 */
  331|    343|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
  332|    343|                *(WORD32 *)(&pu1_dst[2 * dst_strd]) = dst2;
  333|    343|                *(WORD32 *)(&pu1_dst[3 * dst_strd]) = dst3;
  334|       |
  335|       |                /* To update pointer */
  336|    343|                pi2_src += 4;
  337|    343|                pu1_dst += 4;
  338|       |
  339|    343|            } /* inner loop ends here(4-output values in single iteration) */
  340|       |
  341|    303|            pi2_src = pi2_src - wd + 4 * src_strd;    /* Pointer update */
  342|    303|            pu1_dst = pu1_dst - wd + 4 * dst_strd; /* Pointer update */
  343|       |
  344|    303|        }
  345|    120|    }
  346|  15.2k|}
ihevc_weighted_pred_chroma_uni_ssse3:
  413|  15.2k|{
  414|  15.2k|    WORD32 row, col, temp, wdx2;
  415|       |    /* all 128 bit registers are named with a suffix mxnb, where m is the */
  416|       |    /* number of n bits packed in the register                            */
  417|       |
  418|  15.2k|    __m128i src_temp0_8x16b, src_temp1_8x16b;
  419|  15.2k|    __m128i const_temp_4x32b, lvl_shift_4x32b, wgt0_8x16b, off0_4x32b;
  420|  15.2k|    __m128i res_temp0_4x32b, res_temp1_4x32b;
  421|       |
  422|  15.2k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  15.2k|#define ASSERT(x) assert((x))
  ------------------
  423|  15.2k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  15.2k|#define ASSERT(x) assert((x))
  ------------------
  424|       |
  425|  15.2k|    temp = 1 << (shift - 1);
  426|  15.2k|    wdx2 = 2 * wd;
  427|       |
  428|       |    // seting values in register
  429|  15.2k|    lvl_shift_4x32b = _mm_set1_epi16(lvl_shift);
  430|  15.2k|    wgt0_8x16b = _mm_set_epi16(wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb);
  431|       |
  432|       |    /* lvl_shift * wgt0 */
  433|  15.2k|    res_temp0_4x32b = _mm_mullo_epi16(lvl_shift_4x32b, wgt0_8x16b);
  434|  15.2k|    res_temp1_4x32b = _mm_mulhi_epi16(lvl_shift_4x32b, wgt0_8x16b);
  435|       |
  436|  15.2k|    const_temp_4x32b = _mm_set1_epi32(temp);
  437|  15.2k|    off0_4x32b = _mm_set_epi32(off0_cr, off0_cb, off0_cr, off0_cb);
  438|       |
  439|       |    /* lvl_shift * wgt0 */
  440|  15.2k|    lvl_shift_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, res_temp1_4x32b);
  441|       |    /* lvl_shift * wgt0 + 1 << (shift - 1) */
  442|  15.2k|    lvl_shift_4x32b = _mm_add_epi32(lvl_shift_4x32b, const_temp_4x32b);
  443|       |
  444|  15.2k|    {
  445|  15.2k|        if(0 == (wdx2 & 15)) /* 2*wd multiple of 16 case */
  ------------------
  |  Branch (445:12): [True: 924, False: 14.3k]
  ------------------
  446|    924|        {
  447|    924|            __m128i src_temp2_8x16b, src_temp3_8x16b;
  448|    924|            __m128i res_temp2_4x32b, res_temp3_4x32b;
  449|    924|            __m128i res_temp4_4x32b, res_temp5_4x32b, res_temp6_4x32b, res_temp7_4x32b;
  450|       |
  451|       |            /*  outer for loop starts from here */
  452|  6.61k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (452:26): [True: 5.69k, False: 924]
  ------------------
  453|  5.69k|            {
  454|  17.6k|                for(col = 0; col < wdx2; col += 16)
  ------------------
  |  Branch (454:30): [True: 11.9k, False: 5.69k]
  ------------------
  455|  11.9k|                {
  456|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  457|  11.9k|                    src_temp0_8x16b = _mm_loadu_si128((__m128i *)(pi2_src));
  458|       |                    /* row = 1 */
  459|  11.9k|                    src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
  460|       |                    /* row = 0 */ /* Next 8 pixels */
  461|  11.9k|                    src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + 8));
  462|       |                    /* row = 1 */
  463|  11.9k|                    src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd + 8));
  464|       |
  465|       |                    /*i4_tmp = (pi2_src[col]) * wgt0*/ /* Lower 16 bit */
  466|  11.9k|                    res_temp0_4x32b  = _mm_mullo_epi16(src_temp0_8x16b, wgt0_8x16b);
  467|  11.9k|                    res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
  468|  11.9k|                    res_temp4_4x32b  = _mm_mullo_epi16(src_temp2_8x16b, wgt0_8x16b);
  469|  11.9k|                    res_temp5_4x32b  = _mm_mullo_epi16(src_temp3_8x16b, wgt0_8x16b);
  470|       |
  471|       |                    /*i4_tmp = (pi2_src[col] ) * wgt0*/ /* Higher 16 bit */
  472|  11.9k|                    src_temp0_8x16b  = _mm_mulhi_epi16(src_temp0_8x16b, wgt0_8x16b);
  473|  11.9k|                    src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
  474|  11.9k|                    src_temp2_8x16b  = _mm_mulhi_epi16(src_temp2_8x16b, wgt0_8x16b);
  475|  11.9k|                    src_temp3_8x16b  = _mm_mulhi_epi16(src_temp3_8x16b, wgt0_8x16b);
  476|       |
  477|       |                    /* Get 32 bit Result */
  478|  11.9k|                    res_temp2_4x32b = _mm_unpackhi_epi16(res_temp0_4x32b, src_temp0_8x16b);
  479|  11.9k|                    res_temp3_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
  480|  11.9k|                    res_temp6_4x32b = _mm_unpackhi_epi16(res_temp4_4x32b, src_temp2_8x16b);
  481|  11.9k|                    res_temp7_4x32b = _mm_unpackhi_epi16(res_temp5_4x32b, src_temp3_8x16b);
  482|       |
  483|  11.9k|                    res_temp0_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, src_temp0_8x16b);
  484|  11.9k|                    res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
  485|  11.9k|                    res_temp4_4x32b = _mm_unpacklo_epi16(res_temp4_4x32b, src_temp2_8x16b);
  486|  11.9k|                    res_temp5_4x32b = _mm_unpacklo_epi16(res_temp5_4x32b, src_temp3_8x16b);
  487|       |
  488|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0 + 1 << (shift - 1) */
  489|  11.9k|                    res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, lvl_shift_4x32b);
  490|  11.9k|                    res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift_4x32b);
  491|  11.9k|                    res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift_4x32b);
  492|  11.9k|                    res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift_4x32b);
  493|  11.9k|                    res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, lvl_shift_4x32b);
  494|  11.9k|                    res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, lvl_shift_4x32b);
  495|  11.9k|                    res_temp6_4x32b = _mm_add_epi32(res_temp6_4x32b, lvl_shift_4x32b);
  496|  11.9k|                    res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, lvl_shift_4x32b);
  497|       |
  498|       |                    /* (i4_tmp >> shift) */
  499|  11.9k|                    res_temp0_4x32b = _mm_srai_epi32(res_temp0_4x32b,  shift);
  500|  11.9k|                    res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
  501|  11.9k|                    res_temp2_4x32b = _mm_srai_epi32(res_temp2_4x32b,  shift);
  502|  11.9k|                    res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b,  shift);
  503|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  504|  11.9k|                    res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, off0_4x32b);
  505|  11.9k|                    res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, off0_4x32b);
  506|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Second 4 pixels */
  507|  11.9k|                    res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, off0_4x32b);
  508|  11.9k|                    res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, off0_4x32b);
  509|       |
  510|       |                    /* (i4_tmp >> shift) */
  511|  11.9k|                    res_temp4_4x32b = _mm_srai_epi32(res_temp4_4x32b,  shift);
  512|  11.9k|                    res_temp5_4x32b = _mm_srai_epi32(res_temp5_4x32b,  shift);
  513|  11.9k|                    res_temp6_4x32b = _mm_srai_epi32(res_temp6_4x32b,  shift);
  514|  11.9k|                    res_temp7_4x32b = _mm_srai_epi32(res_temp7_4x32b,  shift);
  515|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Third 4 pixels */
  516|  11.9k|                    res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, off0_4x32b);
  517|  11.9k|                    res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, off0_4x32b);
  518|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  519|  11.9k|                    res_temp6_4x32b = _mm_add_epi32(res_temp6_4x32b, off0_4x32b);
  520|  11.9k|                    res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, off0_4x32b);
  521|       |
  522|  11.9k|                    res_temp0_4x32b = _mm_packs_epi32(res_temp0_4x32b, res_temp2_4x32b);
  523|  11.9k|                    res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp3_4x32b);
  524|  11.9k|                    res_temp4_4x32b = _mm_packs_epi32(res_temp4_4x32b, res_temp6_4x32b);
  525|  11.9k|                    res_temp5_4x32b = _mm_packs_epi32(res_temp5_4x32b, res_temp7_4x32b);
  526|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  527|  11.9k|                    res_temp0_4x32b = _mm_packus_epi16(res_temp0_4x32b, res_temp4_4x32b);
  528|  11.9k|                    res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp5_4x32b);
  529|       |
  530|       |                    /* store 16 8-bit output values  */
  531|  11.9k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 0 * dst_strd), res_temp0_4x32b); /* row = 0*/
  532|  11.9k|                    _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), res_temp1_4x32b); /* row = 1*/
  533|       |
  534|  11.9k|                    pi2_src += 16;  /* Pointer update */
  535|  11.9k|                    pu1_dst += 16; /* Pointer update */
  536|       |
  537|  11.9k|                } /* inner loop ends here(4-output values in single iteration) */
  538|  5.69k|                pi2_src = pi2_src - wdx2 + 2 * src_strd;  /* Pointer update */
  539|  5.69k|                pu1_dst = pu1_dst - wdx2 + 2 * dst_strd; /* Pointer update */
  540|  5.69k|            }
  541|    924|        }
  542|  14.3k|        else if(0 == (wdx2 & 7)) /* 2*wd multiple of 8 case */
  ------------------
  |  Branch (542:17): [True: 14.2k, False: 139]
  ------------------
  543|  14.2k|        {
  544|  14.2k|            __m128i res_temp2_4x32b, res_temp3_4x32b;
  545|       |            /*  outer for loop starts from here */
  546|  42.7k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (546:26): [True: 28.5k, False: 14.2k]
  ------------------
  547|  28.5k|            {
  548|  57.0k|                for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (548:30): [True: 28.5k, False: 28.5k]
  ------------------
  549|  28.5k|                {
  550|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  551|  28.5k|                    src_temp0_8x16b = _mm_loadu_si128((__m128i *)(pi2_src));
  552|       |                    /* row = 1 */
  553|  28.5k|                    src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src + src_strd));
  554|       |
  555|       |                    /*i4_tmp = (pi2_src[col]) * wgt0*/ /* Lower 16 bit */
  556|  28.5k|                    res_temp0_4x32b  = _mm_mullo_epi16(src_temp0_8x16b, wgt0_8x16b);
  557|  28.5k|                    res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
  558|       |                    /*i4_tmp = (pi2_src[col] ) * wgt0*/ /* Higher 16 bit */
  559|  28.5k|                    src_temp0_8x16b  = _mm_mulhi_epi16(src_temp0_8x16b, wgt0_8x16b);
  560|  28.5k|                    src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
  561|       |
  562|       |                    /* Get 32 bit Result */
  563|  28.5k|                    res_temp2_4x32b = _mm_unpackhi_epi16(res_temp0_4x32b, src_temp0_8x16b);
  564|  28.5k|                    res_temp3_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
  565|       |
  566|  28.5k|                    res_temp0_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, src_temp0_8x16b);
  567|  28.5k|                    res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
  568|       |
  569|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0 + 1 << (shift - 1) */
  570|  28.5k|                    res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, lvl_shift_4x32b);
  571|  28.5k|                    res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift_4x32b);
  572|  28.5k|                    res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift_4x32b);
  573|  28.5k|                    res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift_4x32b);
  574|       |
  575|       |                    /* (i4_tmp >> shift) */
  576|  28.5k|                    res_temp0_4x32b = _mm_srai_epi32(res_temp0_4x32b,  shift);
  577|  28.5k|                    res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
  578|  28.5k|                    res_temp2_4x32b = _mm_srai_epi32(res_temp2_4x32b,  shift);
  579|  28.5k|                    res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b,  shift);
  580|       |
  581|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  582|  28.5k|                    res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, off0_4x32b);
  583|  28.5k|                    res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, off0_4x32b);
  584|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */ /* Last 4 pixels */
  585|  28.5k|                    res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, off0_4x32b);
  586|  28.5k|                    res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, off0_4x32b);
  587|       |
  588|  28.5k|                    res_temp0_4x32b = _mm_packs_epi32(res_temp0_4x32b, res_temp2_4x32b);
  589|  28.5k|                    res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp3_4x32b);
  590|       |
  591|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  592|  28.5k|                    res_temp0_4x32b = _mm_packus_epi16(res_temp0_4x32b, res_temp0_4x32b);
  593|  28.5k|                    res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp1_4x32b);
  594|       |
  595|       |                    /* store four 8-bit output values  */
  596|  28.5k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), res_temp0_4x32b); /* row = 0*/
  597|  28.5k|                    _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), res_temp1_4x32b); /* row = 1*/
  598|       |
  599|  28.5k|                    pi2_src += 8;   /* Pointer update */
  600|  28.5k|                    pu1_dst += 8; /* Pointer update */
  601|       |
  602|  28.5k|                } /* inner loop ends here(4-output values in single iteration) */
  603|  28.5k|                pi2_src = pi2_src - wdx2 + 2 * src_strd;  /* Pointer update */
  604|  28.5k|                pu1_dst = pu1_dst - wdx2 + 2 * dst_strd; /* Pointer update */
  605|  28.5k|            }
  606|  14.2k|        }
  607|    139|        else /* 2*wd multiple of 4 case */
  608|    139|        {
  609|    139|            WORD32 dst0, dst1;
  610|       |            /*  outer for loop starts from here */
  611|    443|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (611:26): [True: 304, False: 139]
  ------------------
  612|    304|            {
  613|    648|                for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (613:30): [True: 344, False: 304]
  ------------------
  614|    344|                {
  615|       |                    /* row = 0 */ /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  616|    344|                    src_temp0_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src));
  617|       |                    /* row = 1 */
  618|    344|                    src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src + src_strd));
  619|       |
  620|       |                    /* 2 rows together */
  621|    344|                    src_temp0_8x16b = _mm_unpacklo_epi64(src_temp0_8x16b, src_temp1_8x16b);
  622|       |
  623|       |                    /*i4_tmp = (pi2_src[col]) * wgt0*/ /* Lower 16 bit */
  624|    344|                    res_temp0_4x32b  = _mm_mullo_epi16(src_temp0_8x16b, wgt0_8x16b);
  625|       |                    /*i4_tmp = (pi2_src[col] ) * wgt0*/ /* Higher 16 bit */
  626|    344|                    src_temp0_8x16b  = _mm_mulhi_epi16(src_temp0_8x16b, wgt0_8x16b);
  627|       |
  628|       |                    /* Get 32 bit Result */
  629|    344|                    res_temp1_4x32b = _mm_unpackhi_epi16(res_temp0_4x32b, src_temp0_8x16b);
  630|    344|                    res_temp0_4x32b = _mm_unpacklo_epi16(res_temp0_4x32b, src_temp0_8x16b);
  631|       |
  632|       |                    /*i4_tmp = (pi2_src[col] + lvl_shift) * wgt0 + 1 << (shift - 1) */
  633|    344|                    res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, lvl_shift_4x32b);
  634|    344|                    res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift_4x32b);
  635|       |
  636|       |                    /* (i4_tmp >> shift) */
  637|    344|                    res_temp0_4x32b = _mm_srai_epi32(res_temp0_4x32b,  shift);
  638|    344|                    res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
  639|       |
  640|       |                    /*i4_tmp = (i4_tmp >> shift) + off0; */
  641|    344|                    res_temp0_4x32b = _mm_add_epi32(res_temp0_4x32b, off0_4x32b);
  642|    344|                    res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, off0_4x32b);
  643|       |
  644|    344|                    res_temp0_4x32b = _mm_packs_epi32(res_temp0_4x32b, res_temp1_4x32b);
  645|       |
  646|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp); */
  647|    344|                    res_temp0_4x32b = _mm_packus_epi16(res_temp0_4x32b, res_temp0_4x32b);
  648|       |
  649|    344|                    dst0 = _mm_cvtsi128_si32(res_temp0_4x32b);
  650|       |                    /* dst row = 1 to 3 */
  651|    344|                    res_temp1_4x32b = _mm_shuffle_epi32(res_temp0_4x32b, 1);
  652|       |
  653|       |                    /* store four 8-bit output values  */
  654|    344|                    *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
  655|       |
  656|    344|                    dst1 = _mm_cvtsi128_si32(res_temp1_4x32b);
  657|       |                    /* row = 1 */
  658|    344|                    *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
  659|       |
  660|    344|                    pi2_src += 4;   /* Pointer update */
  661|    344|                    pu1_dst += 4; /* Pointer update */
  662|       |
  663|    344|                } /* inner loop ends here(4-output values in single iteration) */
  664|    304|                pi2_src = pi2_src - wdx2 + 2 * src_strd;  /* Pointer update */
  665|    304|                pu1_dst = pu1_dst - wdx2 + 2 * dst_strd; /* Pointer update */
  666|    304|            }
  667|    139|        }
  668|  15.2k|    }
  669|  15.2k|}
ihevc_weighted_pred_bi_ssse3:
  751|  40.6k|{
  752|  40.6k|    WORD32 row, col, temp;
  753|       |
  754|  40.6k|    __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
  755|  40.6k|    __m128i const_temp_4x32b, lvl_shift1_4x32b, lvl_shift2_4x32b, wgt0_8x16b, wgt1_8x16b;
  756|  40.6k|    __m128i res_temp1_4x32b, res_temp2_4x32b, res_temp3_4x32b, res_temp4_4x32b;
  757|       |
  758|  40.6k|#include <assert.h>
  759|  40.6k|    ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  40.6k|#define ASSERT(x) assert((x))
  ------------------
  760|  40.6k|    ASSERT(ht % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  40.6k|#define ASSERT(x) assert((x))
  ------------------
  761|       |
  762|  40.6k|    temp = (off0 + off1 + 1) << (shift - 1);
  763|       |
  764|       |    // seting values in register
  765|  40.6k|    lvl_shift1_4x32b = _mm_set1_epi16(lvl_shift1);
  766|  40.6k|    wgt0_8x16b = _mm_set1_epi16(wgt0);
  767|  40.6k|    lvl_shift2_4x32b = _mm_set1_epi16(lvl_shift2);
  768|  40.6k|    wgt1_8x16b = _mm_set1_epi16(wgt1);
  769|       |
  770|       |    /* lvl_shift1 * wgt0 */
  771|  40.6k|    res_temp1_4x32b = _mm_mullo_epi16(lvl_shift1_4x32b, wgt0_8x16b);
  772|  40.6k|    res_temp2_4x32b = _mm_mulhi_epi16(lvl_shift1_4x32b, wgt0_8x16b);
  773|       |    /* lvl_shift2 * wgt1 */
  774|  40.6k|    res_temp3_4x32b = _mm_mullo_epi16(lvl_shift2_4x32b, wgt1_8x16b);
  775|  40.6k|    res_temp4_4x32b = _mm_mulhi_epi16(lvl_shift2_4x32b, wgt1_8x16b);
  776|       |
  777|  40.6k|    const_temp_4x32b = _mm_set1_epi32(temp);
  778|       |
  779|       |    /* lvl_shift1 * wgt0 */
  780|  40.6k|    lvl_shift1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, res_temp2_4x32b);
  781|       |    /* lvl_shift2 * wgt1 */
  782|  40.6k|    lvl_shift2_4x32b = _mm_unpacklo_epi16(res_temp3_4x32b, res_temp4_4x32b);
  783|       |
  784|  40.6k|    if(0 == (wd & 7)) /* wd multiple of 8 case */
  ------------------
  |  Branch (784:8): [True: 40.6k, False: 18.4E]
  ------------------
  785|  40.6k|    {
  786|  40.6k|        __m128i res_temp5_4x32b, res_temp6_4x32b, res_temp7_4x32b, res_temp8_4x32b;
  787|       |        /*  outer for loop starts from here */
  788|   225k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (788:22): [True: 184k, False: 40.6k]
  ------------------
  789|   184k|        {
  790|   473k|            for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (790:26): [True: 288k, False: 184k]
  ------------------
  791|   288k|            {
  792|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  793|   288k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1)); /* row = 0 */
  794|   288k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2)); /* row = 0 */
  795|   288k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
  796|   288k|                src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
  797|       |
  798|       |                /*i4_tmp = (pi2_src[col]) * wgt*/ /* Lower 16 bit */
  799|   288k|                res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
  800|   288k|                res_temp2_4x32b  = _mm_mullo_epi16(src_temp2_8x16b, wgt1_8x16b);
  801|   288k|                res_temp3_4x32b  = _mm_mullo_epi16(src_temp3_8x16b, wgt0_8x16b);
  802|   288k|                res_temp4_4x32b  = _mm_mullo_epi16(src_temp4_8x16b, wgt1_8x16b);
  803|       |                /*i4_tmp = (pi2_src[col] ) * wgt*/ /* Higher 16 bit */
  804|   288k|                src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
  805|   288k|                src_temp2_8x16b  = _mm_mulhi_epi16(src_temp2_8x16b, wgt1_8x16b);
  806|   288k|                src_temp3_8x16b  = _mm_mulhi_epi16(src_temp3_8x16b, wgt0_8x16b);
  807|   288k|                src_temp4_8x16b  = _mm_mulhi_epi16(src_temp4_8x16b, wgt1_8x16b);
  808|       |
  809|       |                /* Get 32 bit Result */
  810|   288k|                res_temp5_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
  811|   288k|                res_temp6_4x32b = _mm_unpackhi_epi16(res_temp2_4x32b, src_temp2_8x16b);
  812|   288k|                res_temp7_4x32b = _mm_unpackhi_epi16(res_temp3_4x32b, src_temp3_8x16b);
  813|   288k|                res_temp8_4x32b = _mm_unpackhi_epi16(res_temp4_4x32b, src_temp4_8x16b);
  814|       |
  815|   288k|                res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
  816|   288k|                res_temp2_4x32b = _mm_unpacklo_epi16(res_temp2_4x32b, src_temp2_8x16b);
  817|   288k|                res_temp3_4x32b = _mm_unpacklo_epi16(res_temp3_4x32b, src_temp3_8x16b);
  818|   288k|                res_temp4_4x32b = _mm_unpacklo_epi16(res_temp4_4x32b, src_temp4_8x16b);
  819|       |
  820|       |                /* (pi2_src[col] + lvl_shift) * wgt */
  821|   288k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, lvl_shift1_4x32b);
  822|   288k|                res_temp6_4x32b = _mm_add_epi32(res_temp6_4x32b, lvl_shift2_4x32b);
  823|   288k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, lvl_shift1_4x32b);
  824|   288k|                res_temp8_4x32b = _mm_add_epi32(res_temp8_4x32b, lvl_shift2_4x32b);
  825|   288k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift1_4x32b);
  826|   288k|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift2_4x32b);
  827|   288k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift1_4x32b);
  828|   288k|                res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, lvl_shift2_4x32b);
  829|       |
  830|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
  831|   288k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, res_temp2_4x32b);
  832|   288k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, res_temp4_4x32b);
  833|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
  834|   288k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, const_temp_4x32b);
  835|   288k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, const_temp_4x32b);
  836|       |                /* (i4_tmp >> shift) */
  837|   288k|                res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
  838|   288k|                res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b,  shift);
  839|       |
  840|       |                /* Next 4 Pixels */
  841|   288k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, res_temp6_4x32b);
  842|   288k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, res_temp8_4x32b);
  843|   288k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, const_temp_4x32b);
  844|   288k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, const_temp_4x32b);
  845|   288k|                res_temp5_4x32b = _mm_srai_epi32(res_temp5_4x32b,  shift);
  846|   288k|                res_temp7_4x32b = _mm_srai_epi32(res_temp7_4x32b,  shift);
  847|       |
  848|   288k|                res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp5_4x32b);
  849|   288k|                res_temp3_4x32b = _mm_packs_epi32(res_temp3_4x32b, res_temp7_4x32b);
  850|       |
  851|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
  852|   288k|                res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp1_4x32b);
  853|   288k|                res_temp3_4x32b = _mm_packus_epi16(res_temp3_4x32b, res_temp3_4x32b);
  854|       |
  855|       |                /* store four 8-bit output values  */
  856|   288k|                _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), res_temp1_4x32b); /* row = 0*/
  857|   288k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), res_temp3_4x32b); /* row = 1*/
  858|       |
  859|   288k|                pi2_src1 += 8;  /* Pointer update */
  860|   288k|                pi2_src2 += 8;  /* Pointer update */
  861|   288k|                pu1_dst  += 8;  /* Pointer update */
  862|       |
  863|   288k|            } /* inner loop ends here(4-output values in single iteration) */
  864|       |
  865|   184k|            pi2_src1 = pi2_src1 - wd + 2 * src_strd1;  /* Pointer update */
  866|   184k|            pi2_src2 = pi2_src2 - wd + 2 * src_strd2;  /* Pointer update */
  867|   184k|            pu1_dst  = pu1_dst  - wd + 2 * dst_strd;   /* Pointer update */
  868|       |
  869|   184k|        } /* outer loop ends */
  870|  40.6k|    }
  871|  18.4E|    else /* wd multiple of 4 case */
  872|  18.4E|    {
  873|  18.4E|        WORD32 dst0, dst1;
  874|       |        /*  outer for loop starts from here */
  875|  18.4E|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (875:22): [True: 120, False: 18.4E]
  ------------------
  876|    120|        {
  877|    368|            for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (877:26): [True: 248, False: 120]
  ------------------
  878|    248|            {
  879|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
  880|    248|                src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1)); /* row = 0 */
  881|    248|                src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2)); /* row = 0 */
  882|    248|                src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
  883|    248|                src_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
  884|       |
  885|       |                /* 2 rows together */
  886|    248|                src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
  887|    248|                src_temp2_8x16b = _mm_unpacklo_epi64(src_temp2_8x16b, src_temp4_8x16b);
  888|       |
  889|       |                /*i4_tmp = (pi2_src[col]) * wgt*/ /* Lower 16 bit */
  890|    248|                res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
  891|    248|                res_temp2_4x32b  = _mm_mullo_epi16(src_temp2_8x16b, wgt1_8x16b);
  892|       |                /*i4_tmp = (pi2_src[col] ) * wgt*/ /* Higher 16 bit */
  893|    248|                src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
  894|    248|                src_temp2_8x16b  = _mm_mulhi_epi16(src_temp2_8x16b, wgt1_8x16b);
  895|       |
  896|       |                /* Get 32 bit Result */
  897|    248|                res_temp3_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
  898|    248|                res_temp4_4x32b = _mm_unpackhi_epi16(res_temp2_4x32b, src_temp2_8x16b);
  899|       |
  900|    248|                res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
  901|    248|                res_temp2_4x32b = _mm_unpacklo_epi16(res_temp2_4x32b, src_temp2_8x16b);
  902|       |
  903|       |                /* (pi2_src[col] + lvl_shift) * wgt */
  904|    248|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift1_4x32b);
  905|    248|                res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, lvl_shift2_4x32b);
  906|    248|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift1_4x32b);
  907|    248|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift2_4x32b);
  908|       |
  909|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
  910|    248|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, res_temp2_4x32b);
  911|    248|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, res_temp4_4x32b);
  912|       |
  913|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
  914|    248|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, const_temp_4x32b);
  915|    248|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, const_temp_4x32b);
  916|       |
  917|       |                /* (i4_tmp >> shift) */
  918|    248|                res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
  919|    248|                res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b,  shift);
  920|       |
  921|    248|                res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp3_4x32b);
  922|       |
  923|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
  924|    248|                res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp1_4x32b);
  925|       |
  926|    248|                dst0 = _mm_cvtsi128_si32(res_temp1_4x32b);
  927|       |
  928|       |                /* dst row = 1 to 3 */
  929|    248|                res_temp2_4x32b = _mm_shuffle_epi32(res_temp1_4x32b, 1);
  930|       |
  931|       |                /* store four 8-bit output values  */
  932|    248|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
  933|       |
  934|    248|                dst1 = _mm_cvtsi128_si32(res_temp2_4x32b);
  935|       |
  936|       |                /* row = 1 */
  937|    248|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
  938|       |
  939|    248|                pi2_src1 += 4;  /* Pointer update */
  940|    248|                pi2_src2 += 4;  /* Pointer update */
  941|    248|                pu1_dst  += 4;  /* Pointer update */
  942|       |
  943|    248|            } /* inner loop ends here(4-output values in single iteration) */
  944|       |
  945|    120|            pi2_src1 = pi2_src1 - wd + 2 * src_strd1;  /* Pointer update */
  946|    120|            pi2_src2 = pi2_src2 - wd + 2 * src_strd2;  /* Pointer update */
  947|    120|            pu1_dst  = pu1_dst  - wd + 2 * dst_strd;   /* Pointer update */
  948|       |
  949|    120|        } /* outer loop ends */
  950|  18.4E|    }
  951|       |
  952|  40.6k|}
ihevc_weighted_pred_chroma_bi_ssse3:
 1038|  40.6k|{
 1039|  40.6k|    WORD32 row, col, temp1, temp2;
 1040|  40.6k|    WORD32 wdx2;
 1041|       |
 1042|  40.6k|    __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1043|  40.6k|    __m128i const_temp_4x32b, lvl_shift1_4x32b, lvl_shift2_4x32b, wgt0_8x16b, wgt1_8x16b;
 1044|  40.6k|    __m128i res_temp1_4x32b, res_temp2_4x32b, res_temp3_4x32b, res_temp4_4x32b;
 1045|       |
 1046|  40.6k|    ASSERT(wd % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  40.6k|#define ASSERT(x) assert((x))
  ------------------
 1047|  40.6k|    ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  40.6k|#define ASSERT(x) assert((x))
  ------------------
 1048|       |
 1049|  40.6k|    temp1 = (off0_cb + off1_cb + 1) << (shift - 1);
 1050|  40.6k|    temp2 = (off0_cr + off1_cr + 1) << (shift - 1);
 1051|       |
 1052|       |    // seting values in register
 1053|  40.6k|    lvl_shift1_4x32b = _mm_set1_epi16(lvl_shift1);
 1054|  40.6k|    wgt0_8x16b = _mm_set_epi16(wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb, wgt0_cr, wgt0_cb);
 1055|  40.6k|    lvl_shift2_4x32b = _mm_set1_epi16(lvl_shift2);
 1056|  40.6k|    wgt1_8x16b = _mm_set_epi16(wgt1_cr, wgt1_cb, wgt1_cr, wgt1_cb, wgt1_cr, wgt1_cb, wgt1_cr, wgt1_cb);
 1057|       |
 1058|       |    /* lvl_shift1 * wgt0 */
 1059|  40.6k|    res_temp1_4x32b = _mm_mullo_epi16(lvl_shift1_4x32b, wgt0_8x16b);
 1060|  40.6k|    res_temp2_4x32b = _mm_mulhi_epi16(lvl_shift1_4x32b, wgt0_8x16b);
 1061|       |    /* lvl_shift2 * wgt1 */
 1062|  40.6k|    res_temp3_4x32b = _mm_mullo_epi16(lvl_shift2_4x32b, wgt1_8x16b);
 1063|  40.6k|    res_temp4_4x32b = _mm_mulhi_epi16(lvl_shift2_4x32b, wgt1_8x16b);
 1064|       |
 1065|  40.6k|    const_temp_4x32b = _mm_set_epi32(temp2, temp1, temp2, temp1);
 1066|  40.6k|    wdx2 = wd * 2;
 1067|       |
 1068|       |    /* lvl_shift1 * wgt0 */
 1069|  40.6k|    lvl_shift1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, res_temp2_4x32b);
 1070|       |    /* lvl_shift2 * wgt1 */
 1071|  40.6k|    lvl_shift2_4x32b = _mm_unpacklo_epi16(res_temp3_4x32b, res_temp4_4x32b);
 1072|       |
 1073|  40.6k|    if(0 == (wdx2 & 7)) /* wdx2 multiple of 8 case */
  ------------------
  |  Branch (1073:8): [True: 40.6k, False: 10]
  ------------------
 1074|  40.6k|    {
 1075|  40.6k|        __m128i res_temp5_4x32b, res_temp6_4x32b, res_temp7_4x32b, res_temp8_4x32b;
 1076|       |        /*  outer for loop starts from here */
 1077|   133k|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1077:22): [True: 92.8k, False: 40.6k]
  ------------------
 1078|  92.8k|        {
 1079|   240k|            for(col = 0; col < wdx2; col += 8)
  ------------------
  |  Branch (1079:26): [True: 147k, False: 92.8k]
  ------------------
 1080|   147k|            {
 1081|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1082|   147k|                src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1)); /* row = 0 */
 1083|   147k|                src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2)); /* row = 0 */
 1084|   147k|                src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
 1085|   147k|                src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
 1086|       |
 1087|       |                /*i4_tmp = (pi2_src[col]) * wgt*/ /* Lower 16 bit */
 1088|   147k|                res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
 1089|   147k|                res_temp2_4x32b  = _mm_mullo_epi16(src_temp2_8x16b, wgt1_8x16b);
 1090|   147k|                res_temp3_4x32b  = _mm_mullo_epi16(src_temp3_8x16b, wgt0_8x16b);
 1091|   147k|                res_temp4_4x32b  = _mm_mullo_epi16(src_temp4_8x16b, wgt1_8x16b);
 1092|       |                /*i4_tmp = (pi2_src[col] ) * wgt*/ /* Higher 16 bit */
 1093|   147k|                src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
 1094|   147k|                src_temp2_8x16b  = _mm_mulhi_epi16(src_temp2_8x16b, wgt1_8x16b);
 1095|   147k|                src_temp3_8x16b  = _mm_mulhi_epi16(src_temp3_8x16b, wgt0_8x16b);
 1096|   147k|                src_temp4_8x16b  = _mm_mulhi_epi16(src_temp4_8x16b, wgt1_8x16b);
 1097|       |
 1098|       |                /* Get 32 bit Result */
 1099|   147k|                res_temp5_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
 1100|   147k|                res_temp6_4x32b = _mm_unpackhi_epi16(res_temp2_4x32b, src_temp2_8x16b);
 1101|   147k|                res_temp7_4x32b = _mm_unpackhi_epi16(res_temp3_4x32b, src_temp3_8x16b);
 1102|   147k|                res_temp8_4x32b = _mm_unpackhi_epi16(res_temp4_4x32b, src_temp4_8x16b);
 1103|       |
 1104|   147k|                res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
 1105|   147k|                res_temp2_4x32b = _mm_unpacklo_epi16(res_temp2_4x32b, src_temp2_8x16b);
 1106|   147k|                res_temp3_4x32b = _mm_unpacklo_epi16(res_temp3_4x32b, src_temp3_8x16b);
 1107|   147k|                res_temp4_4x32b = _mm_unpacklo_epi16(res_temp4_4x32b, src_temp4_8x16b);
 1108|       |
 1109|       |                /* (pi2_src[col] + lvl_shift) * wgt */
 1110|   147k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, lvl_shift1_4x32b);
 1111|   147k|                res_temp6_4x32b = _mm_add_epi32(res_temp6_4x32b, lvl_shift2_4x32b);
 1112|   147k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, lvl_shift1_4x32b);
 1113|   147k|                res_temp8_4x32b = _mm_add_epi32(res_temp8_4x32b, lvl_shift2_4x32b);
 1114|   147k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift1_4x32b);
 1115|   147k|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift2_4x32b);
 1116|   147k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift1_4x32b);
 1117|   147k|                res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, lvl_shift2_4x32b);
 1118|       |
 1119|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
 1120|   147k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, res_temp2_4x32b);
 1121|   147k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, res_temp4_4x32b);
 1122|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
 1123|   147k|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, const_temp_4x32b);
 1124|   147k|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, const_temp_4x32b);
 1125|       |                /* (i4_tmp >> shift) */
 1126|   147k|                res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
 1127|   147k|                res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b,  shift);
 1128|       |
 1129|       |                /* Next 4 Pixels */
 1130|   147k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, res_temp6_4x32b);
 1131|   147k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, res_temp8_4x32b);
 1132|   147k|                res_temp5_4x32b = _mm_add_epi32(res_temp5_4x32b, const_temp_4x32b);
 1133|   147k|                res_temp7_4x32b = _mm_add_epi32(res_temp7_4x32b, const_temp_4x32b);
 1134|   147k|                res_temp5_4x32b = _mm_srai_epi32(res_temp5_4x32b,  shift);
 1135|   147k|                res_temp7_4x32b = _mm_srai_epi32(res_temp7_4x32b,  shift);
 1136|       |
 1137|   147k|                res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp5_4x32b);
 1138|   147k|                res_temp3_4x32b = _mm_packs_epi32(res_temp3_4x32b, res_temp7_4x32b);
 1139|       |
 1140|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1141|   147k|                res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp1_4x32b);
 1142|   147k|                res_temp3_4x32b = _mm_packus_epi16(res_temp3_4x32b, res_temp3_4x32b);
 1143|       |
 1144|       |                /* store four 8-bit output values  */
 1145|   147k|                _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), res_temp1_4x32b); /* row = 0*/
 1146|   147k|                _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), res_temp3_4x32b); /* row = 1*/
 1147|       |
 1148|   147k|                pi2_src1 += 8;  /* Pointer update */
 1149|   147k|                pi2_src2 += 8;  /* Pointer update */
 1150|   147k|                pu1_dst  += 8;  /* Pointer update */
 1151|       |
 1152|   147k|            } /* inner loop ends here(4-output values in single iteration) */
 1153|       |
 1154|  92.8k|            pi2_src1 = pi2_src1 - wdx2 + 2 * src_strd1;    /* Pointer update */
 1155|  92.8k|            pi2_src2 = pi2_src2 - wdx2 + 2 * src_strd2;    /* Pointer update */
 1156|  92.8k|            pu1_dst  = pu1_dst  - wdx2 + 2 * dst_strd;   /* Pointer update */
 1157|       |
 1158|  92.8k|        } /* outer loop ends */
 1159|  40.6k|    }
 1160|     10|    else /* wdx2 multiple of 4 case */
 1161|     10|    {
 1162|     10|        WORD32 dst0, dst1;
 1163|       |        /*  outer for loop starts from here */
 1164|     70|        for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1164:22): [True: 60, False: 10]
  ------------------
 1165|     60|        {
 1166|    184|            for(col = 0; col < wdx2; col += 4)
  ------------------
  |  Branch (1166:26): [True: 124, False: 60]
  ------------------
 1167|    124|            {
 1168|       |                /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1169|    124|                src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1)); /* row = 0 */
 1170|    124|                src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2)); /* row = 0 */
 1171|    124|                src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + 1 * src_strd1)); /* row = 1 */
 1172|    124|                src_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + 1 * src_strd2)); /* row = 1 */
 1173|       |
 1174|       |                /* 2 rows together */
 1175|    124|                src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
 1176|    124|                src_temp2_8x16b = _mm_unpacklo_epi64(src_temp2_8x16b, src_temp4_8x16b);
 1177|       |
 1178|       |                /*i4_tmp = (pi2_src[col]) * wgt*/ /* Lower 16 bit */
 1179|    124|                res_temp1_4x32b  = _mm_mullo_epi16(src_temp1_8x16b, wgt0_8x16b);
 1180|    124|                res_temp2_4x32b  = _mm_mullo_epi16(src_temp2_8x16b, wgt1_8x16b);
 1181|       |                /*i4_tmp = (pi2_src[col] ) * wgt*/ /* Higher 16 bit */
 1182|    124|                src_temp1_8x16b  = _mm_mulhi_epi16(src_temp1_8x16b, wgt0_8x16b);
 1183|    124|                src_temp2_8x16b  = _mm_mulhi_epi16(src_temp2_8x16b, wgt1_8x16b);
 1184|       |
 1185|       |                /* Get 32 bit Result */
 1186|    124|                res_temp3_4x32b = _mm_unpackhi_epi16(res_temp1_4x32b, src_temp1_8x16b);
 1187|    124|                res_temp4_4x32b = _mm_unpackhi_epi16(res_temp2_4x32b, src_temp2_8x16b);
 1188|       |
 1189|    124|                res_temp1_4x32b = _mm_unpacklo_epi16(res_temp1_4x32b, src_temp1_8x16b);
 1190|    124|                res_temp2_4x32b = _mm_unpacklo_epi16(res_temp2_4x32b, src_temp2_8x16b);
 1191|       |
 1192|       |                /* (pi2_src[col] + lvl_shift) * wgt */
 1193|    124|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, lvl_shift1_4x32b);
 1194|    124|                res_temp4_4x32b = _mm_add_epi32(res_temp4_4x32b, lvl_shift2_4x32b);
 1195|    124|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, lvl_shift1_4x32b);
 1196|    124|                res_temp2_4x32b = _mm_add_epi32(res_temp2_4x32b, lvl_shift2_4x32b);
 1197|       |
 1198|       |                /* (pi2_src1[col] + lvl_shift1) * wgt0 + (pi2_src2[col] + lvl_shift2) * wgt1 */
 1199|    124|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, res_temp2_4x32b);
 1200|    124|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, res_temp4_4x32b);
 1201|       |
 1202|       |                /* i4_tmp += (off0 + off1 + 1) << (shift - 1); */
 1203|    124|                res_temp1_4x32b = _mm_add_epi32(res_temp1_4x32b, const_temp_4x32b);
 1204|    124|                res_temp3_4x32b = _mm_add_epi32(res_temp3_4x32b, const_temp_4x32b);
 1205|       |
 1206|       |                /* (i4_tmp >> shift) */
 1207|    124|                res_temp1_4x32b = _mm_srai_epi32(res_temp1_4x32b,  shift);
 1208|    124|                res_temp3_4x32b = _mm_srai_epi32(res_temp3_4x32b,  shift);
 1209|       |
 1210|    124|                res_temp1_4x32b = _mm_packs_epi32(res_temp1_4x32b, res_temp3_4x32b);
 1211|       |
 1212|       |                /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1213|    124|                res_temp1_4x32b = _mm_packus_epi16(res_temp1_4x32b, res_temp1_4x32b);
 1214|       |
 1215|    124|                dst0 = _mm_cvtsi128_si32(res_temp1_4x32b);
 1216|       |
 1217|       |                /* dst row = 1 to 3 */
 1218|    124|                res_temp2_4x32b = _mm_shuffle_epi32(res_temp1_4x32b, 1);
 1219|       |
 1220|       |                /* store four 8-bit output values  */
 1221|    124|                *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 1222|       |
 1223|    124|                dst1 = _mm_cvtsi128_si32(res_temp2_4x32b);
 1224|       |
 1225|       |                /* row = 1 */
 1226|    124|                *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 1227|       |
 1228|    124|                pi2_src1 += 4;  /* Pointer update */
 1229|    124|                pi2_src2 += 4;  /* Pointer update */
 1230|    124|                pu1_dst  += 4;  /* Pointer update */
 1231|       |
 1232|    124|            } /* inner loop ends here(4-output values in single iteration) */
 1233|       |
 1234|     60|            pi2_src1 = pi2_src1 - wdx2 + 2 * src_strd1;    /* Pointer update */
 1235|     60|            pi2_src2 = pi2_src2 - wdx2 + 2 * src_strd2;    /* Pointer update */
 1236|     60|            pu1_dst  = pu1_dst  - wdx2 + 2 * dst_strd;   /* Pointer update */
 1237|     60|        }
 1238|     10|    }
 1239|       |
 1240|  40.6k|}
ihevc_weighted_pred_bi_default_ssse3:
 1304|  2.92M|{
 1305|  2.92M|    {
 1306|  2.92M|        WORD32 row, col, temp;
 1307|  2.92M|        WORD32 shift;
 1308|       |
 1309|  2.92M|        __m128i src_temp1_8x16b, src_temp2_8x16b, src_temp3_8x16b, src_temp4_8x16b;
 1310|  2.92M|        __m128i const_temp_8x16b, lvl_shift1_8x16b, lvl_shift2_8x16b;
 1311|  2.92M|        __m128i src_temp5_8x16b, src_temp6_8x16b, src_temp7_8x16b, src_temp8_8x16b;
 1312|       |
 1313|  2.92M|        ASSERT(wd % 4 == 0); /* checking assumption*/
  ------------------
  |  |   55|  2.92M|#define ASSERT(x) assert((x))
  ------------------
 1314|  2.92M|        ASSERT(ht % 2 == 0); /* checking assumption*/
  ------------------
  |  |   55|  2.92M|#define ASSERT(x) assert((x))
  ------------------
 1315|       |
 1316|  2.92M|        shift = SHIFT_14_MINUS_BIT_DEPTH + 1;
  ------------------
  |  |   41|  2.92M|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|  2.92M|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
 1317|  2.92M|        temp = 1 << (shift - 1);
 1318|       |
 1319|       |        // seting values in register
 1320|  2.92M|        lvl_shift1_8x16b = _mm_set1_epi16(lvl_shift1);
 1321|  2.92M|        lvl_shift2_8x16b = _mm_set1_epi16(lvl_shift2);
 1322|  2.92M|        const_temp_8x16b = _mm_set1_epi16(temp);
 1323|       |
 1324|  2.92M|        lvl_shift1_8x16b = _mm_adds_epi16(lvl_shift1_8x16b, lvl_shift2_8x16b);
 1325|  2.92M|        lvl_shift1_8x16b = _mm_adds_epi16(lvl_shift1_8x16b, const_temp_8x16b);
 1326|       |
 1327|  2.92M|        if(0 == (ht & 3)) /* ht multiple of 4*/
  ------------------
  |  Branch (1327:12): [True: 2.92M, False: 695]
  ------------------
 1328|  2.92M|        {
 1329|  2.92M|            if(0 == (wd & 15)) /* wd multiple of 16 case */
  ------------------
  |  Branch (1329:16): [True: 20.8k, False: 2.90M]
  ------------------
 1330|  20.8k|            {
 1331|  20.8k|                __m128i src_temp9_8x16b,  src_temp10_8x16b, src_temp11_8x16b, src_temp12_8x16b;
 1332|  20.8k|                __m128i src_temp13_8x16b, src_temp14_8x16b, src_temp15_8x16b, src_temp16_8x16b;
 1333|       |                /*  outer for loop starts from here */
 1334|   111k|                for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (1334:30): [True: 90.2k, False: 20.8k]
  ------------------
 1335|  90.2k|                {
 1336|   266k|                    for(col = 0; col < wd; col += 16)
  ------------------
  |  Branch (1336:34): [True: 176k, False: 90.2k]
  ------------------
 1337|   176k|                    {
 1338|       |                        /*load 8 pixel values */ /* First 8 Values */
 1339|   176k|                        src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1));
 1340|   176k|                        src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2));
 1341|       |                        /* row = 1 */
 1342|   176k|                        src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + src_strd1));
 1343|   176k|                        src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + src_strd2));
 1344|       |                        /* row = 2 */
 1345|   176k|                        src_temp5_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 2 * src_strd1));
 1346|   176k|                        src_temp6_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 2 * src_strd2));
 1347|       |                        /* row = 3 */
 1348|   176k|                        src_temp7_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 3 * src_strd1));
 1349|   176k|                        src_temp8_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 3 * src_strd2));
 1350|       |
 1351|       |                        /*load 8 pixel values */ /* Second 8 Values */
 1352|   176k|                        src_temp9_8x16b  = _mm_loadu_si128((__m128i *)(pi2_src1 + 8));
 1353|   176k|                        src_temp10_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 8));
 1354|       |                        /* row = 1 */
 1355|   176k|                        src_temp11_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + src_strd1 + 8));
 1356|   176k|                        src_temp12_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + src_strd2 + 8));
 1357|       |                        /* row = 2 */
 1358|   176k|                        src_temp13_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 2 * src_strd1 + 8));
 1359|   176k|                        src_temp14_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 2 * src_strd2 + 8));
 1360|       |
 1361|       |                        /* (pi2_src1[col] + pi2_src2[col]) */ /* First 8 Values */
 1362|   176k|                        src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1363|   176k|                        src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1364|   176k|                        src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1365|   176k|                        src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, src_temp8_8x16b);
 1366|       |
 1367|       |                        /*load 8 pixel values */ /* Second 8 Values */
 1368|       |                        /* row = 3 */
 1369|   176k|                        src_temp15_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 3 * src_strd1 + 8));
 1370|   176k|                        src_temp16_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 3 * src_strd2 + 8));
 1371|       |
 1372|       |                        /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */ /* First 8 Values */
 1373|   176k|                        src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 1374|   176k|                        src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, lvl_shift1_8x16b);
 1375|   176k|                        src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, lvl_shift1_8x16b);
 1376|   176k|                        src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, lvl_shift1_8x16b);
 1377|       |
 1378|       |                        /* (pi2_src1[col] + pi2_src2[col]) */ /* Second 8 Values */
 1379|   176k|                        src_temp9_8x16b  = _mm_adds_epi16(src_temp9_8x16b,  src_temp10_8x16b);
 1380|   176k|                        src_temp11_8x16b = _mm_adds_epi16(src_temp11_8x16b, src_temp12_8x16b);
 1381|   176k|                        src_temp13_8x16b = _mm_adds_epi16(src_temp13_8x16b, src_temp14_8x16b);
 1382|   176k|                        src_temp15_8x16b = _mm_adds_epi16(src_temp15_8x16b, src_temp16_8x16b);
 1383|       |
 1384|       |                        /* (i4_tmp >> shift) */ /* First 8 Values */
 1385|   176k|                        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 1386|   176k|                        src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  shift);
 1387|   176k|                        src_temp5_8x16b = _mm_srai_epi16(src_temp5_8x16b,  shift);
 1388|   176k|                        src_temp7_8x16b = _mm_srai_epi16(src_temp7_8x16b,  shift);
 1389|       |
 1390|       |                        /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */ /* Second 8 Values */
 1391|   176k|                        src_temp9_8x16b  = _mm_adds_epi16(src_temp9_8x16b, lvl_shift1_8x16b);
 1392|   176k|                        src_temp11_8x16b = _mm_adds_epi16(src_temp11_8x16b, lvl_shift1_8x16b);
 1393|   176k|                        src_temp13_8x16b = _mm_adds_epi16(src_temp13_8x16b, lvl_shift1_8x16b);
 1394|   176k|                        src_temp15_8x16b = _mm_adds_epi16(src_temp15_8x16b, lvl_shift1_8x16b);
 1395|       |
 1396|       |                        /* (i4_tmp >> shift) */ /* Second 8 Values */
 1397|   176k|                        src_temp9_8x16b  = _mm_srai_epi16(src_temp9_8x16b,  shift);
 1398|   176k|                        src_temp11_8x16b = _mm_srai_epi16(src_temp11_8x16b,  shift);
 1399|   176k|                        src_temp13_8x16b = _mm_srai_epi16(src_temp13_8x16b,  shift);
 1400|   176k|                        src_temp15_8x16b = _mm_srai_epi16(src_temp15_8x16b,  shift);
 1401|       |
 1402|       |                        /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */ /* 16 8 Values */
 1403|   176k|                        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp9_8x16b);
 1404|   176k|                        src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, src_temp11_8x16b);
 1405|   176k|                        src_temp5_8x16b = _mm_packus_epi16(src_temp5_8x16b, src_temp13_8x16b);
 1406|   176k|                        src_temp7_8x16b = _mm_packus_epi16(src_temp7_8x16b, src_temp15_8x16b);
 1407|       |
 1408|       |                        /* store four 8-bit output values  */ /* 16 8 Values */
 1409|   176k|                        _mm_storeu_si128((__m128i *)(pu1_dst + 0 * dst_strd), src_temp1_8x16b); /* row = 0*/
 1410|   176k|                        _mm_storeu_si128((__m128i *)(pu1_dst + 1 * dst_strd), src_temp3_8x16b); /* row = 2*/
 1411|   176k|                        _mm_storeu_si128((__m128i *)(pu1_dst + 2 * dst_strd), src_temp5_8x16b); /* row = 1*/
 1412|   176k|                        _mm_storeu_si128((__m128i *)(pu1_dst + 3 * dst_strd), src_temp7_8x16b); /* row = 3*/
 1413|       |
 1414|       |                        /* To update pointer */
 1415|   176k|                        pi2_src1 += 16;
 1416|   176k|                        pi2_src2 += 16;
 1417|   176k|                        pu1_dst  += 16;
 1418|       |
 1419|   176k|                    } /* inner loop ends here(8-output values in single iteration) */
 1420|       |
 1421|  90.2k|                    pi2_src1 = pi2_src1 - wd + 4 * src_strd1;  /* Pointer update */
 1422|  90.2k|                    pi2_src2 = pi2_src2 - wd + 4 * src_strd2;  /* Pointer update */
 1423|  90.2k|                    pu1_dst  = pu1_dst - wd + 4 * dst_strd;   /* Pointer update */
 1424|       |
 1425|  90.2k|                }
 1426|  20.8k|            }
 1427|  2.90M|            else if(0 == (wd & 7)) /* multiple of 8 case */
  ------------------
  |  Branch (1427:21): [True: 2.90M, False: 302]
  ------------------
 1428|  2.90M|            {
 1429|       |                /*  outer for loop starts from here */
 1430|  7.26M|                for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (1430:30): [True: 4.36M, False: 2.90M]
  ------------------
 1431|  4.36M|                {
 1432|  8.72M|                    for(col = 0; col < wd; col += 8)
  ------------------
  |  Branch (1432:34): [True: 4.36M, False: 4.36M]
  ------------------
 1433|  4.36M|                    {
 1434|       |                        /*load 8 pixel values */
 1435|  4.36M|                        src_temp1_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1));
 1436|  4.36M|                        src_temp2_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2));
 1437|       |                        /* row = 1 */
 1438|  4.36M|                        src_temp3_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + src_strd1));
 1439|  4.36M|                        src_temp4_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + src_strd2));
 1440|       |                        /* row = 2 */
 1441|  4.36M|                        src_temp5_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 2 * src_strd1));
 1442|  4.36M|                        src_temp6_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 2 * src_strd2));
 1443|       |                        /* row = 3 */
 1444|  4.36M|                        src_temp7_8x16b = _mm_loadu_si128((__m128i *)(pi2_src1 + 3 * src_strd1));
 1445|  4.36M|                        src_temp8_8x16b = _mm_loadu_si128((__m128i *)(pi2_src2 + 3 * src_strd2));
 1446|       |
 1447|       |                        /* (pi2_src1[col] + pi2_src2[col]) */
 1448|  4.36M|                        src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1449|  4.36M|                        src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, src_temp4_8x16b);
 1450|  4.36M|                        src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1451|  4.36M|                        src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, src_temp8_8x16b);
 1452|       |
 1453|       |                        /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */
 1454|  4.36M|                        src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 1455|  4.36M|                        src_temp3_8x16b = _mm_adds_epi16(src_temp3_8x16b, lvl_shift1_8x16b);
 1456|  4.36M|                        src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, lvl_shift1_8x16b);
 1457|  4.36M|                        src_temp7_8x16b = _mm_adds_epi16(src_temp7_8x16b, lvl_shift1_8x16b);
 1458|       |
 1459|       |                        /* (i4_tmp >> shift) */
 1460|  4.36M|                        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 1461|  4.36M|                        src_temp3_8x16b = _mm_srai_epi16(src_temp3_8x16b,  shift);
 1462|  4.36M|                        src_temp5_8x16b = _mm_srai_epi16(src_temp5_8x16b,  shift);
 1463|  4.36M|                        src_temp7_8x16b = _mm_srai_epi16(src_temp7_8x16b,  shift);
 1464|       |
 1465|       |                        /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1466|  4.36M|                        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp1_8x16b);
 1467|  4.36M|                        src_temp3_8x16b = _mm_packus_epi16(src_temp3_8x16b, src_temp3_8x16b);
 1468|  4.36M|                        src_temp5_8x16b = _mm_packus_epi16(src_temp5_8x16b, src_temp5_8x16b);
 1469|  4.36M|                        src_temp7_8x16b = _mm_packus_epi16(src_temp7_8x16b, src_temp7_8x16b);
 1470|       |
 1471|       |                        /* store four 8-bit output values  */
 1472|  4.36M|                        _mm_storel_epi64((__m128i *)(pu1_dst + 0 * dst_strd), src_temp1_8x16b); /* row = 0*/
 1473|  4.36M|                        _mm_storel_epi64((__m128i *)(pu1_dst + 1 * dst_strd), src_temp3_8x16b); /* row = 2*/
 1474|  4.36M|                        _mm_storel_epi64((__m128i *)(pu1_dst + 2 * dst_strd), src_temp5_8x16b); /* row = 1*/
 1475|  4.36M|                        _mm_storel_epi64((__m128i *)(pu1_dst + 3 * dst_strd), src_temp7_8x16b); /* row = 3*/
 1476|       |
 1477|       |                        /* To update pointer */
 1478|  4.36M|                        pi2_src1 += 8;
 1479|  4.36M|                        pi2_src2 += 8;
 1480|  4.36M|                        pu1_dst  += 8;
 1481|       |
 1482|  4.36M|                    } /* inner loop ends here(8-output values in single iteration) */
 1483|       |
 1484|  4.36M|                    pi2_src1 = pi2_src1 - wd + 4 * src_strd1;  /* Pointer update */
 1485|  4.36M|                    pi2_src2 = pi2_src2 - wd + 4 * src_strd2;  /* Pointer update */
 1486|  4.36M|                    pu1_dst  = pu1_dst - wd + 4 * dst_strd;   /* Pointer update */
 1487|       |
 1488|  4.36M|                }
 1489|  2.90M|            }
 1490|    302|            else /* wd multiple of 4 case*/
 1491|    302|            {
 1492|    302|                WORD32 dst0, dst1, dst2, dst3;
 1493|       |
 1494|       |                /*  outer for loop starts from here */
 1495|  4.80k|                for(row = 0; row < ht; row += 4)
  ------------------
  |  Branch (1495:30): [True: 4.49k, False: 302]
  ------------------
 1496|  4.49k|                {
 1497|  13.8k|                    for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1497:34): [True: 9.34k, False: 4.49k]
  ------------------
 1498|  9.34k|                    {
 1499|       |                        /*load 4 pixel values from 7:0 pos. relative to cur. pos.*/
 1500|  9.34k|                        src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1));
 1501|       |                        /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1502|  9.34k|                        src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2));
 1503|       |
 1504|       |                        /* row = 1 */
 1505|  9.34k|                        src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + src_strd1));
 1506|  9.34k|                        src_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + src_strd2));
 1507|       |                        /* row = 2 */
 1508|  9.34k|                        src_temp5_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + 2 * src_strd1));
 1509|  9.34k|                        src_temp6_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + 2 * src_strd2));
 1510|       |                        /* row = 3 */
 1511|  9.34k|                        src_temp7_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + 3 * src_strd1));
 1512|  9.34k|                        src_temp8_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + 3 * src_strd2));
 1513|       |
 1514|       |                        /* Pack two rows together */
 1515|  9.34k|                        src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
 1516|  9.34k|                        src_temp2_8x16b = _mm_unpacklo_epi64(src_temp2_8x16b, src_temp4_8x16b);
 1517|  9.34k|                        src_temp5_8x16b = _mm_unpacklo_epi64(src_temp5_8x16b, src_temp7_8x16b);
 1518|  9.34k|                        src_temp6_8x16b = _mm_unpacklo_epi64(src_temp6_8x16b, src_temp8_8x16b);
 1519|       |
 1520|       |                        /* (pi2_src1[col] + pi2_src2[col]) */
 1521|  9.34k|                        src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1522|  9.34k|                        src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, src_temp6_8x16b);
 1523|       |
 1524|       |                        /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */
 1525|  9.34k|                        src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 1526|  9.34k|                        src_temp5_8x16b = _mm_adds_epi16(src_temp5_8x16b, lvl_shift1_8x16b);
 1527|       |
 1528|       |                        /* (i4_tmp >> shift) */
 1529|  9.34k|                        src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 1530|  9.34k|                        src_temp5_8x16b = _mm_srai_epi16(src_temp5_8x16b,  shift);
 1531|       |
 1532|       |                        /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1533|  9.34k|                        src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp1_8x16b);
 1534|  9.34k|                        src_temp5_8x16b = _mm_packus_epi16(src_temp5_8x16b, src_temp5_8x16b);
 1535|       |
 1536|  9.34k|                        dst0 = _mm_cvtsi128_si32(src_temp1_8x16b);
 1537|       |                        /* dst row = 1 to 3 */
 1538|  9.34k|                        src_temp2_8x16b = _mm_shuffle_epi32(src_temp1_8x16b, 1);
 1539|  9.34k|                        src_temp4_8x16b = _mm_shuffle_epi32(src_temp5_8x16b, 1);
 1540|       |
 1541|       |                        /* store four 8-bit output values  */
 1542|  9.34k|                        *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 1543|       |
 1544|  9.34k|                        dst1 = _mm_cvtsi128_si32(src_temp2_8x16b);
 1545|  9.34k|                        dst2 = _mm_cvtsi128_si32(src_temp5_8x16b);
 1546|  9.34k|                        dst3 = _mm_cvtsi128_si32(src_temp4_8x16b);
 1547|       |
 1548|       |                        /* row = 1 to row = 3 */
 1549|  9.34k|                        *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 1550|  9.34k|                        *(WORD32 *)(&pu1_dst[2 * dst_strd]) = dst2;
 1551|  9.34k|                        *(WORD32 *)(&pu1_dst[3 * dst_strd]) = dst3;
 1552|       |
 1553|       |                        /* To update pointer */
 1554|  9.34k|                        pi2_src1 += 4;
 1555|  9.34k|                        pi2_src2 += 4;
 1556|  9.34k|                        pu1_dst  += 4;
 1557|       |
 1558|  9.34k|                    } /* inner loop ends here(4-output values in single iteration) */
 1559|       |
 1560|  4.49k|                    pi2_src1 = pi2_src1 - wd + 4 * src_strd1; /* Pointer update */
 1561|  4.49k|                    pi2_src2 = pi2_src2 - wd + 4 * src_strd2; /* Pointer update */
 1562|  4.49k|                    pu1_dst  = pu1_dst  - wd + 4 * dst_strd;  /* Pointer update */
 1563|       |
 1564|  4.49k|                }
 1565|    302|            }
 1566|  2.92M|        }
 1567|    695|        else /* ht multiple of 2 case and wd multiple of 4 case*/
 1568|    695|        {
 1569|       |
 1570|    695|            WORD32 dst0, dst1;
 1571|       |
 1572|       |            /*  outer for loop starts from here */
 1573|  1.99k|            for(row = 0; row < ht; row += 2)
  ------------------
  |  Branch (1573:26): [True: 1.30k, False: 695]
  ------------------
 1574|  1.30k|            {
 1575|  6.51k|                for(col = 0; col < wd; col += 4)
  ------------------
  |  Branch (1575:30): [True: 5.21k, False: 1.30k]
  ------------------
 1576|  5.21k|                {
 1577|       |                    /*load 4 pixel values from 7:0 pos. relative to cur. pos.*/
 1578|  5.21k|                    src_temp1_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1));
 1579|       |                    /*load 8 pixel values from 7:0 pos. relative to cur. pos.*/
 1580|  5.21k|                    src_temp2_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2));
 1581|       |
 1582|       |                    /* row = 1 */
 1583|  5.21k|                    src_temp3_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src1 + src_strd1));
 1584|  5.21k|                    src_temp4_8x16b = _mm_loadl_epi64((__m128i *)(pi2_src2 + src_strd2));
 1585|       |
 1586|       |                    /* Pack two rows together */
 1587|  5.21k|                    src_temp1_8x16b = _mm_unpacklo_epi64(src_temp1_8x16b, src_temp3_8x16b);
 1588|  5.21k|                    src_temp2_8x16b = _mm_unpacklo_epi64(src_temp2_8x16b, src_temp4_8x16b);
 1589|       |
 1590|       |                    /* (pi2_src1[col] + pi2_src2[col]) */
 1591|  5.21k|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, src_temp2_8x16b);
 1592|       |
 1593|       |                    /* i4_tmp = (pi2_src1[col] + pi2_src2[col] + lvl_shift1 + lvl_shift2 + shift_value) */
 1594|  5.21k|                    src_temp1_8x16b = _mm_adds_epi16(src_temp1_8x16b, lvl_shift1_8x16b);
 1595|       |
 1596|       |                    /* (i4_tmp >> shift) */
 1597|  5.21k|                    src_temp1_8x16b = _mm_srai_epi16(src_temp1_8x16b,  shift);
 1598|       |
 1599|       |                    /* pu1_dst[col] = CLIP_U8(i4_tmp >> shift); */
 1600|  5.21k|                    src_temp1_8x16b = _mm_packus_epi16(src_temp1_8x16b, src_temp1_8x16b);
 1601|       |
 1602|  5.21k|                    dst0 = _mm_cvtsi128_si32(src_temp1_8x16b);
 1603|       |                    /* dst row = 1 to 3 */
 1604|  5.21k|                    src_temp2_8x16b = _mm_shuffle_epi32(src_temp1_8x16b, 1);
 1605|       |
 1606|       |                    /* store four 8-bit output values  */
 1607|  5.21k|                    *(WORD32 *)(&pu1_dst[0 * dst_strd]) = dst0;
 1608|       |
 1609|  5.21k|                    dst1 = _mm_cvtsi128_si32(src_temp2_8x16b);
 1610|       |
 1611|       |                    /* row = 1 to row = 3 */
 1612|  5.21k|                    *(WORD32 *)(&pu1_dst[1 * dst_strd]) = dst1;
 1613|       |
 1614|       |                    /* To update pointer */
 1615|  5.21k|                    pi2_src1 += 4;
 1616|  5.21k|                    pi2_src2 += 4;
 1617|  5.21k|                    pu1_dst  += 4;
 1618|       |
 1619|  5.21k|                } /* inner loop ends here(4-output values in single iteration) */
 1620|       |
 1621|  1.30k|                pi2_src1 = pi2_src1 - wd + 2 * src_strd1; /* Pointer update */
 1622|  1.30k|                pi2_src2 = pi2_src2 - wd + 2 * src_strd2; /* Pointer update */
 1623|  1.30k|                pu1_dst  = pu1_dst  - wd + 2 * dst_strd;  /* Pointer update */
 1624|       |
 1625|  1.30k|            }
 1626|       |
 1627|    695|        }
 1628|       |
 1629|  2.92M|    }
 1630|  2.92M|}

ihevcd_set_default_params:
  904|    985|{
  905|       |
  906|    985|    WORD32 ret = IV_SUCCESS;
  907|       |
  908|    985|    ps_codec->e_pic_skip_mode = IVD_SKIP_NONE;
  909|    985|    ps_codec->i4_strd = 0;
  910|    985|    ps_codec->i4_disp_strd = 0;
  911|    985|    ps_codec->i4_header_mode = 0;
  912|    985|    ps_codec->e_pic_out_order = IVD_DISPLAY_FRAME_OUT;
  913|    985|    return ret;
  914|    985|}
ihevcd_update_function_ptr:
  917|  1.64k|{
  918|       |
  919|       |    /* Init inter pred function array */
  920|  1.64k|    ps_codec->apf_inter_pred[0] = NULL;
  921|  1.64k|    ps_codec->apf_inter_pred[1] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_fptr;
  922|  1.64k|    ps_codec->apf_inter_pred[2] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_fptr;
  923|  1.64k|    ps_codec->apf_inter_pred[3] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_fptr;
  924|  1.64k|    ps_codec->apf_inter_pred[4] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr;
  925|  1.64k|    ps_codec->apf_inter_pred[5] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_w16out_fptr;
  926|  1.64k|    ps_codec->apf_inter_pred[6] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16out_fptr;
  927|  1.64k|    ps_codec->apf_inter_pred[7] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr;
  928|  1.64k|    ps_codec->apf_inter_pred[8] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr;
  929|  1.64k|    ps_codec->apf_inter_pred[9] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_fptr;
  930|  1.64k|    ps_codec->apf_inter_pred[10] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_w16out_fptr;
  931|  1.64k|    ps_codec->apf_inter_pred[11] = NULL;
  932|  1.64k|    ps_codec->apf_inter_pred[12] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_fptr;
  933|  1.64k|    ps_codec->apf_inter_pred[13] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_fptr;
  934|  1.64k|    ps_codec->apf_inter_pred[14] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_fptr;
  935|  1.64k|    ps_codec->apf_inter_pred[15] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr;
  936|  1.64k|    ps_codec->apf_inter_pred[16] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_w16out_fptr;
  937|  1.64k|    ps_codec->apf_inter_pred[17] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16out_fptr;
  938|  1.64k|    ps_codec->apf_inter_pred[18] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr;
  939|  1.64k|    ps_codec->apf_inter_pred[19] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr;
  940|  1.64k|    ps_codec->apf_inter_pred[20] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_fptr;
  941|  1.64k|    ps_codec->apf_inter_pred[21] = (pf_inter_pred)ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr;
  942|       |
  943|       |    /* Init intra pred function array */
  944|  1.64k|    ps_codec->apf_intra_pred_luma[0] = (pf_intra_pred)NULL;
  945|  1.64k|    ps_codec->apf_intra_pred_luma[1] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_planar_fptr;
  946|  1.64k|    ps_codec->apf_intra_pred_luma[2] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_dc_fptr;
  947|  1.64k|    ps_codec->apf_intra_pred_luma[3] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode2_fptr;
  948|  1.64k|    ps_codec->apf_intra_pred_luma[4] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_3_to_9_fptr;
  949|  1.64k|    ps_codec->apf_intra_pred_luma[5] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_horz_fptr;
  950|  1.64k|    ps_codec->apf_intra_pred_luma[6] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_11_to_17_fptr;
  951|  1.64k|    ps_codec->apf_intra_pred_luma[7] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_18_34_fptr;
  952|  1.64k|    ps_codec->apf_intra_pred_luma[8] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_19_to_25_fptr;
  953|  1.64k|    ps_codec->apf_intra_pred_luma[9] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_ver_fptr;
  954|  1.64k|    ps_codec->apf_intra_pred_luma[10] =  (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_27_to_33_fptr;
  955|       |
  956|  1.64k|    ps_codec->apf_intra_pred_chroma[0] = (pf_intra_pred)NULL;
  957|  1.64k|    ps_codec->apf_intra_pred_chroma[1] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_planar_fptr;
  958|  1.64k|    ps_codec->apf_intra_pred_chroma[2] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_dc_fptr;
  959|  1.64k|    ps_codec->apf_intra_pred_chroma[3] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode2_fptr;
  960|  1.64k|    ps_codec->apf_intra_pred_chroma[4] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_3_to_9_fptr;
  961|  1.64k|    ps_codec->apf_intra_pred_chroma[5] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_horz_fptr;
  962|  1.64k|    ps_codec->apf_intra_pred_chroma[6] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_11_to_17_fptr;
  963|  1.64k|    ps_codec->apf_intra_pred_chroma[7] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_18_34_fptr;
  964|  1.64k|    ps_codec->apf_intra_pred_chroma[8] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_19_to_25_fptr;
  965|  1.64k|    ps_codec->apf_intra_pred_chroma[9] =  (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_ver_fptr;
  966|  1.64k|    ps_codec->apf_intra_pred_chroma[10] = (pf_intra_pred)ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_27_to_33_fptr;
  967|       |
  968|       |    /* Init itrans_recon function array */
  969|  1.64k|    ps_codec->apf_itrans_recon[0] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_4x4_ttype1_fptr;
  970|  1.64k|    ps_codec->apf_itrans_recon[1] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_4x4_fptr;
  971|  1.64k|    ps_codec->apf_itrans_recon[2] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_8x8_fptr;
  972|  1.64k|    ps_codec->apf_itrans_recon[3] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_16x16_fptr;
  973|  1.64k|    ps_codec->apf_itrans_recon[4] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_itrans_recon_32x32_fptr;
  974|  1.64k|    ps_codec->apf_itrans_recon[5] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_chroma_itrans_recon_4x4_fptr;
  975|  1.64k|    ps_codec->apf_itrans_recon[6] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_chroma_itrans_recon_8x8_fptr;
  976|  1.64k|    ps_codec->apf_itrans_recon[7] = (pf_itrans_recon)ps_codec->s_func_selector.ihevc_chroma_itrans_recon_16x16_fptr;
  977|       |
  978|       |    /* Init recon function array */
  979|  1.64k|    ps_codec->apf_recon[0] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_4x4_ttype1_fptr;
  980|  1.64k|    ps_codec->apf_recon[1] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_4x4_fptr;
  981|  1.64k|    ps_codec->apf_recon[2] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_8x8_fptr;
  982|  1.64k|    ps_codec->apf_recon[3] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_16x16_fptr;
  983|  1.64k|    ps_codec->apf_recon[4] = (pf_recon)ps_codec->s_func_selector.ihevc_recon_32x32_fptr;
  984|  1.64k|    ps_codec->apf_recon[5] = (pf_recon)ps_codec->s_func_selector.ihevc_chroma_recon_4x4_fptr;
  985|  1.64k|    ps_codec->apf_recon[6] = (pf_recon)ps_codec->s_func_selector.ihevc_chroma_recon_8x8_fptr;
  986|  1.64k|    ps_codec->apf_recon[7] = (pf_recon)ps_codec->s_func_selector.ihevc_chroma_recon_16x16_fptr;
  987|       |
  988|       |    /* Init itrans_recon_dc function array */
  989|  1.64k|    ps_codec->apf_itrans_recon_dc[0] = (pf_itrans_recon_dc)ps_codec->s_func_selector.ihevcd_itrans_recon_dc_luma_fptr;
  990|  1.64k|    ps_codec->apf_itrans_recon_dc[1] = (pf_itrans_recon_dc)ps_codec->s_func_selector.ihevcd_itrans_recon_dc_chroma_fptr;
  991|       |
  992|       |    /* Init sao function array */
  993|  1.64k|    ps_codec->apf_sao_luma[0] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_fptr;
  994|  1.64k|    ps_codec->apf_sao_luma[1] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_fptr;
  995|  1.64k|    ps_codec->apf_sao_luma[2] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_fptr;
  996|  1.64k|    ps_codec->apf_sao_luma[3] = (pf_sao_luma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_fptr;
  997|       |
  998|  1.64k|    ps_codec->apf_sao_chroma[0] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_chroma_fptr;
  999|  1.64k|    ps_codec->apf_sao_chroma[1] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_chroma_fptr;
 1000|  1.64k|    ps_codec->apf_sao_chroma[2] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_chroma_fptr;
 1001|  1.64k|    ps_codec->apf_sao_chroma[3] = (pf_sao_chroma)ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_chroma_fptr;
 1002|  1.64k|}
ihevcd_init:
 1024|    985|{
 1025|    985|    WORD32 status = IV_SUCCESS;
 1026|    985|    WORD32 i;
 1027|       |
 1028|       |    /* Free any dynamic buffers that are allocated */
 1029|    985|    ihevcd_free_dynamic_bufs(ps_codec);
 1030|       |
 1031|    985|    ps_codec->u4_allocate_dynamic_done = 0;
 1032|    985|    ps_codec->i4_num_disp_bufs = 1;
 1033|    985|    ps_codec->i4_flush_mode = 0;
 1034|       |
 1035|    985|    ps_codec->i4_ht = ps_codec->i4_disp_ht = 0;
 1036|    985|    ps_codec->i4_wd = ps_codec->i4_disp_wd = 0;
 1037|    985|    ps_codec->i4_strd = 0;
 1038|    985|    ps_codec->i4_disp_strd = 0;
 1039|    985|    ps_codec->i4_num_cores = 1;
 1040|       |
 1041|    985|    ps_codec->u4_pic_cnt = 0;
 1042|    985|    ps_codec->u4_disp_cnt = 0;
 1043|       |
 1044|    985|    ps_codec->i4_header_mode = 0;
 1045|    985|    ps_codec->i4_header_in_slice_mode = 0;
 1046|    985|    ps_codec->i4_sps_done = 0;
 1047|    985|    ps_codec->i4_pps_done = 0;
 1048|    985|    ps_codec->i4_init_done   = 1;
 1049|    985|    ps_codec->i4_first_pic_done = 0;
 1050|    985|    ps_codec->s_parse.i4_first_pic_init = 0;
 1051|    985|    ps_codec->i4_error_code = 0;
 1052|    985|    ps_codec->i4_reset_flag = 0;
 1053|    985|    ps_codec->i4_cra_as_first_pic = 1;
 1054|    985|    ps_codec->i4_rasl_output_flag = 0;
 1055|       |
 1056|    985|    ps_codec->i4_prev_poc_msb = 0;
 1057|    985|    ps_codec->i4_prev_poc_lsb = -1;
 1058|    985|    ps_codec->i4_max_prev_poc_lsb = -1;
 1059|    985|    ps_codec->s_parse.i4_abs_pic_order_cnt = -1;
 1060|       |
 1061|       |    /* Set ref chroma format by default to 420SP UV interleaved */
 1062|    985|    ps_codec->e_ref_chroma_fmt = IV_YUV_420SP_UV;
 1063|       |
 1064|       |    /* If the codec is in shared mode and required format is 420 SP VU interleaved then change
 1065|       |     * reference buffers chroma format
 1066|       |     */
 1067|    985|    if(IV_YUV_420SP_VU == ps_codec->e_chroma_fmt)
  ------------------
  |  Branch (1067:8): [True: 80, False: 905]
  ------------------
 1068|     80|    {
 1069|     80|        ps_codec->e_ref_chroma_fmt = IV_YUV_420SP_VU;
 1070|     80|    }
 1071|       |
 1072|       |
 1073|       |
 1074|    985|    ps_codec->i4_disable_deblk_pic = 0;
 1075|       |
 1076|    985|    ps_codec->i4_degrade_pic_cnt    = 0;
 1077|    985|    ps_codec->i4_degrade_pics       = 0;
 1078|    985|    ps_codec->i4_degrade_type       = 0;
 1079|    985|    ps_codec->i4_disable_sao_pic    = 0;
 1080|    985|    ps_codec->i4_fullpel_inter_pred = 0;
 1081|    985|    ps_codec->u4_enable_fmt_conv_ahead = 0;
 1082|    985|    ps_codec->i4_share_disp_buf_cnt = 0;
 1083|       |
 1084|    985|    {
 1085|    985|        sps_t *ps_sps = ps_codec->ps_sps_base;
 1086|    985|        pps_t *ps_pps = ps_codec->ps_pps_base;
 1087|       |
 1088|  17.7k|        for(i = 0; i < MAX_SPS_CNT; i++)
  ------------------
  |  |  317|  17.7k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  |  Branch (1088:20): [True: 16.7k, False: 985]
  ------------------
 1089|  16.7k|        {
 1090|  16.7k|            ps_sps->i1_sps_valid = 0;
 1091|  16.7k|            ps_sps++;
 1092|  16.7k|        }
 1093|       |
 1094|  65.0k|        for(i = 0; i < MAX_PPS_CNT; i++)
  ------------------
  |  |  334|  65.0k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  |  Branch (1094:20): [True: 64.0k, False: 985]
  ------------------
 1095|  64.0k|        {
 1096|  64.0k|            ps_pps->i1_pps_valid = 0;
 1097|  64.0k|            ps_pps++;
 1098|  64.0k|        }
 1099|    985|    }
 1100|       |
 1101|    985|    ihevcd_set_default_params(ps_codec);
 1102|       |    /* Initialize MV Bank buffer manager */
 1103|    985|    ihevc_buf_mgr_init((buf_mgr_t *)ps_codec->pv_mv_buf_mgr);
 1104|       |
 1105|       |    /* Initialize Picture buffer manager */
 1106|    985|    ihevc_buf_mgr_init((buf_mgr_t *)ps_codec->pv_pic_buf_mgr);
 1107|       |
 1108|    985|    ps_codec->ps_pic_buf = (pic_buf_t *)ps_codec->pv_pic_buf_base;
 1109|       |
 1110|    985|    memset(ps_codec->ps_pic_buf, 0, BUF_MGR_MAX_CNT  * sizeof(pic_buf_t));
  ------------------
  |  |   37|    985|#define BUF_MGR_MAX_CNT 64
  ------------------
 1111|       |
 1112|       |
 1113|       |
 1114|       |    /* Initialize display buffer manager */
 1115|    985|    ihevc_disp_mgr_init((disp_mgr_t *)ps_codec->pv_disp_buf_mgr);
 1116|       |
 1117|       |    /* Initialize dpb manager */
 1118|    985|    ihevc_dpb_mgr_init((dpb_mgr_t *)ps_codec->pv_dpb_mgr);
 1119|       |
 1120|    985|    ps_codec->e_processor_soc = SOC_GENERIC;
 1121|       |    /* The following can be over-ridden using soc parameter as a hack */
 1122|    985|    ps_codec->u4_nctb = 0x7FFFFFFF;
 1123|    985|    ihevcd_init_arch(ps_codec);
 1124|       |
 1125|    985|    ihevcd_init_function_ptr(ps_codec);
 1126|       |
 1127|    985|    ihevcd_update_function_ptr(ps_codec);
 1128|       |
 1129|    985|    return status;
 1130|    985|}
ihevcd_allocate_static_bufs:
 1157|    664|{
 1158|    664|    WORD32 size;
 1159|    664|    void *pv_buf;
 1160|    664|    UWORD8 *pu1_buf;
 1161|    664|    WORD32 i;
 1162|    664|    codec_t *ps_codec;
 1163|    664|    IV_API_CALL_STATUS_T status = IV_SUCCESS;
 1164|    664|    void *(*pf_aligned_alloc)(void *pv_mem_ctxt, WORD32 alignment, WORD32 size);
 1165|    664|    void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
 1166|    664|    void *pv_mem_ctxt;
 1167|       |
 1168|       |    /* Request memory for HEVCD object */
 1169|    664|    ps_create_op->s_ivd_create_op_t.pv_handle = NULL;
 1170|       |
 1171|    664|    pf_aligned_alloc = ps_create_ip->s_ivd_create_ip_t.pf_aligned_alloc;
 1172|    664|    pf_aligned_free = ps_create_ip->s_ivd_create_ip_t.pf_aligned_free;
 1173|    664|    pv_mem_ctxt  = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
 1174|       |
 1175|       |
 1176|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, sizeof(iv_obj_t));
 1177|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1178|    664|    memset(pv_buf, 0, sizeof(iv_obj_t));
 1179|    664|    *pps_codec_obj = (iv_obj_t *)pv_buf;
 1180|    664|    ps_create_op->s_ivd_create_op_t.pv_handle = *pps_codec_obj;
 1181|       |
 1182|       |
 1183|    664|    (*pps_codec_obj)->pv_codec_handle = NULL;
 1184|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, sizeof(codec_t));
 1185|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1186|    664|    (*pps_codec_obj)->pv_codec_handle = (codec_t *)pv_buf;
 1187|    664|    ps_codec = (codec_t *)pv_buf;
 1188|       |
 1189|    664|    memset(ps_codec, 0, sizeof(codec_t));
 1190|       |
 1191|    664|#ifndef LOGO_EN
 1192|    664|    ps_codec->i4_share_disp_buf = ps_create_ip->s_ivd_create_ip_t.u4_share_disp_buf;
 1193|       |#else
 1194|       |    ps_codec->i4_share_disp_buf = 0;
 1195|       |#endif
 1196|       |
 1197|       |    /* Shared display mode is supported only for 420SP and 420P formats */
 1198|    664|    if((ps_create_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420P) &&
  ------------------
  |  Branch (1198:8): [True: 451, False: 213]
  ------------------
 1199|    664|       (ps_create_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420SP_UV) &&
  ------------------
  |  Branch (1199:8): [True: 216, False: 235]
  ------------------
 1200|    664|       (ps_create_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420SP_VU))
  ------------------
  |  Branch (1200:8): [True: 145, False: 71]
  ------------------
 1201|    145|    {
 1202|    145|        ps_codec->i4_share_disp_buf = 0;
 1203|    145|    }
 1204|       |
 1205|    664|    if (ps_create_ip->s_ivd_create_ip_t.u4_size == sizeof(ihevcd_cxa_create_ip_t))
  ------------------
  |  Branch (1205:9): [True: 664, False: 0]
  ------------------
 1206|    664|    {
 1207|    664|        ps_codec->u1_enable_cu_info = ps_create_ip->u4_enable_frame_info;
 1208|    664|    }
 1209|       |
 1210|    664|    ps_codec->e_chroma_fmt = ps_create_ip->s_ivd_create_ip_t.e_output_format;
 1211|       |
 1212|    664|    ps_codec->pf_aligned_alloc = pf_aligned_alloc;
 1213|    664|    ps_codec->pf_aligned_free = pf_aligned_free;
 1214|    664|    ps_codec->pv_mem_ctxt = pv_mem_ctxt;
 1215|       |
 1216|       |    /* Request memory to hold thread handles for each processing thread */
 1217|    664|    size = MAX_PROCESS_THREADS * ithread_get_handle_size();
  ------------------
  |  |  121|    664|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|    664|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
 1218|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1219|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1220|    664|    memset(pv_buf, 0, size);
 1221|       |
 1222|  5.97k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  5.97k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  5.97k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1222:16): [True: 5.31k, False: 664]
  ------------------
 1223|  5.31k|    {
 1224|  5.31k|        WORD32 handle_size = ithread_get_handle_size();
 1225|  5.31k|        ps_codec->apv_process_thread_handle[i] =
 1226|  5.31k|                        (UWORD8 *)pv_buf + (i * handle_size);
 1227|  5.31k|    }
 1228|       |
 1229|       |#ifdef KEEP_THREADS_ACTIVE
 1230|       |    /* Request memory to hold mutex (start/done) for each processing thread */
 1231|       |    size = 2 * MAX_PROCESS_THREADS * ithread_get_mutex_lock_size();
 1232|       |    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1233|       |    RETURN_IF((NULL == pv_buf), IV_FAIL);
 1234|       |    memset(pv_buf, 0, size);
 1235|       |
 1236|       |    for(i = 0; i < MAX_PROCESS_THREADS; i++)
 1237|       |    {
 1238|       |        WORD32 ret;
 1239|       |        WORD32 mutex_size = ithread_get_mutex_lock_size();
 1240|       |        ps_codec->apv_proc_start_mutex[i] =
 1241|       |                        (UWORD8 *)pv_buf + (2 * i * mutex_size);
 1242|       |        ps_codec->apv_proc_done_mutex[i] =
 1243|       |                        (UWORD8 *)pv_buf + ((2 * i + 1) * mutex_size);
 1244|       |
 1245|       |        ret = ithread_mutex_init(ps_codec->apv_proc_start_mutex[i]);
 1246|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1247|       |
 1248|       |        ret = ithread_mutex_init(ps_codec->apv_proc_done_mutex[i]);
 1249|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1250|       |    }
 1251|       |
 1252|       |    size = 2 * MAX_PROCESS_THREADS * ithread_get_cond_struct_size();
 1253|       |    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1254|       |    RETURN_IF((NULL == pv_buf), IV_FAIL);
 1255|       |    memset(pv_buf, 0, size);
 1256|       |
 1257|       |    for(i = 0; i < MAX_PROCESS_THREADS; i++)
 1258|       |    {
 1259|       |        WORD32 ret;
 1260|       |        WORD32 cond_size = ithread_get_cond_struct_size();
 1261|       |        ps_codec->apv_proc_start_condition[i] =
 1262|       |                        (UWORD8 *)pv_buf + (2 * i * cond_size);
 1263|       |        ps_codec->apv_proc_done_condition[i] =
 1264|       |                        (UWORD8 *)pv_buf + ((2 * i + 1) * cond_size);
 1265|       |
 1266|       |        ret = ithread_cond_init(ps_codec->apv_proc_start_condition[i]);
 1267|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1268|       |
 1269|       |        ret = ithread_cond_init(ps_codec->apv_proc_done_condition[i]);
 1270|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1271|       |    }
 1272|       |
 1273|       |#endif
 1274|       |
 1275|       |    /* Request memory for static bitstream buffer which holds bitstream after emulation prevention */
 1276|    664|    size = MIN_BITSBUF_SIZE;
  ------------------
  |  |  188|    664|#define MIN_BITSBUF_SIZE (1024 * 1024)
  ------------------
 1277|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size + 16); //Alloc extra for parse optimization
 1278|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1279|    664|    memset(pv_buf, 0, size + 16);
 1280|    664|    ps_codec->pu1_bitsbuf_static = pv_buf;
 1281|    664|    ps_codec->u4_bitsbuf_size_static = size;
 1282|       |
 1283|       |    /* size for holding display manager context */
 1284|    664|    size = sizeof(buf_mgr_t);
 1285|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1286|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1287|    664|    memset(pv_buf, 0, size);
 1288|    664|    ps_codec->pv_disp_buf_mgr = pv_buf;
 1289|       |
 1290|       |    /* size for holding dpb manager context */
 1291|    664|    size = sizeof(dpb_mgr_t);
 1292|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1293|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1294|    664|    memset(pv_buf, 0, size);
 1295|    664|    ps_codec->pv_dpb_mgr = pv_buf;
 1296|       |
 1297|       |    /* size for holding buffer manager context */
 1298|    664|    size = sizeof(buf_mgr_t);
 1299|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1300|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1301|    664|    memset(pv_buf, 0, size);
 1302|    664|    ps_codec->pv_pic_buf_mgr = pv_buf;
 1303|       |
 1304|       |    /* size for holding mv buffer manager context */
 1305|    664|    size = sizeof(buf_mgr_t);
 1306|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1307|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1308|    664|    memset(pv_buf, 0, size);
 1309|    664|    ps_codec->pv_mv_buf_mgr = pv_buf;
 1310|       |
 1311|    664|    size = MAX_VPS_CNT * sizeof(vps_t);
  ------------------
  |  |  289|    664|#define MAX_VPS_CNT         16
  ------------------
 1312|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1313|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1314|    664|    memset(pv_buf, 0, size);
 1315|    664|    ps_codec->ps_vps_base = pv_buf;
 1316|    664|    ps_codec->s_parse.ps_vps_base = ps_codec->ps_vps_base;
 1317|       |
 1318|    664|    size = MAX_SPS_CNT * sizeof(sps_t);
  ------------------
  |  |  317|    664|#define MAX_SPS_CNT         (16 + 1)
  ------------------
 1319|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1320|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1321|    664|    memset(pv_buf, 0, size);
 1322|    664|    ps_codec->ps_sps_base = pv_buf;
 1323|    664|    ps_codec->s_parse.ps_sps_base = ps_codec->ps_sps_base;
 1324|       |
 1325|    664|    size = MAX_PPS_CNT * sizeof(pps_t);
  ------------------
  |  |  334|    664|#define MAX_PPS_CNT         (64 + 1)
  ------------------
 1326|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1327|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1328|    664|    memset(pv_buf, 0, size);
 1329|    664|    ps_codec->ps_pps_base = pv_buf;
 1330|    664|    ps_codec->s_parse.ps_pps_base = ps_codec->ps_pps_base;
 1331|       |
 1332|    664|    size = MAX_SLICE_HDR_CNT * sizeof(slice_header_t);
  ------------------
  |  |  153|    664|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    664|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 1333|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1334|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1335|    664|    memset(pv_buf, 0, size);
 1336|    664|    ps_codec->ps_slice_hdr_base = (slice_header_t *)pv_buf;
 1337|    664|    ps_codec->s_parse.ps_slice_hdr_base = ps_codec->ps_slice_hdr_base;
 1338|       |
 1339|       |
 1340|    664|    SCALING_MAT_SIZE(size)
  ------------------
  |  |  194|    664|#define SCALING_MAT_SIZE(m_scaling_mat_size)                                 \
  |  |  195|    664|{                                                                            \
  |  |  196|    664|    m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|    664|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |                   m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|    664|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |  197|    664|    m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|    664|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|    664|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |  198|    664|    m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|    664|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|    664|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |  199|    664|    m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|    664|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |                   m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|    664|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |  200|    664|}
  ------------------
 1341|    664|    size = (MAX_SPS_CNT + MAX_PPS_CNT) * size * sizeof(WORD16);
  ------------------
  |  |  317|    664|#define MAX_SPS_CNT         (16 + 1)
  ------------------
                  size = (MAX_SPS_CNT + MAX_PPS_CNT) * size * sizeof(WORD16);
  ------------------
  |  |  334|    664|#define MAX_PPS_CNT         (64 + 1)
  ------------------
 1342|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1343|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1344|    664|    memset(pv_buf, 0, size);
 1345|    664|    ps_codec->pi2_scaling_mat = (WORD16 *)pv_buf;
 1346|       |
 1347|       |
 1348|       |    /* Size for holding pic_buf_t for each reference picture
 1349|       |     * Since this is only a structure allocation and not actual buffer allocation,
 1350|       |     * it is allocated for BUF_MGR_MAX_CNT entries
 1351|       |     */
 1352|    664|    size = BUF_MGR_MAX_CNT * sizeof(pic_buf_t);
  ------------------
  |  |   37|    664|#define BUF_MGR_MAX_CNT 64
  ------------------
 1353|    664|    pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1354|    664|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1355|    664|    memset(pv_buf, 0, size);
 1356|    664|    ps_codec->pv_pic_buf_base = (UWORD8 *)pv_buf;
 1357|       |
 1358|       |    /* TO hold scratch buffers needed for each SAO context */
 1359|    664|    size = 4 * MAX_CTB_SIZE * MAX_CTB_SIZE;
  ------------------
  |  |  341|    664|#define MAX_CTB_SIZE        64
  ------------------
                  size = 4 * MAX_CTB_SIZE * MAX_CTB_SIZE;
  ------------------
  |  |  341|    664|#define MAX_CTB_SIZE        64
  ------------------
 1360|       |
 1361|       |    /* 2 temporary buffers*/
 1362|    664|    size *= 2;
 1363|    664|    size *= MAX_PROCESS_THREADS;
  ------------------
  |  |  121|    664|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|    664|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
 1364|       |
 1365|    664|    pu1_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1366|    664|    RETURN_IF((NULL == pu1_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1367|    664|    memset(pu1_buf, 0, size);
 1368|       |
 1369|  5.97k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  5.97k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  5.97k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1369:16): [True: 5.31k, False: 664]
  ------------------
 1370|  5.31k|    {
 1371|  5.31k|        ps_codec->as_process[i].s_sao_ctxt.pu1_tmp_buf_luma = (UWORD8 *)pu1_buf;
 1372|  5.31k|        pu1_buf += 4 * MAX_CTB_SIZE * MAX_CTB_SIZE * sizeof(UWORD8);
  ------------------
  |  |  341|  5.31k|#define MAX_CTB_SIZE        64
  ------------------
                      pu1_buf += 4 * MAX_CTB_SIZE * MAX_CTB_SIZE * sizeof(UWORD8);
  ------------------
  |  |  341|  5.31k|#define MAX_CTB_SIZE        64
  ------------------
 1373|       |
 1374|  5.31k|        ps_codec->as_process[i].s_sao_ctxt.pu1_tmp_buf_chroma = (UWORD8 *)pu1_buf;
 1375|  5.31k|        pu1_buf += 4 * MAX_CTB_SIZE * MAX_CTB_SIZE * sizeof(UWORD8);
  ------------------
  |  |  341|  5.31k|#define MAX_CTB_SIZE        64
  ------------------
                      pu1_buf += 4 * MAX_CTB_SIZE * MAX_CTB_SIZE * sizeof(UWORD8);
  ------------------
  |  |  341|  5.31k|#define MAX_CTB_SIZE        64
  ------------------
 1376|  5.31k|    }
 1377|       |
 1378|       |    /* Allocate intra pred modes buffer */
 1379|       |    /* 8 bits per 4x4 */
 1380|       |    /* 16 bytes each for top and left 64 pixels and 16 bytes for default mode */
 1381|    664|    size =  3 * 16 * sizeof(UWORD8);
 1382|    664|    pu1_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1383|    664|    RETURN_IF((NULL == pu1_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1384|    664|    memset(pu1_buf, 0, size);
 1385|    664|    ps_codec->s_parse.pu1_luma_intra_pred_mode_left = pu1_buf;
 1386|    664|    ps_codec->s_parse.pu1_luma_intra_pred_mode_top  = pu1_buf + 16;
 1387|       |
 1388|    664|    {
 1389|    664|        WORD32 inter_pred_tmp_buf_size, ntaps_luma;
 1390|    664|        WORD32 pic_pu_idx_map_size;
 1391|       |
 1392|       |        /* Max inter pred size */
 1393|    664|        ntaps_luma = 8;
 1394|    664|        inter_pred_tmp_buf_size = sizeof(WORD16) * (MAX_CTB_SIZE + ntaps_luma) * MAX_CTB_SIZE;
  ------------------
  |  |  341|    664|#define MAX_CTB_SIZE        64
  ------------------
                      inter_pred_tmp_buf_size = sizeof(WORD16) * (MAX_CTB_SIZE + ntaps_luma) * MAX_CTB_SIZE;
  ------------------
  |  |  341|    664|#define MAX_CTB_SIZE        64
  ------------------
 1395|       |
 1396|    664|        inter_pred_tmp_buf_size = ALIGN64(inter_pred_tmp_buf_size);
  ------------------
  |  |   50|    664|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1397|       |
 1398|       |        /* To hold pu_index w.r.t. frame level pu_t array for a CTB */
 1399|    664|        pic_pu_idx_map_size = sizeof(WORD32) * (18 * 18);
 1400|    664|        pic_pu_idx_map_size = ALIGN64(pic_pu_idx_map_size);
  ------------------
  |  |   50|    664|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1401|       |
 1402|    664|        size =  inter_pred_tmp_buf_size * 2;
 1403|    664|        size += pic_pu_idx_map_size;
 1404|    664|        size *= MAX_PROCESS_THREADS;
  ------------------
  |  |  121|    664|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|    664|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
 1405|       |
 1406|    664|        pu1_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1407|    664|        RETURN_IF((NULL == pu1_buf), IV_FAIL);
  ------------------
  |  |   37|    664|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 664]
  |  |  ------------------
  ------------------
 1408|    664|        memset(pu1_buf, 0, size);
 1409|       |
 1410|  5.97k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  5.97k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  5.97k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1410:20): [True: 5.31k, False: 664]
  ------------------
 1411|  5.31k|        {
 1412|  5.31k|            ps_codec->as_process[i].pi2_inter_pred_tmp_buf1 = (WORD16 *)pu1_buf;
 1413|  5.31k|            pu1_buf += inter_pred_tmp_buf_size;
 1414|       |
 1415|  5.31k|            ps_codec->as_process[i].pi2_inter_pred_tmp_buf2 = (WORD16 *)pu1_buf;
 1416|  5.31k|            pu1_buf += inter_pred_tmp_buf_size;
 1417|       |
 1418|       |            /* Inverse transform intermediate and inverse scan output buffers reuse inter pred scratch buffers */
 1419|  5.31k|            ps_codec->as_process[i].pi2_itrans_intrmd_buf =
 1420|  5.31k|                            ps_codec->as_process[i].pi2_inter_pred_tmp_buf2;
 1421|  5.31k|            ps_codec->as_process[i].pi2_invscan_out =
 1422|  5.31k|                            ps_codec->as_process[i].pi2_inter_pred_tmp_buf1;
 1423|       |
 1424|  5.31k|            ps_codec->as_process[i].pu4_pic_pu_idx_map = (UWORD32 *)pu1_buf;
 1425|  5.31k|            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_pu_idx_map =
 1426|  5.31k|                            (UWORD32 *)pu1_buf;
 1427|  5.31k|            pu1_buf += pic_pu_idx_map_size;
 1428|       |
 1429|       |            //   ps_codec->as_process[i].pi2_inter_pred_tmp_buf3 = (WORD16 *)pu1_buf;
 1430|       |            //   pu1_buf += inter_pred_tmp_buf_size;
 1431|       |
 1432|  5.31k|            ps_codec->as_process[i].i4_inter_pred_tmp_buf_strd = MAX_CTB_SIZE;
  ------------------
  |  |  341|  5.31k|#define MAX_CTB_SIZE        64
  ------------------
 1433|       |
 1434|  5.31k|        }
 1435|    664|    }
 1436|       |    /* Initialize pointers in PPS structures */
 1437|      0|    {
 1438|    664|        sps_t *ps_sps = ps_codec->ps_sps_base;
 1439|    664|        pps_t *ps_pps = ps_codec->ps_pps_base;
 1440|    664|        WORD16 *pi2_scaling_mat =  ps_codec->pi2_scaling_mat;
 1441|    664|        WORD32 scaling_mat_size;
 1442|       |
 1443|    664|        SCALING_MAT_SIZE(scaling_mat_size);
  ------------------
  |  |  194|    664|#define SCALING_MAT_SIZE(m_scaling_mat_size)                                 \
  |  |  195|    664|{                                                                            \
  |  |  196|    664|    m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|    664|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |                   m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|    664|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |  197|    664|    m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|    664|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|    664|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |  198|    664|    m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|    664|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|    664|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |  199|    664|    m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|    664|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |                   m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|    664|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |  200|    664|}
  ------------------
 1444|       |
 1445|  11.9k|        for(i = 0; i < MAX_SPS_CNT; i++)
  ------------------
  |  |  317|  11.9k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  |  Branch (1445:20): [True: 11.2k, False: 664]
  ------------------
 1446|  11.2k|        {
 1447|  11.2k|            ps_sps->pi2_scaling_mat  = pi2_scaling_mat;
 1448|  11.2k|            pi2_scaling_mat += scaling_mat_size;
 1449|  11.2k|            ps_sps++;
 1450|  11.2k|        }
 1451|       |
 1452|  43.8k|        for(i = 0; i < MAX_PPS_CNT; i++)
  ------------------
  |  |  334|  43.8k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  |  Branch (1452:20): [True: 43.1k, False: 664]
  ------------------
 1453|  43.1k|        {
 1454|  43.1k|            ps_pps->pi2_scaling_mat  = pi2_scaling_mat;
 1455|  43.1k|            pi2_scaling_mat += scaling_mat_size;
 1456|  43.1k|            ps_pps++;
 1457|  43.1k|        }
 1458|    664|    }
 1459|       |
 1460|    664|    return (status);
 1461|    664|}
ihevcd_free_static_bufs:
 1483|    664|{
 1484|    664|    codec_t *ps_codec;
 1485|       |
 1486|    664|    void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
 1487|    664|    void *pv_mem_ctxt;
 1488|       |
 1489|    664|    ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
 1490|    664|    pf_aligned_free = ps_codec->pf_aligned_free;
 1491|    664|    pv_mem_ctxt = ps_codec->pv_mem_ctxt;
 1492|       |
 1493|       |#ifdef KEEP_THREADS_ACTIVE
 1494|       |    /* Wait for threads */
 1495|       |    ps_codec->i4_break_threads = 1;
 1496|       |    for(int i = 0; i < MAX_PROCESS_THREADS; i++)
 1497|       |    {
 1498|       |        WORD32 ret;
 1499|       |        if(ps_codec->ai4_process_thread_created[i])
 1500|       |        {
 1501|       |            ret = ithread_mutex_lock(ps_codec->apv_proc_start_mutex[i]);
 1502|       |            RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1503|       |
 1504|       |            ps_codec->ai4_process_start[i] = 1;
 1505|       |            ret = ithread_cond_signal(ps_codec->apv_proc_start_condition[i]);
 1506|       |            RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1507|       |
 1508|       |            ret = ithread_mutex_unlock(ps_codec->apv_proc_start_mutex[i]);
 1509|       |            RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1510|       |
 1511|       |            ithread_join(ps_codec->apv_process_thread_handle[i], NULL);
 1512|       |
 1513|       |            ps_codec->ai4_process_thread_created[i] = 0;
 1514|       |        }
 1515|       |        ret = ithread_cond_destroy(ps_codec->apv_proc_start_condition[i]);
 1516|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1517|       |
 1518|       |        ret = ithread_cond_destroy(ps_codec->apv_proc_done_condition[i]);
 1519|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1520|       |
 1521|       |        ret = ithread_mutex_destroy(ps_codec->apv_proc_start_mutex[i]);
 1522|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1523|       |
 1524|       |        ret = ithread_mutex_destroy(ps_codec->apv_proc_done_mutex[i]);
 1525|       |        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1526|       |    }
 1527|       |    ALIGNED_FREE(ps_codec, ps_codec->apv_proc_start_mutex[0]);
 1528|       |    ALIGNED_FREE(ps_codec, ps_codec->apv_proc_start_condition[0]);
 1529|       |#endif
 1530|       |
 1531|    664|    ALIGNED_FREE(ps_codec, ps_codec->apv_process_thread_handle[0]);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1532|    664|    ALIGNED_FREE(ps_codec, ps_codec->pu1_bitsbuf_static);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1533|       |
 1534|    664|    ALIGNED_FREE(ps_codec, ps_codec->pv_disp_buf_mgr);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1535|    664|    ALIGNED_FREE(ps_codec, ps_codec->pv_dpb_mgr);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1536|    664|    ALIGNED_FREE(ps_codec, ps_codec->pv_pic_buf_mgr);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1537|    664|    ALIGNED_FREE(ps_codec, ps_codec->pv_mv_buf_mgr);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1538|    664|    ALIGNED_FREE(ps_codec, ps_codec->ps_vps_base);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1539|    664|    ALIGNED_FREE(ps_codec, ps_codec->ps_sps_base);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1540|    664|    ALIGNED_FREE(ps_codec, ps_codec->ps_pps_base);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1541|    664|    ALIGNED_FREE(ps_codec, ps_codec->ps_slice_hdr_base);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1542|    664|    ALIGNED_FREE(ps_codec, ps_codec->pi2_scaling_mat);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1543|    664|    ALIGNED_FREE(ps_codec, ps_codec->pv_pic_buf_base);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1544|    664|    ALIGNED_FREE(ps_codec, ps_codec->s_parse.pu1_luma_intra_pred_mode_left);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1545|    664|    ALIGNED_FREE(ps_codec, ps_codec->as_process[0].s_sao_ctxt.pu1_tmp_buf_luma);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1546|    664|    ALIGNED_FREE(ps_codec, ps_codec->as_process[0].pi2_inter_pred_tmp_buf1);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1547|    664|    ALIGNED_FREE(ps_codec, ps_codec_obj->pv_codec_handle);
  ------------------
  |  |   96|    664|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|    664|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 664, False: 0]
  |  |  ------------------
  ------------------
 1548|       |
 1549|    664|    if(ps_codec_obj)
  ------------------
  |  Branch (1549:8): [True: 664, False: 0]
  ------------------
 1550|    664|    {
 1551|    664|        pf_aligned_free(pv_mem_ctxt, ps_codec_obj);
 1552|    664|    }
 1553|       |
 1554|    664|    return IV_SUCCESS;
 1555|       |
 1556|    664|}
ihevcd_allocate_dynamic_bufs:
 1579|    932|{
 1580|    932|    WORD32 max_tile_cols, max_tile_rows;
 1581|    932|    WORD32 max_ctb_rows, max_ctb_cols;
 1582|    932|    WORD32 max_num_cu_cols;
 1583|    932|    WORD32 max_num_cu_rows;
 1584|    932|    WORD32 max_num_4x4_cols;
 1585|    932|    WORD32 max_ctb_cnt;
 1586|    932|    WORD32 wd;
 1587|    932|    WORD32 ht;
 1588|    932|    WORD32 i;
 1589|    932|    WORD32 max_dpb_size;
 1590|    932|    void *pv_mem_ctxt = ps_codec->pv_mem_ctxt;
 1591|    932|    void *pv_buf;
 1592|    932|    UWORD8 *pu1_buf;
 1593|    932|    WORD32 size;
 1594|       |
 1595|    932|    wd = ALIGN64(ps_codec->i4_wd);
  ------------------
  |  |   50|    932|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1596|    932|    ht = ALIGN64(ps_codec->i4_ht);
  ------------------
  |  |   50|    932|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1597|       |
 1598|    932|    max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
  ------------------
  |  |  305|    932|#define MIN_TILE_WD  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|    932|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
                  max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
  ------------------
  |  |  305|    932|#define MIN_TILE_WD  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|    932|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
 1599|    932|    max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
  ------------------
  |  |  308|    932|#define MIN_TILE_HT  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|    932|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
                  max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
  ------------------
  |  |  308|    932|#define MIN_TILE_HT  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|    932|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
 1600|    932|    max_ctb_rows  = ht / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1601|    932|    max_ctb_cols  = wd / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1602|    932|    max_ctb_cnt   = max_ctb_rows * max_ctb_cols;
 1603|    932|    max_num_cu_cols = wd / MIN_CU_SIZE;
  ------------------
  |  |  363|    932|#define MIN_CU_SIZE         8
  ------------------
 1604|    932|    max_num_cu_rows = ht / MIN_CU_SIZE;
  ------------------
  |  |  363|    932|#define MIN_CU_SIZE         8
  ------------------
 1605|    932|    max_num_4x4_cols = wd / 4;
 1606|       |
 1607|       |    /* Allocate tile structures */
 1608|    932|    size = max_tile_cols * max_tile_rows;
 1609|    932|    size *= sizeof(tile_t);
 1610|    932|    size *= MAX_PPS_CNT;
  ------------------
  |  |  334|    932|#define MAX_PPS_CNT         (64 + 1)
  ------------------
 1611|       |
 1612|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1613|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1614|    932|    memset(pv_buf, 0, size);
 1615|    932|    ps_codec->ps_tile = (tile_t *)pv_buf;
 1616|       |
 1617|       |
 1618|       |    /* Allocate memory to hold entry point offsets */
 1619|       |    /* One entry point per tile */
 1620|    932|    size = max_tile_cols * max_tile_rows;
 1621|       |
 1622|       |    /* One entry point per row of CTBs */
 1623|       |    /*********************************************************************/
 1624|       |    /* Only tiles or entropy sync is enabled at a time in main           */
 1625|       |    /* profile, but since memory required does not increase too much,    */
 1626|       |    /* this allocation is done to handle both cases                      */
 1627|       |    /*********************************************************************/
 1628|    932|    size  += max_ctb_rows;
 1629|    932|    size *= sizeof(WORD32);
 1630|       |
 1631|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1632|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1633|    932|    memset(pv_buf, 0, size);
 1634|    932|    ps_codec->pi4_entry_ofst = (WORD32 *)pv_buf;
 1635|       |
 1636|       |    /* Allocate parse skip flag buffer */
 1637|       |    /* 1 bit per 8x8 */
 1638|    932|    size = max_num_cu_cols / 8;
 1639|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1640|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1641|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1642|    932|    memset(pv_buf, 0, size);
 1643|    932|    ps_codec->s_parse.pu4_skip_cu_top = (UWORD32 *)pv_buf;
 1644|       |
 1645|       |    /* Allocate parse coding tree depth buffer */
 1646|       |    /* 2 bits per 8x8 */
 1647|    932|    size =  max_num_cu_cols / 4;
 1648|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1649|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1650|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1651|    932|    memset(pv_buf, 0, size);
 1652|    932|    ps_codec->s_parse.pu4_ct_depth_top = (UWORD32 *)pv_buf;
 1653|       |
 1654|       |    /* Allocate intra flag buffer */
 1655|       |    /* 1 bit per 8x8 */
 1656|    932|    size =  max_num_cu_cols * max_num_cu_rows / 8;
 1657|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1658|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1659|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1660|    932|    memset(pv_buf, 0, size);
 1661|    932|    ps_codec->pu1_pic_intra_flag = (UWORD8 *)pv_buf;
 1662|    932|    ps_codec->s_parse.pu1_pic_intra_flag = ps_codec->pu1_pic_intra_flag;
 1663|       |
 1664|       |    /* Allocate transquant bypass flag buffer */
 1665|       |    /* 1 bit per 8x8 */
 1666|       |    /* Extra row and column are allocated for easy processing of top and left blocks while loop filtering */
 1667|    932|    size =  ((max_num_cu_cols + 8) * (max_num_cu_rows + 8)) / 8;
 1668|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1669|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1670|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1671|    932|    memset(pv_buf, 1, size);
 1672|    932|    {
 1673|    932|        WORD32 loop_filter_strd = (wd + 63) >> 6;
 1674|    932|        ps_codec->pu1_pic_no_loop_filter_flag_base = pv_buf;
 1675|       |        /* The offset is added for easy processing of top and left blocks while loop filtering */
 1676|    932|        ps_codec->pu1_pic_no_loop_filter_flag = (UWORD8 *)pv_buf + loop_filter_strd + 1;
 1677|    932|        ps_codec->s_parse.pu1_pic_no_loop_filter_flag = ps_codec->pu1_pic_no_loop_filter_flag;
 1678|    932|        ps_codec->s_parse.s_deblk_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->pu1_pic_no_loop_filter_flag;
 1679|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->pu1_pic_no_loop_filter_flag;
 1680|    932|    }
 1681|       |
 1682|       |    /* Initialize pointers in PPS structures */
 1683|    932|    {
 1684|    932|        pps_t *ps_pps = ps_codec->ps_pps_base;
 1685|    932|        tile_t *ps_tile =  ps_codec->ps_tile;
 1686|       |
 1687|  61.5k|        for(i = 0; i < MAX_PPS_CNT; i++)
  ------------------
  |  |  334|  61.5k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  |  Branch (1687:20): [True: 60.5k, False: 932]
  ------------------
 1688|  60.5k|        {
 1689|  60.5k|            ps_pps->ps_tile = ps_tile;
 1690|  60.5k|            ps_tile += (max_tile_cols * max_tile_rows);
 1691|  60.5k|            ps_pps++;
 1692|  60.5k|        }
 1693|       |
 1694|    932|    }
 1695|       |
 1696|       |    /* Allocate memory for job queue */
 1697|       |
 1698|       |    /* One job per row of CTBs */
 1699|    932|    size  = max_ctb_rows;
 1700|       |
 1701|       |    /* One each tile a row of CTBs, num_jobs has to incremented */
 1702|    932|    size  *= max_tile_cols;
 1703|       |
 1704|       |    /* One format convert/frame copy job per row of CTBs for non-shared mode*/
 1705|    932|    size  += max_ctb_rows;
 1706|       |
 1707|    932|    size *= sizeof(proc_job_t);
 1708|       |
 1709|    932|    size += ihevcd_jobq_ctxt_size();
 1710|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1711|       |
 1712|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1713|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1714|    932|    memset(pv_buf, 0, size);
 1715|    932|    ps_codec->pv_proc_jobq_buf = pv_buf;
 1716|    932|    ps_codec->i4_proc_jobq_buf_size = size;
 1717|       |
 1718|    932|    size =  max_ctb_cnt;
 1719|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1720|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1721|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1722|    932|    memset(pv_buf, 0, size);
 1723|    932|    ps_codec->pu1_parse_map = (UWORD8 *)pv_buf;
 1724|       |
 1725|    932|    size =  max_ctb_cnt;
 1726|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1727|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1728|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1729|    932|    memset(pv_buf, 0, size);
 1730|    932|    ps_codec->pu1_proc_map = (UWORD8 *)pv_buf;
 1731|       |
 1732|       |    /** Holds top and left neighbor's pu idx into picture level pu array */
 1733|       |    /* Only one top row is enough but left has to be replicated for each process context */
 1734|    932|    size =  (max_num_4x4_cols  /* left */ + MAX_PROCESS_THREADS * (MAX_CTB_SIZE / 4)/* top */ + 1/* top right */) * sizeof(WORD32);
  ------------------
  |  |  121|    932|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|    932|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
                  size =  (max_num_4x4_cols  /* left */ + MAX_PROCESS_THREADS * (MAX_CTB_SIZE / 4)/* top */ + 1/* top right */) * sizeof(WORD32);
  ------------------
  |  |  341|    932|#define MAX_CTB_SIZE        64
  ------------------
 1735|    932|    size = ALIGN4(size);
  ------------------
  |  |   54|    932|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
 1736|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1737|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1738|    932|    memset(pv_buf, 0, size);
 1739|       |
 1740|  8.38k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1740:16): [True: 7.45k, False: 932]
  ------------------
 1741|  7.45k|    {
 1742|  7.45k|        UWORD32 *pu4_buf = (UWORD32 *)pv_buf;
 1743|  7.45k|        ps_codec->as_process[i].pu4_pic_pu_idx_left = pu4_buf + i * (MAX_CTB_SIZE / 4);
  ------------------
  |  |  341|  7.45k|#define MAX_CTB_SIZE        64
  ------------------
 1744|  7.45k|        memset(ps_codec->as_process[i].pu4_pic_pu_idx_left, 0, sizeof(UWORD32) * MAX_CTB_SIZE / 4);
  ------------------
  |  |  341|  7.45k|#define MAX_CTB_SIZE        64
  ------------------
 1745|  7.45k|        ps_codec->as_process[i].pu4_pic_pu_idx_top = pu4_buf + MAX_PROCESS_THREADS * (MAX_CTB_SIZE / 4);
  ------------------
  |  |  121|  7.45k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  7.45k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
                      ps_codec->as_process[i].pu4_pic_pu_idx_top = pu4_buf + MAX_PROCESS_THREADS * (MAX_CTB_SIZE / 4);
  ------------------
  |  |  341|  7.45k|#define MAX_CTB_SIZE        64
  ------------------
 1746|  7.45k|    }
 1747|    932|    memset(ps_codec->as_process[0].pu4_pic_pu_idx_top, 0, sizeof(UWORD32) * (wd / 4 + 1));
 1748|       |
 1749|    932|    {
 1750|       |        /* To hold SAO left buffer for luma */
 1751|    932|        size  = sizeof(UWORD8) * (MAX(ht, wd));
  ------------------
  |  |   42|    932|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 64, False: 868]
  |  |  ------------------
  ------------------
 1752|       |
 1753|       |        /* To hold SAO left buffer for chroma */
 1754|    932|        size += sizeof(UWORD8) * (MAX(ht, wd));
  ------------------
  |  |   42|    932|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 64, False: 868]
  |  |  ------------------
  ------------------
 1755|       |
 1756|       |        /* To hold SAO top buffer for luma */
 1757|    932|        size += sizeof(UWORD8) * wd;
 1758|       |
 1759|       |        /* To hold SAO top buffer for chroma */
 1760|    932|        size += sizeof(UWORD8) * wd;
 1761|       |
 1762|       |        /* To hold SAO top left luma pixel value for last output ctb in a row*/
 1763|    932|        size += sizeof(UWORD8) * max_ctb_rows;
 1764|       |
 1765|       |        /* To hold SAO top left chroma pixel value last output ctb in a row*/
 1766|    932|        size += sizeof(UWORD8) * max_ctb_rows * 2;
 1767|       |
 1768|       |        /* To hold SAO top left pixel luma for current ctb - column array*/
 1769|    932|        size += sizeof(UWORD8) * max_ctb_rows;
 1770|       |
 1771|       |        /* To hold SAO top left pixel chroma for current ctb-column array*/
 1772|    932|        size += sizeof(UWORD8) * max_ctb_rows * 2;
 1773|       |
 1774|       |        /* To hold SAO top right pixel luma pixel value last output ctb in a row*/
 1775|    932|        size += sizeof(UWORD8) * max_ctb_cols;
 1776|       |
 1777|       |        /* To hold SAO top right pixel chroma pixel value last output ctb in a row*/
 1778|    932|        size += sizeof(UWORD8) * max_ctb_cols * 2;
 1779|       |
 1780|       |        /*To hold SAO botton bottom left pixels for luma*/
 1781|    932|        size += sizeof(UWORD8) * max_ctb_rows;
 1782|       |
 1783|       |        /*To hold SAO botton bottom left pixels for luma*/
 1784|    932|        size += sizeof(UWORD8) * max_ctb_rows * 2;
 1785|    932|        size = ALIGN64(size);
  ------------------
  |  |   50|    932|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1786|       |
 1787|    932|        pu1_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1788|    932|        RETURN_IF((NULL == pu1_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1789|    932|        memset(pu1_buf, 0, size);
 1790|       |
 1791|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1791:20): [True: 7.45k, False: 932]
  ------------------
 1792|  7.45k|        {
 1793|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_left_luma = (UWORD8 *)pu1_buf;
 1794|  7.45k|        }
 1795|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_left_luma = (UWORD8 *)pu1_buf;
 1796|    932|        pu1_buf += MAX(ht, wd);
  ------------------
  |  |   42|    932|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 64, False: 868]
  |  |  ------------------
  ------------------
 1797|       |
 1798|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1798:20): [True: 7.45k, False: 932]
  ------------------
 1799|  7.45k|        {
 1800|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_left_chroma = (UWORD8 *)pu1_buf;
 1801|  7.45k|        }
 1802|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_left_chroma = (UWORD8 *)pu1_buf;
 1803|    932|        pu1_buf += MAX(ht, wd);
  ------------------
  |  |   42|    932|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 64, False: 868]
  |  |  ------------------
  ------------------
 1804|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1804:20): [True: 7.45k, False: 932]
  ------------------
 1805|  7.45k|        {
 1806|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_luma = (UWORD8 *)pu1_buf;
 1807|  7.45k|        }
 1808|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_luma = (UWORD8 *)pu1_buf;
 1809|    932|        pu1_buf += wd;
 1810|       |
 1811|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1811:20): [True: 7.45k, False: 932]
  ------------------
 1812|  7.45k|        {
 1813|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_chroma = (UWORD8 *)pu1_buf;
 1814|  7.45k|        }
 1815|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_chroma = (UWORD8 *)pu1_buf;
 1816|    932|        pu1_buf += wd;
 1817|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1817:20): [True: 7.45k, False: 932]
  ------------------
 1818|  7.45k|        {
 1819|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_luma_top_left_ctb = (UWORD8 *)pu1_buf;
 1820|  7.45k|        }
 1821|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_luma_top_left_ctb = (UWORD8 *)pu1_buf;
 1822|    932|        pu1_buf += ht / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1823|       |
 1824|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1824:20): [True: 7.45k, False: 932]
  ------------------
 1825|  7.45k|        {
 1826|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_chroma_top_left_ctb = (UWORD8 *)pu1_buf;
 1827|  7.45k|        }
 1828|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_chroma_top_left_ctb = (UWORD8 *)pu1_buf;
 1829|    932|        pu1_buf += (ht / MIN_CTB_SIZE) * 2;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1830|       |
 1831|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1831:20): [True: 7.45k, False: 932]
  ------------------
 1832|  7.45k|        {
 1833|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_luma_curr_ctb = (UWORD8 *)pu1_buf;
 1834|  7.45k|        }
 1835|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_luma_curr_ctb = (UWORD8 *)pu1_buf;
 1836|    932|        pu1_buf += ht / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1837|       |
 1838|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1838:20): [True: 7.45k, False: 932]
  ------------------
 1839|  7.45k|        {
 1840|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_chroma_curr_ctb = (UWORD8 *)pu1_buf;
 1841|  7.45k|        }
 1842|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_chroma_curr_ctb = (UWORD8 *)pu1_buf;
 1843|       |
 1844|    932|        pu1_buf += (ht / MIN_CTB_SIZE) * 2;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1845|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1845:20): [True: 7.45k, False: 932]
  ------------------
 1846|  7.45k|        {
 1847|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_luma_top_right = (UWORD8 *)pu1_buf;
 1848|  7.45k|        }
 1849|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_luma_top_right = (UWORD8 *)pu1_buf;
 1850|       |
 1851|    932|        pu1_buf += wd / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1852|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1852:20): [True: 7.45k, False: 932]
  ------------------
 1853|  7.45k|        {
 1854|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_chroma_top_right = (UWORD8 *)pu1_buf;
 1855|  7.45k|        }
 1856|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_chroma_top_right = (UWORD8 *)pu1_buf;
 1857|       |
 1858|    932|        pu1_buf += (wd / MIN_CTB_SIZE) * 2;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1859|       |
 1860|       |        /*Per CTB, Store 1 value for luma , 2 values for chroma*/
 1861|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1861:20): [True: 7.45k, False: 932]
  ------------------
 1862|  7.45k|        {
 1863|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_luma_bot_left = (UWORD8 *)pu1_buf;
 1864|  7.45k|        }
 1865|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_luma_bot_left = (UWORD8 *)pu1_buf;
 1866|       |
 1867|    932|        pu1_buf += (ht / MIN_CTB_SIZE);
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1868|       |
 1869|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1869:20): [True: 7.45k, False: 932]
  ------------------
 1870|  7.45k|        {
 1871|  7.45k|            ps_codec->as_process[i].s_sao_ctxt.pu1_sao_src_top_left_chroma_bot_left = (UWORD8 *)pu1_buf;
 1872|  7.45k|        }
 1873|    932|        ps_codec->s_parse.s_sao_ctxt.pu1_sao_src_top_left_chroma_bot_left = (UWORD8 *)pu1_buf;
 1874|       |
 1875|    932|        pu1_buf += (ht / MIN_CTB_SIZE) * 2;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1876|    932|    }
 1877|       |
 1878|       |
 1879|      0|    {
 1880|    932|        UWORD8 *pu1_buf = (UWORD8 *)pv_buf;
 1881|    932|        WORD32 vert_bs_size, horz_bs_size;
 1882|    932|        WORD32 qp_const_flag_size;
 1883|    932|        WORD32 qp_size;
 1884|    932|        WORD32 num_8x8;
 1885|       |
 1886|       |        /* Max Number of vertical edges */
 1887|    932|        vert_bs_size = wd / 8 + 2 * MAX_CTB_SIZE / 8;
  ------------------
  |  |  341|    932|#define MAX_CTB_SIZE        64
  ------------------
 1888|       |
 1889|       |        /* Max Number of horizontal edges - extra MAX_CTB_SIZE / 8 to handle the last 4 rows separately(shifted CTB processing) */
 1890|    932|        vert_bs_size *= (ht + MAX_CTB_SIZE) / MIN_TU_SIZE;
  ------------------
  |  |  341|    932|#define MAX_CTB_SIZE        64
  ------------------
                      vert_bs_size *= (ht + MAX_CTB_SIZE) / MIN_TU_SIZE;
  ------------------
  |  |  348|    932|#define MIN_TU_SIZE         4
  ------------------
 1891|       |
 1892|       |        /* Number of bytes */
 1893|    932|        vert_bs_size /= 8;
 1894|       |
 1895|       |        /* Two bits per edge */
 1896|    932|        vert_bs_size *= 2;
 1897|       |
 1898|       |        /* Max Number of horizontal edges */
 1899|    932|        horz_bs_size = ht / 8 + MAX_CTB_SIZE / 8;
  ------------------
  |  |  341|    932|#define MAX_CTB_SIZE        64
  ------------------
 1900|       |
 1901|       |        /* Max Number of vertical edges - extra MAX_CTB_SIZE / 8 to handle the last 4 columns separately(shifted CTB processing) */
 1902|    932|        horz_bs_size *= (wd + MAX_CTB_SIZE) / MIN_TU_SIZE;
  ------------------
  |  |  341|    932|#define MAX_CTB_SIZE        64
  ------------------
                      horz_bs_size *= (wd + MAX_CTB_SIZE) / MIN_TU_SIZE;
  ------------------
  |  |  348|    932|#define MIN_TU_SIZE         4
  ------------------
 1903|       |
 1904|       |        /* Number of bytes */
 1905|    932|        horz_bs_size /= 8;
 1906|       |
 1907|       |        /* Two bits per edge */
 1908|    932|        horz_bs_size *= 2;
 1909|       |
 1910|       |        /* Max CTBs in a row */
 1911|    932|        qp_const_flag_size = wd / MIN_CTB_SIZE + 1 /* The last ctb row deblk is done in last ctb + 1 row.*/;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1912|       |
 1913|       |        /* Max CTBs in a column */
 1914|    932|        qp_const_flag_size *= ht / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1915|       |
 1916|       |        /* Number of bytes */
 1917|    932|        qp_const_flag_size /= 8;
 1918|       |
 1919|       |        /* QP changes at CU level - So store at 8x8 level */
 1920|    932|        num_8x8 = (wd * ht) / (MIN_CU_SIZE * MIN_CU_SIZE);
  ------------------
  |  |  363|    932|#define MIN_CU_SIZE         8
  ------------------
                      num_8x8 = (wd * ht) / (MIN_CU_SIZE * MIN_CU_SIZE);
  ------------------
  |  |  363|    932|#define MIN_CU_SIZE         8
  ------------------
 1921|    932|        qp_size = num_8x8;
 1922|       |
 1923|       |        /* To hold vertical boundary strength */
 1924|    932|        size += vert_bs_size;
 1925|       |
 1926|       |        /* To hold horizontal boundary strength */
 1927|    932|        size += horz_bs_size;
 1928|       |
 1929|       |        /* To hold QP */
 1930|    932|        size += qp_size;
 1931|       |
 1932|       |        /* To hold QP const in CTB flags */
 1933|    932|        size += qp_const_flag_size;
 1934|       |
 1935|    932|        pu1_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1936|    932|        RETURN_IF((NULL == pu1_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1937|       |
 1938|    932|        memset(pu1_buf, 0, size);
 1939|       |
 1940|  8.38k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1940:20): [True: 7.45k, False: 932]
  ------------------
 1941|  7.45k|        {
 1942|  7.45k|            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
 1943|  7.45k|            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
 1944|  7.45k|            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
 1945|  7.45k|            pu1_buf += vert_bs_size;
 1946|       |
 1947|  7.45k|            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
 1948|  7.45k|            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
 1949|  7.45k|            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
 1950|  7.45k|            pu1_buf += horz_bs_size;
 1951|       |
 1952|  7.45k|            ps_codec->as_process[i].s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
 1953|  7.45k|            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
 1954|  7.45k|            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
 1955|  7.45k|            pu1_buf += qp_size;
 1956|       |
 1957|  7.45k|            ps_codec->as_process[i].s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
 1958|  7.45k|            ps_codec->as_process[i].s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
 1959|  7.45k|            ps_codec->s_parse.s_deblk_ctxt.s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
 1960|  7.45k|            pu1_buf += qp_const_flag_size;
 1961|       |
 1962|  7.45k|            pu1_buf -= (vert_bs_size + horz_bs_size + qp_size + qp_const_flag_size);
 1963|  7.45k|        }
 1964|    932|        ps_codec->s_parse.s_bs_ctxt.pu4_pic_vert_bs = (UWORD32 *)pu1_buf;
 1965|    932|        pu1_buf += vert_bs_size;
 1966|       |
 1967|    932|        ps_codec->s_parse.s_bs_ctxt.pu4_pic_horz_bs = (UWORD32 *)pu1_buf;
 1968|    932|        pu1_buf += horz_bs_size;
 1969|       |
 1970|    932|        ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp = (UWORD8 *)pu1_buf;
 1971|    932|        pu1_buf += qp_size;
 1972|       |
 1973|    932|        ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp_const_in_ctb = (UWORD8 *)pu1_buf;
 1974|    932|        pu1_buf += qp_const_flag_size;
 1975|       |
 1976|    932|    }
 1977|       |
 1978|       |    /* Max CTBs in a row */
 1979|    932|    size  = wd / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1980|       |    /* Max CTBs in a column */
 1981|    932|    size *= (ht / MIN_CTB_SIZE + 2) /* Top row and bottom row extra. This ensures accessing left,top in first row
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 1982|    932|                                              and right in last row will not result in invalid access*/;
 1983|       |
 1984|    932|    size *= sizeof(UWORD16);
 1985|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 1986|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 1987|    932|    memset(pv_buf, 0, size);
 1988|       |
 1989|    932|    ps_codec->pu1_tile_idx_base = pv_buf;
 1990|  8.38k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1990:16): [True: 7.45k, False: 932]
  ------------------
 1991|  7.45k|    {
 1992|  7.45k|        ps_codec->as_process[i].pu1_tile_idx = (UWORD16 *)pv_buf + wd / MIN_CTB_SIZE /* Offset 1 row */;
  ------------------
  |  |  342|  7.45k|#define MIN_CTB_SIZE        16
  ------------------
 1993|  7.45k|    }
 1994|       |
 1995|       |    /* 4 bytes per color component per CTB */
 1996|    932|    size = 3 * 4;
 1997|       |
 1998|       |    /* MAX number of CTBs in a row */
 1999|    932|    size *= wd / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 2000|       |
 2001|       |    /* MAX number of CTBs in a column */
 2002|    932|    size *= ht / MIN_CTB_SIZE;
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
 2003|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 2004|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 2005|    932|    memset(pv_buf, 0, size);
 2006|       |
 2007|    932|    ps_codec->s_parse.ps_pic_sao = (sao_t *)pv_buf;
 2008|    932|    ps_codec->s_parse.s_sao_ctxt.ps_pic_sao = (sao_t *)pv_buf;
 2009|  8.38k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (2009:16): [True: 7.45k, False: 932]
  ------------------
 2010|  7.45k|    {
 2011|  7.45k|        ps_codec->as_process[i].s_sao_ctxt.ps_pic_sao = ps_codec->s_parse.ps_pic_sao;
 2012|  7.45k|    }
 2013|       |
 2014|       |    /* Only if width * height * 3 / 2 is greater than MIN_BITSBUF_SIZE,
 2015|       |    then allocate dynamic bistream buffer */
 2016|    932|    ps_codec->pu1_bitsbuf_dynamic = NULL;
 2017|    932|    size = wd * ht;
 2018|    932|    if(size > MIN_BITSBUF_SIZE)
  ------------------
  |  |  188|    932|#define MIN_BITSBUF_SIZE (1024 * 1024)
  ------------------
  |  Branch (2018:8): [True: 422, False: 510]
  ------------------
 2019|    422|    {
 2020|    422|        pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size + 16); //Alloc extra for parse optimization
 2021|    422|        RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    422|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 422]
  |  |  ------------------
  ------------------
 2022|    422|        memset(pv_buf, 0, size + 16);
 2023|    422|        ps_codec->pu1_bitsbuf_dynamic = pv_buf;
 2024|    422|        ps_codec->u4_bitsbuf_size_dynamic = size;
 2025|    422|    }
 2026|       |
 2027|    932|    size = ihevcd_get_tu_data_size(wd * ht);
 2028|    932|    pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 2029|    932|    RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 2030|    932|    memset(pv_buf, 0, size);
 2031|    932|    ps_codec->pv_tu_data = pv_buf;
 2032|       |
 2033|       |    /* CU info map to store qp and CU type at 8x8 level */
 2034|    932|    if(ps_codec->u1_enable_cu_info)
  ------------------
  |  Branch (2034:8): [True: 0, False: 932]
  ------------------
 2035|      0|    {
 2036|      0|        size = ((wd * ht) / (MIN_CU_SIZE * MIN_CU_SIZE)) * BUF_MGR_MAX_CNT;
  ------------------
  |  |  363|      0|#define MIN_CU_SIZE         8
  ------------------
                      size = ((wd * ht) / (MIN_CU_SIZE * MIN_CU_SIZE)) * BUF_MGR_MAX_CNT;
  ------------------
  |  |  363|      0|#define MIN_CU_SIZE         8
  ------------------
                      size = ((wd * ht) / (MIN_CU_SIZE * MIN_CU_SIZE)) * BUF_MGR_MAX_CNT;
  ------------------
  |  |   37|      0|#define BUF_MGR_MAX_CNT 64
  ------------------
 2037|       |
 2038|      0|        pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 2039|      0|        RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|      0|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2040|      0|        memset(pv_buf, 0, size);
 2041|      0|        ps_codec->pu1_qp_map_base = pv_buf;
 2042|       |
 2043|      0|        pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 2044|      0|        RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|      0|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2045|      0|        memset(pv_buf, 0, size);
 2046|      0|        ps_codec->pu1_cu_type_map_base = pv_buf;
 2047|      0|    }
 2048|       |
 2049|    932|    {
 2050|    932|        sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
 2051|       |
 2052|       |
 2053|       |        /* Allocate for pu_map, pu_t and pic_pu_idx for each MV bank */
 2054|       |        /* Note: Number of luma samples is not max_wd * max_ht here, instead it is
 2055|       |         * set to maximum number of luma samples allowed at the given level.
 2056|       |         * This is done to ensure that any stream with width and height lesser
 2057|       |         * than max_wd and max_ht is supported. Number of buffers required can be greater
 2058|       |         * for lower width and heights at a given level and this increased number of buffers
 2059|       |         * might require more memory than what max_wd and max_ht buffer would have required
 2060|       |         * Also note one extra buffer is allocted to store current pictures MV bank
 2061|       |         * In case of asynchronous parsing and processing, number of buffers should increase here
 2062|       |         * based on when parsing and processing threads are synchronized
 2063|       |         */
 2064|    932|        max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
 2065|       |        /* Size for holding mv_buf_t for each MV Bank
 2066|       |         * One extra MV Bank is needed to hold current pics MV bank.
 2067|       |         */
 2068|    932|        size = (max_dpb_size + 1) * sizeof(mv_buf_t);
 2069|       |
 2070|    932|        size += (max_dpb_size + 1) *
 2071|    932|                        ihevcd_get_pic_mv_bank_size(wd * ht);
 2072|       |
 2073|    932|        pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 2074|    932|        RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 2075|    932|        memset(pv_buf, 0, size);
 2076|       |
 2077|    932|        ps_codec->pv_mv_bank_buf_base = pv_buf;
 2078|    932|        ps_codec->i4_total_mv_bank_size = size;
 2079|       |
 2080|    932|    }
 2081|       |
 2082|       |    /* In case of non-shared mode allocate for reference picture buffers */
 2083|       |    /* In case of shared and 420p output, allocate for chroma samples */
 2084|    932|    if(0 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (2084:8): [True: 932, False: 0]
  ------------------
 2085|    932|    {
 2086|       |        /* Number of buffers is doubled in order to return one frame at a time instead of sending
 2087|       |         * multiple outputs during dpb full case.
 2088|       |         * Also note one extra buffer is allocted to store current picture
 2089|       |         * In case of asynchronous parsing and processing, number of buffers should increase here
 2090|       |         * based on when parsing and processing threads are synchronized
 2091|       |         */
 2092|    932|        size = ihevcd_get_total_pic_buf_size(ps_codec, wd, ht);
 2093|    932|        pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size);
 2094|    932|        RETURN_IF((NULL == pv_buf), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 2095|    932|        memset(pv_buf, 0, size);
 2096|       |
 2097|    932|        ps_codec->i4_total_pic_buf_size = size;
 2098|    932|        ps_codec->pu1_ref_pic_buf_base = (UWORD8 *)pv_buf;
 2099|    932|    }
 2100|       |
 2101|    932|    ps_codec->pv_proc_jobq = ihevcd_jobq_init(ps_codec->pv_proc_jobq_buf, ps_codec->i4_proc_jobq_buf_size);
 2102|    932|    RETURN_IF((ps_codec->pv_proc_jobq == NULL), IV_FAIL);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
 2103|       |
 2104|       |    /* Update the jobq context to all the threads */
 2105|    932|    ps_codec->s_parse.pv_proc_jobq = ps_codec->pv_proc_jobq;
 2106|  8.38k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  8.38k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  8.38k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (2106:16): [True: 7.45k, False: 932]
  ------------------
 2107|  7.45k|    {
 2108|  7.45k|        ps_codec->as_process[i].pv_proc_jobq = ps_codec->pv_proc_jobq;
 2109|  7.45k|        ps_codec->as_process[i].i4_id = i;
 2110|  7.45k|        ps_codec->as_process[i].ps_codec = ps_codec;
 2111|       |
 2112|       |        /* Set the following to zero assuming it is a single core solution
 2113|       |         * When threads are launched these will be set appropriately
 2114|       |         */
 2115|  7.45k|        ps_codec->as_process[i].i4_check_parse_status = 0;
 2116|  7.45k|        ps_codec->as_process[i].i4_check_proc_status = 0;
 2117|  7.45k|    }
 2118|       |
 2119|    932|    ps_codec->u4_allocate_dynamic_done = 1;
 2120|       |
 2121|    932|    return IV_SUCCESS;
 2122|    932|}
ihevcd_free_dynamic_bufs:
 2144|  1.64k|{
 2145|       |
 2146|  1.64k|    if(ps_codec->pv_proc_jobq)
  ------------------
  |  Branch (2146:8): [True: 932, False: 717]
  ------------------
 2147|    932|    {
 2148|    932|        ihevcd_jobq_deinit(ps_codec->pv_proc_jobq);
 2149|    932|        ps_codec->pv_proc_jobq = NULL;
 2150|    932|    }
 2151|       |
 2152|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->ps_tile);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2153|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pi4_entry_ofst);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2154|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->s_parse.pu4_skip_cu_top);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2155|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->s_parse.pu4_ct_depth_top);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2156|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_pic_intra_flag);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2157|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_pic_no_loop_filter_flag_base);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2158|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pv_proc_jobq_buf);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2159|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_parse_map);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2160|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_proc_map);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2161|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->as_process[0].pu4_pic_pu_idx_left);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2162|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->as_process[0].s_sao_ctxt.pu1_sao_src_left_luma);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2163|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->as_process[0].s_bs_ctxt.pu4_pic_vert_bs);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2164|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_tile_idx_base);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2165|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->s_parse.ps_pic_sao);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2166|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_bitsbuf_dynamic);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 422, False: 1.22k]
  |  |  ------------------
  ------------------
 2167|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pv_tu_data);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2168|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pv_mv_bank_buf_base);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2169|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_ref_pic_buf_base);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 932, False: 717]
  |  |  ------------------
  ------------------
 2170|  1.64k|    ALIGNED_FREE(ps_codec, ps_codec->pu1_cur_chroma_ref_buf);
  ------------------
  |  |   96|  1.64k|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|  1.64k|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 0, False: 1.64k]
  |  |  ------------------
  ------------------
 2171|  1.64k|    if(ps_codec->u1_enable_cu_info)
  ------------------
  |  Branch (2171:8): [True: 0, False: 1.64k]
  ------------------
 2172|      0|    {
 2173|      0|        ALIGNED_FREE(ps_codec, ps_codec->pu1_qp_map_base);
  ------------------
  |  |   96|      0|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|      0|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2174|      0|        ALIGNED_FREE(ps_codec, ps_codec->pu1_cu_type_map_base);
  ------------------
  |  |   96|      0|#define ALIGNED_FREE(ps_codec, y) \
  |  |   97|      0|if(y) {ps_codec->pf_aligned_free(ps_codec->pv_mem_ctxt, ((void *)y)); (y) = NULL;}
  |  |  ------------------
  |  |  |  Branch (97:4): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2175|      0|    }
 2176|       |
 2177|  1.64k|    ps_codec->u4_allocate_dynamic_done = 0;
 2178|  1.64k|    return IV_SUCCESS;
 2179|  1.64k|}
ihevcd_create:
 2210|    664|{
 2211|    664|    ihevcd_cxa_create_ip_t *ps_create_ip;
 2212|    664|    ihevcd_cxa_create_op_t *ps_create_op;
 2213|       |
 2214|    664|    WORD32 ret;
 2215|    664|    codec_t *ps_codec;
 2216|    664|    ps_create_ip = (ihevcd_cxa_create_ip_t *)pv_api_ip;
 2217|    664|    ps_create_op = (ihevcd_cxa_create_op_t *)pv_api_op;
 2218|       |
 2219|    664|    ps_create_op->s_ivd_create_op_t.u4_error_code = 0;
 2220|    664|    ps_codec_obj = NULL;
 2221|    664|    ret = ihevcd_allocate_static_bufs(&ps_codec_obj, pv_api_ip, pv_api_op);
 2222|       |
 2223|       |    /* If allocation of some buffer fails, then free buffers allocated till then */
 2224|    664|    if(IV_FAIL == ret)
  ------------------
  |  Branch (2224:8): [True: 0, False: 664]
  ------------------
 2225|      0|    {
 2226|      0|        if(NULL != ps_codec_obj)
  ------------------
  |  Branch (2226:12): [True: 0, False: 0]
  ------------------
 2227|      0|        {
 2228|      0|            if(ps_codec_obj->pv_codec_handle)
  ------------------
  |  Branch (2228:16): [True: 0, False: 0]
  ------------------
 2229|      0|            {
 2230|      0|                ihevcd_free_static_bufs(ps_codec_obj);
 2231|      0|            }
 2232|      0|            else
 2233|      0|            {
 2234|      0|                void (*pf_aligned_free)(void *pv_mem_ctxt, void *pv_buf);
 2235|      0|                void *pv_mem_ctxt;
 2236|       |
 2237|      0|                pf_aligned_free = ps_create_ip->s_ivd_create_ip_t.pf_aligned_free;
 2238|      0|                pv_mem_ctxt  = ps_create_ip->s_ivd_create_ip_t.pv_mem_ctxt;
 2239|      0|                pf_aligned_free(pv_mem_ctxt, ps_codec_obj);
 2240|      0|            }
 2241|      0|        }
 2242|      0|        ps_create_op->s_ivd_create_op_t.u4_error_code = IVD_MEM_ALLOC_FAILED;
 2243|      0|        ps_create_op->s_ivd_create_op_t.u4_error_code |= 1 << IVD_FATALERROR;
 2244|       |
 2245|      0|        return IV_FAIL;
 2246|      0|    }
 2247|    664|    ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
 2248|    664|    ret = ihevcd_init(ps_codec);
 2249|       |
 2250|    664|    TRACE_INIT(NULL);
 2251|    664|    STATS_INIT();
  ------------------
  |  |  137|    664|#define STATS_INIT()  ;
  ------------------
 2252|       |
 2253|    664|    return ret;
 2254|    664|}
ihevcd_delete:
 2281|    664|{
 2282|    664|    codec_t *ps_dec;
 2283|    664|    ihevcd_cxa_delete_ip_t *ps_ip = (ihevcd_cxa_delete_ip_t *)pv_api_ip;
 2284|    664|    ihevcd_cxa_delete_op_t *ps_op = (ihevcd_cxa_delete_op_t *)pv_api_op;
 2285|       |
 2286|    664|    ps_dec = (codec_t *)(ps_codec_obj->pv_codec_handle);
 2287|    664|    UNUSED(ps_ip);
  ------------------
  |  |   38|    664|#define UNUSED(x) ((void)(x))
  ------------------
 2288|    664|    ps_op->s_ivd_delete_op_t.u4_error_code = 0;
 2289|    664|    ihevcd_free_dynamic_bufs(ps_dec);
 2290|    664|    ihevcd_free_static_bufs(ps_codec_obj);
 2291|    664|    return IV_SUCCESS;
 2292|    664|}
ihevcd_set_params:
 2819|  1.32k|{
 2820|       |
 2821|  1.32k|    codec_t *ps_codec;
 2822|  1.32k|    WORD32 ret = IV_SUCCESS;
 2823|  1.32k|    WORD32 strd;
 2824|  1.32k|    ivd_ctl_set_config_ip_t *s_ctl_dynparams_ip =
 2825|  1.32k|                    (ivd_ctl_set_config_ip_t *)pv_api_ip;
 2826|  1.32k|    ivd_ctl_set_config_op_t *s_ctl_dynparams_op =
 2827|  1.32k|                    (ivd_ctl_set_config_op_t *)pv_api_op;
 2828|       |
 2829|  1.32k|    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
 2830|       |
 2831|  1.32k|    s_ctl_dynparams_op->u4_error_code = 0;
 2832|       |
 2833|  1.32k|    ps_codec->e_pic_skip_mode = s_ctl_dynparams_ip->e_frm_skip_mode;
 2834|       |
 2835|  1.32k|    if(s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_NONE)
  ------------------
  |  Branch (2835:8): [True: 0, False: 1.32k]
  ------------------
 2836|      0|    {
 2837|       |
 2838|      0|        if((s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_P) &&
  ------------------
  |  Branch (2838:12): [True: 0, False: 0]
  ------------------
 2839|      0|           (s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_B) &&
  ------------------
  |  Branch (2839:12): [True: 0, False: 0]
  ------------------
 2840|      0|           (s_ctl_dynparams_ip->e_frm_skip_mode != IVD_SKIP_PB))
  ------------------
  |  Branch (2840:12): [True: 0, False: 0]
  ------------------
 2841|      0|        {
 2842|      0|            s_ctl_dynparams_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
 2843|      0|            ret = IV_FAIL;
 2844|      0|        }
 2845|      0|    }
 2846|       |
 2847|  1.32k|    strd = ps_codec->i4_disp_strd;
 2848|  1.32k|    if(1 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (2848:8): [True: 0, False: 1.32k]
  ------------------
 2849|      0|    {
 2850|      0|        strd = ps_codec->i4_strd;
 2851|      0|    }
 2852|       |
 2853|       |
 2854|  1.32k|    {
 2855|  1.32k|        if((WORD32)s_ctl_dynparams_ip->u4_disp_wd >= ps_codec->i4_disp_wd)
  ------------------
  |  Branch (2855:12): [True: 715, False: 613]
  ------------------
 2856|    715|        {
 2857|    715|            strd = s_ctl_dynparams_ip->u4_disp_wd;
 2858|    715|        }
 2859|    613|        else if(0 == ps_codec->i4_sps_done)
  ------------------
  |  Branch (2859:17): [True: 0, False: 613]
  ------------------
 2860|      0|        {
 2861|      0|            strd = s_ctl_dynparams_ip->u4_disp_wd;
 2862|      0|        }
 2863|    613|        else if(s_ctl_dynparams_ip->u4_disp_wd == 0)
  ------------------
  |  Branch (2863:17): [True: 613, False: 0]
  ------------------
 2864|    613|        {
 2865|    613|            strd = ps_codec->i4_disp_strd;
 2866|    613|        }
 2867|      0|        else
 2868|      0|        {
 2869|      0|            strd = 0;
 2870|      0|            s_ctl_dynparams_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
 2871|      0|            s_ctl_dynparams_op->u4_error_code |= IHEVCD_INVALID_DISP_STRD;
 2872|      0|            ret = IV_FAIL;
 2873|      0|        }
 2874|  1.32k|    }
 2875|       |
 2876|  1.32k|    ps_codec->i4_disp_strd = strd;
 2877|  1.32k|    if(1 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (2877:8): [True: 0, False: 1.32k]
  ------------------
 2878|      0|    {
 2879|      0|        ps_codec->i4_strd = strd;
 2880|      0|    }
 2881|       |
 2882|  1.32k|    if(s_ctl_dynparams_ip->e_vid_dec_mode == IVD_DECODE_FRAME)
  ------------------
  |  Branch (2882:8): [True: 664, False: 664]
  ------------------
 2883|    664|        ps_codec->i4_header_mode = 0;
 2884|    664|    else if(s_ctl_dynparams_ip->e_vid_dec_mode == IVD_DECODE_HEADER)
  ------------------
  |  Branch (2884:13): [True: 664, False: 0]
  ------------------
 2885|    664|        ps_codec->i4_header_mode = 1;
 2886|      0|    else
 2887|      0|    {
 2888|       |
 2889|      0|        s_ctl_dynparams_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
 2890|      0|        ps_codec->i4_header_mode = 1;
 2891|      0|        ret = IV_FAIL;
 2892|      0|    }
 2893|       |
 2894|  1.32k|    ps_codec->e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
 2895|       |
 2896|  1.32k|    if((s_ctl_dynparams_ip->e_frm_out_mode != IVD_DECODE_FRAME_OUT) &&
  ------------------
  |  Branch (2896:8): [True: 1.32k, False: 0]
  ------------------
 2897|  1.32k|       (s_ctl_dynparams_ip->e_frm_out_mode != IVD_DISPLAY_FRAME_OUT))
  ------------------
  |  Branch (2897:8): [True: 0, False: 1.32k]
  ------------------
 2898|      0|    {
 2899|      0|        s_ctl_dynparams_op->u4_error_code = (1 << IVD_UNSUPPORTEDPARAM);
 2900|      0|        ret = IV_FAIL;
 2901|      0|    }
 2902|  1.32k|    ps_codec->e_frm_out_mode = s_ctl_dynparams_ip->e_frm_out_mode;
 2903|       |
 2904|  1.32k|    return ret;
 2905|       |
 2906|  1.32k|}
ihevcd_reset:
 2933|    321|{
 2934|    321|    codec_t *ps_codec;
 2935|    321|    ivd_ctl_reset_op_t *s_ctl_reset_op = (ivd_ctl_reset_op_t *)pv_api_op;
 2936|    321|    UNUSED(pv_api_ip);
  ------------------
  |  |   38|    321|#define UNUSED(x) ((void)(x))
  ------------------
 2937|    321|    ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
 2938|       |
 2939|    321|    if(ps_codec != NULL)
  ------------------
  |  Branch (2939:8): [True: 321, False: 0]
  ------------------
 2940|    321|    {
 2941|    321|        DEBUG("\nReset called \n");
  ------------------
  |  |   49|    321|#define DEBUG(...) {}
  ------------------
 2942|    321|        ihevcd_init(ps_codec);
 2943|    321|    }
 2944|      0|    else
 2945|      0|    {
 2946|      0|        DEBUG("\nReset called without Initializing the decoder\n");
  ------------------
  |  |   49|      0|#define DEBUG(...) {}
  ------------------
 2947|      0|        s_ctl_reset_op->u4_error_code = IHEVCD_INIT_NOT_DONE;
 2948|      0|    }
 2949|       |
 2950|    321|    return IV_SUCCESS;
 2951|    321|}
ihevcd_set_processor:
 3425|    664|{
 3426|    664|    ihevcd_cxa_ctl_set_processor_ip_t *ps_ip;
 3427|    664|    ihevcd_cxa_ctl_set_processor_op_t *ps_op;
 3428|    664|    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
 3429|       |
 3430|    664|    ps_ip = (ihevcd_cxa_ctl_set_processor_ip_t *)pv_api_ip;
 3431|    664|    ps_op = (ihevcd_cxa_ctl_set_processor_op_t *)pv_api_op;
 3432|       |
 3433|    664|    ps_codec->e_processor_arch = (IVD_ARCH_T)ps_ip->u4_arch;
 3434|    664|    ps_codec->e_processor_soc = (IVD_SOC_T)ps_ip->u4_soc;
 3435|       |
 3436|    664|    ihevcd_init_function_ptr(ps_codec);
 3437|       |
 3438|    664|    ihevcd_update_function_ptr(ps_codec);
 3439|       |
 3440|    664|    if(ps_codec->e_processor_soc && (ps_codec->e_processor_soc <= SOC_HISI_37X))
  ------------------
  |  Branch (3440:8): [True: 0, False: 664]
  |  Branch (3440:37): [True: 0, False: 0]
  ------------------
 3441|      0|    {
 3442|       |        /* 8th bit indicates if format conversion is to be done ahead */
 3443|      0|        if(ps_codec->e_processor_soc & 0x80)
  ------------------
  |  Branch (3443:12): [True: 0, False: 0]
  ------------------
 3444|      0|            ps_codec->u4_enable_fmt_conv_ahead = 1;
 3445|       |
 3446|       |        /* Lower 7 bit indicate NCTB - if non-zero */
 3447|      0|        ps_codec->e_processor_soc &= 0x7F;
 3448|       |
 3449|      0|        if(ps_codec->e_processor_soc)
  ------------------
  |  Branch (3449:12): [True: 0, False: 0]
  ------------------
 3450|      0|            ps_codec->u4_nctb = ps_codec->e_processor_soc;
 3451|       |
 3452|       |
 3453|      0|    }
 3454|       |
 3455|    664|    if((ps_codec->e_processor_soc == SOC_HISI_37X) && (ps_codec->i4_num_cores == 2))
  ------------------
  |  Branch (3455:8): [True: 0, False: 664]
  |  Branch (3455:55): [True: 0, False: 0]
  ------------------
 3456|      0|    {
 3457|      0|        ps_codec->u4_nctb = 2;
 3458|      0|    }
 3459|       |
 3460|       |
 3461|    664|    ps_op->u4_error_code = 0;
 3462|    664|    return IV_SUCCESS;
 3463|    664|}
ihevcd_set_num_cores:
 3495|    664|{
 3496|    664|    ihevcd_cxa_ctl_set_num_cores_ip_t *ps_ip;
 3497|    664|    ihevcd_cxa_ctl_set_num_cores_op_t *ps_op;
 3498|    664|    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
 3499|       |
 3500|    664|    ps_ip = (ihevcd_cxa_ctl_set_num_cores_ip_t *)pv_api_ip;
 3501|    664|    ps_op = (ihevcd_cxa_ctl_set_num_cores_op_t *)pv_api_op;
 3502|       |
 3503|    664|    ps_codec->i4_num_cores = ps_ip->u4_num_cores;
 3504|    664|    ps_op->u4_error_code = 0;
 3505|    664|    return IV_SUCCESS;
 3506|    664|}
ihevcd_ctl:
 3535|  2.97k|{
 3536|  2.97k|    ivd_ctl_set_config_ip_t *ps_ctl_ip;
 3537|  2.97k|    ivd_ctl_set_config_op_t *ps_ctl_op;
 3538|  2.97k|    WORD32 ret = 0;
 3539|  2.97k|    WORD32 subcommand;
 3540|  2.97k|    codec_t *ps_codec = (codec_t *)ps_codec_obj->pv_codec_handle;
 3541|       |
 3542|  2.97k|    ps_ctl_ip = (ivd_ctl_set_config_ip_t *)pv_api_ip;
 3543|  2.97k|    ps_ctl_op = (ivd_ctl_set_config_op_t *)pv_api_op;
 3544|       |
 3545|  2.97k|    if(ps_codec->i4_init_done != 1)
  ------------------
  |  Branch (3545:8): [True: 0, False: 2.97k]
  ------------------
 3546|      0|    {
 3547|      0|        ps_ctl_op->u4_error_code |= 1 << IVD_FATALERROR;
 3548|      0|        ps_ctl_op->u4_error_code |= IHEVCD_INIT_NOT_DONE;
 3549|      0|        return IV_FAIL;
 3550|      0|    }
 3551|  2.97k|    subcommand = ps_ctl_ip->e_sub_cmd;
 3552|       |
 3553|  2.97k|    switch(subcommand)
 3554|  2.97k|    {
 3555|      0|        case IVD_CMD_CTL_GETPARAMS:
  ------------------
  |  Branch (3555:9): [True: 0, False: 2.97k]
  ------------------
 3556|      0|            ret = ihevcd_get_status(ps_codec_obj, (void *)pv_api_ip,
 3557|      0|                                    (void *)pv_api_op);
 3558|      0|            break;
 3559|  1.32k|        case IVD_CMD_CTL_SETPARAMS:
  ------------------
  |  Branch (3559:9): [True: 1.32k, False: 1.64k]
  ------------------
 3560|  1.32k|            ret = ihevcd_set_params(ps_codec_obj, (void *)pv_api_ip,
 3561|  1.32k|                                    (void *)pv_api_op);
 3562|  1.32k|            break;
 3563|    321|        case IVD_CMD_CTL_RESET:
  ------------------
  |  Branch (3563:9): [True: 321, False: 2.65k]
  ------------------
 3564|    321|            ret = ihevcd_reset(ps_codec_obj, (void *)pv_api_ip,
 3565|    321|                               (void *)pv_api_op);
 3566|    321|            break;
 3567|      0|        case IVD_CMD_CTL_SETDEFAULT:
  ------------------
  |  Branch (3567:9): [True: 0, False: 2.97k]
  ------------------
 3568|      0|        {
 3569|      0|            ivd_ctl_set_config_op_t *s_ctl_dynparams_op =
 3570|      0|                            (ivd_ctl_set_config_op_t *)pv_api_op;
 3571|       |
 3572|      0|            ret = ihevcd_set_default_params(ps_codec);
 3573|      0|            if(IV_SUCCESS == ret)
  ------------------
  |  Branch (3573:16): [True: 0, False: 0]
  ------------------
 3574|      0|                s_ctl_dynparams_op->u4_error_code = 0;
 3575|      0|            break;
 3576|      0|        }
 3577|      0|        case IVD_CMD_CTL_FLUSH:
  ------------------
  |  Branch (3577:9): [True: 0, False: 2.97k]
  ------------------
 3578|      0|            ret = ihevcd_set_flush_mode(ps_codec_obj, (void *)pv_api_ip,
 3579|      0|                                        (void *)pv_api_op);
 3580|      0|            break;
 3581|      0|        case IVD_CMD_CTL_GETBUFINFO:
  ------------------
  |  Branch (3581:9): [True: 0, False: 2.97k]
  ------------------
 3582|      0|            ret = ihevcd_get_buf_info(ps_codec_obj, (void *)pv_api_ip,
 3583|      0|                                      (void *)pv_api_op);
 3584|      0|            break;
 3585|      0|        case IVD_CMD_CTL_GETVERSION:
  ------------------
  |  Branch (3585:9): [True: 0, False: 2.97k]
  ------------------
 3586|      0|        {
 3587|      0|            ivd_ctl_getversioninfo_ip_t *ps_ip;
 3588|      0|            ivd_ctl_getversioninfo_op_t *ps_op;
 3589|      0|            IV_API_CALL_STATUS_T ret;
 3590|      0|            ps_ip = (ivd_ctl_getversioninfo_ip_t *)pv_api_ip;
 3591|      0|            ps_op = (ivd_ctl_getversioninfo_op_t *)pv_api_op;
 3592|       |
 3593|      0|            ps_op->u4_error_code = IV_SUCCESS;
 3594|       |
 3595|      0|            if((WORD32)ps_ip->u4_version_buffer_size <= 0)
  ------------------
  |  Branch (3595:16): [True: 0, False: 0]
  ------------------
 3596|      0|            {
 3597|      0|                ps_op->u4_error_code = IHEVCD_CXA_VERS_BUF_INSUFFICIENT;
 3598|      0|                ret = IV_FAIL;
 3599|      0|            }
 3600|      0|            else
 3601|      0|            {
 3602|      0|                ret = ihevcd_get_version((CHAR *)ps_ip->pv_version_buffer,
 3603|      0|                                         ps_ip->u4_version_buffer_size);
 3604|      0|                if(ret != IV_SUCCESS)
  ------------------
  |  Branch (3604:20): [True: 0, False: 0]
  ------------------
 3605|      0|                {
 3606|      0|                    ps_op->u4_error_code = IHEVCD_CXA_VERS_BUF_INSUFFICIENT;
 3607|      0|                    ret = IV_FAIL;
 3608|      0|                }
 3609|      0|            }
 3610|      0|        }
 3611|      0|            break;
 3612|      0|        case IHEVCD_CXA_CMD_CTL_DEGRADE:
  ------------------
  |  Branch (3612:9): [True: 0, False: 2.97k]
  ------------------
 3613|      0|            ret = ihevcd_set_degrade(ps_codec_obj, (void *)pv_api_ip,
 3614|      0|                            (void *)pv_api_op);
 3615|      0|            break;
 3616|    664|        case IHEVCD_CXA_CMD_CTL_SET_NUM_CORES:
  ------------------
  |  Branch (3616:9): [True: 664, False: 2.31k]
  ------------------
 3617|    664|            ret = ihevcd_set_num_cores(ps_codec_obj, (void *)pv_api_ip,
 3618|    664|                                       (void *)pv_api_op);
 3619|    664|            break;
 3620|      0|        case IHEVCD_CXA_CMD_CTL_GET_BUFFER_DIMENSIONS:
  ------------------
  |  Branch (3620:9): [True: 0, False: 2.97k]
  ------------------
 3621|      0|            ret = ihevcd_get_frame_dimensions(ps_codec_obj, (void *)pv_api_ip,
 3622|      0|                                              (void *)pv_api_op);
 3623|      0|            break;
 3624|      0|        case IHEVCD_CXA_CMD_CTL_GET_VUI_PARAMS:
  ------------------
  |  Branch (3624:9): [True: 0, False: 2.97k]
  ------------------
 3625|      0|            ret = ihevcd_get_vui_params(ps_codec_obj, (void *)pv_api_ip,
 3626|      0|                                        (void *)pv_api_op);
 3627|      0|            break;
 3628|      0|        case IHEVCD_CXA_CMD_CTL_GET_SEI_MASTERING_PARAMS:
  ------------------
  |  Branch (3628:9): [True: 0, False: 2.97k]
  ------------------
 3629|      0|            ret = ihevcd_get_sei_mastering_params(ps_codec_obj, (void *)pv_api_ip,
 3630|      0|                                        (void *)pv_api_op);
 3631|      0|            break;
 3632|    664|        case IHEVCD_CXA_CMD_CTL_SET_PROCESSOR:
  ------------------
  |  Branch (3632:9): [True: 664, False: 2.31k]
  ------------------
 3633|    664|            ret = ihevcd_set_processor(ps_codec_obj, (void *)pv_api_ip,
 3634|    664|                            (void *)pv_api_op);
 3635|    664|            break;
 3636|      0|        default:
  ------------------
  |  Branch (3636:9): [True: 0, False: 2.97k]
  ------------------
 3637|      0|            DEBUG("\nDo nothing\n");
  ------------------
  |  |   49|      0|#define DEBUG(...) {}
  ------------------
 3638|      0|            break;
 3639|  2.97k|    }
 3640|       |
 3641|  2.97k|    return ret;
 3642|  2.97k|}
ihevcd_cxa_api_function:
 3674|  1.13M|{
 3675|  1.13M|    WORD32 command;
 3676|  1.13M|    UWORD32 *pu4_ptr_cmd;
 3677|  1.13M|    WORD32 ret = 0;
 3678|  1.13M|    IV_API_CALL_STATUS_T e_status;
 3679|  1.13M|    e_status = api_check_struct_sanity(ps_handle, pv_api_ip, pv_api_op);
 3680|       |
 3681|  1.13M|    if(e_status != IV_SUCCESS)
  ------------------
  |  Branch (3681:8): [True: 0, False: 1.13M]
  ------------------
 3682|      0|    {
 3683|      0|        DEBUG("error code = %d\n", *((UWORD32 *)pv_api_op + 1));
  ------------------
  |  |   49|      0|#define DEBUG(...) {}
  ------------------
 3684|      0|        return IV_FAIL;
 3685|      0|    }
 3686|       |
 3687|  1.13M|    pu4_ptr_cmd = (UWORD32 *)pv_api_ip;
 3688|  1.13M|    pu4_ptr_cmd++;
 3689|       |
 3690|  1.13M|    command = *pu4_ptr_cmd;
 3691|       |
 3692|  1.13M|    switch(command)
 3693|  1.13M|    {
 3694|    664|        case IVD_CMD_CREATE:
  ------------------
  |  Branch (3694:9): [True: 664, False: 1.13M]
  ------------------
 3695|    664|            ret = ihevcd_create(ps_handle, (void *)pv_api_ip, (void *)pv_api_op);
 3696|    664|            break;
 3697|    664|        case IVD_CMD_DELETE:
  ------------------
  |  Branch (3697:9): [True: 664, False: 1.13M]
  ------------------
 3698|    664|            ret = ihevcd_delete(ps_handle, (void *)pv_api_ip, (void *)pv_api_op);
 3699|    664|            break;
 3700|       |
 3701|  1.12M|        case IVD_CMD_VIDEO_DECODE:
  ------------------
  |  Branch (3701:9): [True: 1.12M, False: 4.30k]
  ------------------
 3702|  1.12M|            ret = ihevcd_decode(ps_handle, (void *)pv_api_ip, (void *)pv_api_op);
 3703|  1.12M|            break;
 3704|       |
 3705|      0|        case IVD_CMD_GET_DISPLAY_FRAME:
  ------------------
  |  Branch (3705:9): [True: 0, False: 1.13M]
  ------------------
 3706|       |            //ret = ihevcd_get_display_frame(ps_handle,(void *)pv_api_ip,(void *)pv_api_op);
 3707|      0|            break;
 3708|       |
 3709|      0|        case IVD_CMD_SET_DISPLAY_FRAME:
  ------------------
  |  Branch (3709:9): [True: 0, False: 1.13M]
  ------------------
 3710|      0|            ret = ihevcd_set_display_frame(ps_handle, (void *)pv_api_ip,
 3711|      0|                                           (void *)pv_api_op);
 3712|       |
 3713|      0|            break;
 3714|       |
 3715|      0|        case IVD_CMD_REL_DISPLAY_FRAME:
  ------------------
  |  Branch (3715:9): [True: 0, False: 1.13M]
  ------------------
 3716|      0|            ret = ihevcd_rel_display_frame(ps_handle, (void *)pv_api_ip,
 3717|      0|                                           (void *)pv_api_op);
 3718|      0|            break;
 3719|       |
 3720|  2.97k|        case IVD_CMD_VIDEO_CTL:
  ------------------
  |  Branch (3720:9): [True: 2.97k, False: 1.13M]
  ------------------
 3721|  2.97k|            ret = ihevcd_ctl(ps_handle, (void *)pv_api_ip, (void *)pv_api_op);
 3722|  2.97k|            break;
 3723|      0|        default:
  ------------------
  |  Branch (3723:9): [True: 0, False: 1.13M]
  ------------------
 3724|      0|            ret = IV_FAIL;
 3725|      0|            break;
 3726|  1.13M|    }
 3727|       |
 3728|  1.13M|    return (IV_API_CALL_STATUS_T)ret;
 3729|  1.13M|}
ihevcd_api.c:api_check_struct_sanity:
  136|  1.13M|{
  137|  1.13M|    IVD_API_COMMAND_TYPE_T e_cmd;
  138|  1.13M|    UWORD32 *pu4_api_ip;
  139|  1.13M|    UWORD32 *pu4_api_op;
  140|  1.13M|    WORD32 i;
  141|       |
  142|  1.13M|    if(NULL == pv_api_op)
  ------------------
  |  Branch (142:8): [True: 0, False: 1.13M]
  ------------------
  143|      0|        return (IV_FAIL);
  144|       |
  145|  1.13M|    if(NULL == pv_api_ip)
  ------------------
  |  Branch (145:8): [True: 0, False: 1.13M]
  ------------------
  146|      0|        return (IV_FAIL);
  147|       |
  148|  1.13M|    pu4_api_ip = (UWORD32 *)pv_api_ip;
  149|  1.13M|    pu4_api_op = (UWORD32 *)pv_api_op;
  150|  1.13M|    e_cmd = (IVD_API_COMMAND_TYPE_T)*(pu4_api_ip + 1);
  151|       |
  152|  1.13M|    *(pu4_api_op + 1) = 0;
  153|       |    /* error checks on handle */
  154|  1.13M|    switch((WORD32)e_cmd)
  155|  1.13M|    {
  156|    664|        case IVD_CMD_CREATE:
  ------------------
  |  Branch (156:9): [True: 664, False: 1.13M]
  ------------------
  157|    664|            break;
  158|       |
  159|      0|        case IVD_CMD_REL_DISPLAY_FRAME:
  ------------------
  |  Branch (159:9): [True: 0, False: 1.13M]
  ------------------
  160|      0|        case IVD_CMD_SET_DISPLAY_FRAME:
  ------------------
  |  Branch (160:9): [True: 0, False: 1.13M]
  ------------------
  161|      0|        case IVD_CMD_GET_DISPLAY_FRAME:
  ------------------
  |  Branch (161:9): [True: 0, False: 1.13M]
  ------------------
  162|  1.12M|        case IVD_CMD_VIDEO_DECODE:
  ------------------
  |  Branch (162:9): [True: 1.12M, False: 4.30k]
  ------------------
  163|  1.13M|        case IVD_CMD_DELETE:
  ------------------
  |  Branch (163:9): [True: 664, False: 1.13M]
  ------------------
  164|  1.13M|        case IVD_CMD_VIDEO_CTL:
  ------------------
  |  Branch (164:9): [True: 2.97k, False: 1.13M]
  ------------------
  165|  1.13M|            if(ps_handle == NULL)
  ------------------
  |  Branch (165:16): [True: 0, False: 1.13M]
  ------------------
  166|      0|            {
  167|      0|                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
  168|      0|                *(pu4_api_op + 1) |= IVD_HANDLE_NULL;
  169|      0|                return IV_FAIL;
  170|      0|            }
  171|       |
  172|  1.13M|            if(ps_handle->u4_size != sizeof(iv_obj_t))
  ------------------
  |  Branch (172:16): [True: 0, False: 1.13M]
  ------------------
  173|      0|            {
  174|      0|                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
  175|      0|                *(pu4_api_op + 1) |= IVD_HANDLE_STRUCT_SIZE_INCORRECT;
  176|      0|                return IV_FAIL;
  177|      0|            }
  178|       |
  179|       |
  180|  1.13M|            if(ps_handle->pv_codec_handle == NULL)
  ------------------
  |  Branch (180:16): [True: 0, False: 1.13M]
  ------------------
  181|      0|            {
  182|      0|                *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
  183|      0|                *(pu4_api_op + 1) |= IVD_INVALID_HANDLE_NULL;
  184|      0|                return IV_FAIL;
  185|      0|            }
  186|  1.13M|            break;
  187|  1.13M|        default:
  ------------------
  |  Branch (187:9): [True: 0, False: 1.13M]
  ------------------
  188|      0|            *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
  189|      0|            *(pu4_api_op + 1) |= IVD_INVALID_API_CMD;
  190|      0|            return IV_FAIL;
  191|  1.13M|    }
  192|       |
  193|  1.13M|    switch((WORD32)e_cmd)
  194|  1.13M|    {
  195|    664|        case IVD_CMD_CREATE:
  ------------------
  |  Branch (195:9): [True: 664, False: 1.13M]
  ------------------
  196|    664|        {
  197|    664|            ihevcd_cxa_create_ip_t *ps_ip = (ihevcd_cxa_create_ip_t *)pv_api_ip;
  198|    664|            ihevcd_cxa_create_op_t *ps_op = (ihevcd_cxa_create_op_t *)pv_api_op;
  199|       |
  200|       |
  201|    664|            ps_op->s_ivd_create_op_t.u4_error_code = 0;
  202|       |
  203|    664|            if((ps_ip->s_ivd_create_ip_t.u4_size > sizeof(ihevcd_cxa_create_ip_t))
  ------------------
  |  Branch (203:16): [True: 0, False: 664]
  ------------------
  204|    664|                            || (ps_ip->s_ivd_create_ip_t.u4_size
  ------------------
  |  Branch (204:32): [True: 0, False: 664]
  ------------------
  205|    664|                                            < sizeof(ivd_create_ip_t)))
  206|      0|            {
  207|      0|                ps_op->s_ivd_create_op_t.u4_error_code |= 1
  208|      0|                                << IVD_UNSUPPORTEDPARAM;
  209|      0|                ps_op->s_ivd_create_op_t.u4_error_code |=
  210|      0|                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
  211|       |
  212|      0|                return (IV_FAIL);
  213|      0|            }
  214|       |
  215|    664|            if((ps_op->s_ivd_create_op_t.u4_size != sizeof(ihevcd_cxa_create_op_t))
  ------------------
  |  Branch (215:16): [True: 0, False: 664]
  ------------------
  216|    664|                            && (ps_op->s_ivd_create_op_t.u4_size
  ------------------
  |  Branch (216:32): [True: 0, False: 0]
  ------------------
  217|      0|                                            != sizeof(ivd_create_op_t)))
  218|      0|            {
  219|      0|                ps_op->s_ivd_create_op_t.u4_error_code |= 1
  220|      0|                                << IVD_UNSUPPORTEDPARAM;
  221|      0|                ps_op->s_ivd_create_op_t.u4_error_code |=
  222|      0|                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
  223|       |
  224|      0|                return (IV_FAIL);
  225|      0|            }
  226|       |
  227|       |
  228|    664|            if((ps_ip->s_ivd_create_ip_t.e_output_format != IV_YUV_420P)
  ------------------
  |  Branch (228:16): [True: 451, False: 213]
  ------------------
  229|    664|                            && (ps_ip->s_ivd_create_ip_t.e_output_format
  ------------------
  |  Branch (229:32): [True: 346, False: 105]
  ------------------
  230|    451|                                            != IV_YUV_422ILE)
  231|    664|                            && (ps_ip->s_ivd_create_ip_t.e_output_format
  ------------------
  |  Branch (231:32): [True: 306, False: 40]
  ------------------
  232|    346|                                            != IV_RGB_565)
  233|    664|                            && (ps_ip->s_ivd_create_ip_t.e_output_format
  ------------------
  |  Branch (233:32): [True: 71, False: 235]
  ------------------
  234|    306|                                            != IV_YUV_420SP_UV)
  235|    664|                            && (ps_ip->s_ivd_create_ip_t.e_output_format
  ------------------
  |  Branch (235:32): [True: 0, False: 71]
  ------------------
  236|     71|                                            != IV_YUV_420SP_VU))
  237|      0|            {
  238|      0|                ps_op->s_ivd_create_op_t.u4_error_code |= 1
  239|      0|                                << IVD_UNSUPPORTEDPARAM;
  240|      0|                ps_op->s_ivd_create_op_t.u4_error_code |=
  241|      0|                                IVD_INIT_DEC_COL_FMT_NOT_SUPPORTED;
  242|       |
  243|      0|                return (IV_FAIL);
  244|      0|            }
  245|       |
  246|    664|        }
  247|    664|            break;
  248|       |
  249|    664|        case IVD_CMD_GET_DISPLAY_FRAME:
  ------------------
  |  Branch (249:9): [True: 0, False: 1.13M]
  ------------------
  250|      0|        {
  251|      0|            ihevcd_cxa_get_display_frame_ip_t *ps_ip =
  252|      0|                            (ihevcd_cxa_get_display_frame_ip_t *)pv_api_ip;
  253|      0|            ihevcd_cxa_get_display_frame_op_t *ps_op =
  254|      0|                            (ihevcd_cxa_get_display_frame_op_t *)pv_api_op;
  255|       |
  256|      0|            ps_op->s_ivd_get_display_frame_op_t.u4_error_code = 0;
  257|       |
  258|      0|            if((ps_ip->s_ivd_get_display_frame_ip_t.u4_size
  ------------------
  |  Branch (258:16): [True: 0, False: 0]
  ------------------
  259|      0|                            != sizeof(ihevcd_cxa_get_display_frame_ip_t))
  260|      0|                            && (ps_ip->s_ivd_get_display_frame_ip_t.u4_size
  ------------------
  |  Branch (260:32): [True: 0, False: 0]
  ------------------
  261|      0|                                            != sizeof(ivd_get_display_frame_ip_t)))
  262|      0|            {
  263|      0|                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |= 1
  264|      0|                                << IVD_UNSUPPORTEDPARAM;
  265|      0|                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |=
  266|      0|                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
  267|      0|                return (IV_FAIL);
  268|      0|            }
  269|       |
  270|      0|            if((ps_op->s_ivd_get_display_frame_op_t.u4_size
  ------------------
  |  Branch (270:16): [True: 0, False: 0]
  ------------------
  271|      0|                            != sizeof(ihevcd_cxa_get_display_frame_op_t))
  272|      0|                            && (ps_op->s_ivd_get_display_frame_op_t.u4_size
  ------------------
  |  Branch (272:32): [True: 0, False: 0]
  ------------------
  273|      0|                                            != sizeof(ivd_get_display_frame_op_t)))
  274|      0|            {
  275|      0|                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |= 1
  276|      0|                                << IVD_UNSUPPORTEDPARAM;
  277|      0|                ps_op->s_ivd_get_display_frame_op_t.u4_error_code |=
  278|      0|                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
  279|      0|                return (IV_FAIL);
  280|      0|            }
  281|       |
  282|      0|        }
  283|      0|            break;
  284|       |
  285|      0|        case IVD_CMD_REL_DISPLAY_FRAME:
  ------------------
  |  Branch (285:9): [True: 0, False: 1.13M]
  ------------------
  286|      0|        {
  287|      0|            ihevcd_cxa_rel_display_frame_ip_t *ps_ip =
  288|      0|                            (ihevcd_cxa_rel_display_frame_ip_t *)pv_api_ip;
  289|      0|            ihevcd_cxa_rel_display_frame_op_t *ps_op =
  290|      0|                            (ihevcd_cxa_rel_display_frame_op_t *)pv_api_op;
  291|       |
  292|      0|            ps_op->s_ivd_rel_display_frame_op_t.u4_error_code = 0;
  293|       |
  294|      0|            if((ps_ip->s_ivd_rel_display_frame_ip_t.u4_size
  ------------------
  |  Branch (294:16): [True: 0, False: 0]
  ------------------
  295|      0|                            != sizeof(ihevcd_cxa_rel_display_frame_ip_t))
  296|      0|                            && (ps_ip->s_ivd_rel_display_frame_ip_t.u4_size
  ------------------
  |  Branch (296:32): [True: 0, False: 0]
  ------------------
  297|      0|                                            != sizeof(ivd_rel_display_frame_ip_t)))
  298|      0|            {
  299|      0|                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |= 1
  300|      0|                                << IVD_UNSUPPORTEDPARAM;
  301|      0|                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |=
  302|      0|                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
  303|      0|                return (IV_FAIL);
  304|      0|            }
  305|       |
  306|      0|            if((ps_op->s_ivd_rel_display_frame_op_t.u4_size
  ------------------
  |  Branch (306:16): [True: 0, False: 0]
  ------------------
  307|      0|                            != sizeof(ihevcd_cxa_rel_display_frame_op_t))
  308|      0|                            && (ps_op->s_ivd_rel_display_frame_op_t.u4_size
  ------------------
  |  Branch (308:32): [True: 0, False: 0]
  ------------------
  309|      0|                                            != sizeof(ivd_rel_display_frame_op_t)))
  310|      0|            {
  311|      0|                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |= 1
  312|      0|                                << IVD_UNSUPPORTEDPARAM;
  313|      0|                ps_op->s_ivd_rel_display_frame_op_t.u4_error_code |=
  314|      0|                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
  315|      0|                return (IV_FAIL);
  316|      0|            }
  317|       |
  318|      0|        }
  319|      0|            break;
  320|       |
  321|      0|        case IVD_CMD_SET_DISPLAY_FRAME:
  ------------------
  |  Branch (321:9): [True: 0, False: 1.13M]
  ------------------
  322|      0|        {
  323|      0|            ihevcd_cxa_set_display_frame_ip_t *ps_ip =
  324|      0|                            (ihevcd_cxa_set_display_frame_ip_t *)pv_api_ip;
  325|      0|            ihevcd_cxa_set_display_frame_op_t *ps_op =
  326|      0|                            (ihevcd_cxa_set_display_frame_op_t *)pv_api_op;
  327|      0|            UWORD32 j;
  328|       |
  329|      0|            ps_op->s_ivd_set_display_frame_op_t.u4_error_code = 0;
  330|       |
  331|      0|            if((ps_ip->s_ivd_set_display_frame_ip_t.u4_size
  ------------------
  |  Branch (331:16): [True: 0, False: 0]
  ------------------
  332|      0|                            != sizeof(ihevcd_cxa_set_display_frame_ip_t))
  333|      0|                            && (ps_ip->s_ivd_set_display_frame_ip_t.u4_size
  ------------------
  |  Branch (333:32): [True: 0, False: 0]
  ------------------
  334|      0|                                            != sizeof(ivd_set_display_frame_ip_t)))
  335|      0|            {
  336|      0|                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
  337|      0|                                << IVD_UNSUPPORTEDPARAM;
  338|      0|                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
  339|      0|                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
  340|      0|                return (IV_FAIL);
  341|      0|            }
  342|       |
  343|      0|            if((ps_op->s_ivd_set_display_frame_op_t.u4_size
  ------------------
  |  Branch (343:16): [True: 0, False: 0]
  ------------------
  344|      0|                            != sizeof(ihevcd_cxa_set_display_frame_op_t))
  345|      0|                            && (ps_op->s_ivd_set_display_frame_op_t.u4_size
  ------------------
  |  Branch (345:32): [True: 0, False: 0]
  ------------------
  346|      0|                                            != sizeof(ivd_set_display_frame_op_t)))
  347|      0|            {
  348|      0|                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
  349|      0|                                << IVD_UNSUPPORTEDPARAM;
  350|      0|                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
  351|      0|                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
  352|      0|                return (IV_FAIL);
  353|      0|            }
  354|       |
  355|      0|            if(ps_ip->s_ivd_set_display_frame_ip_t.num_disp_bufs == 0)
  ------------------
  |  Branch (355:16): [True: 0, False: 0]
  ------------------
  356|      0|            {
  357|      0|                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
  358|      0|                                << IVD_UNSUPPORTEDPARAM;
  359|      0|                ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
  360|      0|                                IVD_DISP_FRM_ZERO_OP_BUFS;
  361|      0|                return IV_FAIL;
  362|      0|            }
  363|       |
  364|      0|            for(j = 0; j < ps_ip->s_ivd_set_display_frame_ip_t.num_disp_bufs;
  ------------------
  |  Branch (364:24): [True: 0, False: 0]
  ------------------
  365|      0|                            j++)
  366|      0|            {
  367|      0|                if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_num_bufs
  ------------------
  |  Branch (367:20): [True: 0, False: 0]
  ------------------
  368|      0|                                == 0)
  369|      0|                {
  370|      0|                    ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
  371|      0|                                    << IVD_UNSUPPORTEDPARAM;
  372|      0|                    ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
  373|      0|                                    IVD_DISP_FRM_ZERO_OP_BUFS;
  374|      0|                    return IV_FAIL;
  375|      0|                }
  376|       |
  377|      0|                for(i = 0;
  378|      0|                                i
  ------------------
  |  Branch (378:33): [True: 0, False: 0]
  ------------------
  379|      0|                                                < (WORD32)ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_num_bufs;
  380|      0|                                i++)
  381|      0|                {
  382|      0|                    if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].pu1_bufs[i]
  ------------------
  |  Branch (382:24): [True: 0, False: 0]
  ------------------
  383|      0|                                    == NULL)
  384|      0|                    {
  385|      0|                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
  386|      0|                                        << IVD_UNSUPPORTEDPARAM;
  387|      0|                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
  388|      0|                                        IVD_DISP_FRM_OP_BUF_NULL;
  389|      0|                        return IV_FAIL;
  390|      0|                    }
  391|       |
  392|      0|                    if(ps_ip->s_ivd_set_display_frame_ip_t.s_disp_buffer[j].u4_min_out_buf_size[i]
  ------------------
  |  Branch (392:24): [True: 0, False: 0]
  ------------------
  393|      0|                                    == 0)
  394|      0|                    {
  395|      0|                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |= 1
  396|      0|                                        << IVD_UNSUPPORTEDPARAM;
  397|      0|                        ps_op->s_ivd_set_display_frame_op_t.u4_error_code |=
  398|      0|                                        IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
  399|      0|                        return IV_FAIL;
  400|      0|                    }
  401|      0|                }
  402|      0|            }
  403|      0|        }
  404|      0|            break;
  405|       |
  406|  1.12M|        case IVD_CMD_VIDEO_DECODE:
  ------------------
  |  Branch (406:9): [True: 1.12M, False: 4.30k]
  ------------------
  407|  1.12M|        {
  408|  1.12M|            ihevcd_cxa_video_decode_ip_t *ps_ip =
  409|  1.12M|                            (ihevcd_cxa_video_decode_ip_t *)pv_api_ip;
  410|  1.12M|            ihevcd_cxa_video_decode_op_t *ps_op =
  411|  1.12M|                            (ihevcd_cxa_video_decode_op_t *)pv_api_op;
  412|       |
  413|  1.12M|            DEBUG("The input bytes is: %d",
  ------------------
  |  |   49|  1.12M|#define DEBUG(...) {}
  ------------------
  414|  1.12M|                            ps_ip->s_ivd_video_decode_ip_t.u4_num_Bytes);
  415|  1.12M|            ps_op->s_ivd_video_decode_op_t.u4_error_code = 0;
  416|       |
  417|  1.12M|            if(ps_ip->s_ivd_video_decode_ip_t.u4_size
  ------------------
  |  Branch (417:16): [True: 1.12M, False: 0]
  ------------------
  418|  1.12M|                            != sizeof(ihevcd_cxa_video_decode_ip_t)
  419|  1.12M|                            && ps_ip->s_ivd_video_decode_ip_t.u4_size
  ------------------
  |  Branch (419:32): [True: 0, False: 1.12M]
  ------------------
  420|  1.12M|                                            != sizeof(ivd_video_decode_ip_t))
  421|      0|            {
  422|      0|                ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1
  423|      0|                                << IVD_UNSUPPORTEDPARAM;
  424|      0|                ps_op->s_ivd_video_decode_op_t.u4_error_code |=
  425|      0|                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
  426|      0|                return (IV_FAIL);
  427|      0|            }
  428|       |
  429|  1.12M|            if(ps_op->s_ivd_video_decode_op_t.u4_size
  ------------------
  |  Branch (429:16): [True: 1.12M, False: 0]
  ------------------
  430|  1.12M|                            != sizeof(ihevcd_cxa_video_decode_op_t)
  431|  1.12M|                            && ps_op->s_ivd_video_decode_op_t.u4_size
  ------------------
  |  Branch (431:32): [True: 0, False: 1.12M]
  ------------------
  432|  1.12M|                                            != sizeof(ivd_video_decode_op_t))
  433|      0|            {
  434|      0|                ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1
  435|      0|                                << IVD_UNSUPPORTEDPARAM;
  436|      0|                ps_op->s_ivd_video_decode_op_t.u4_error_code |=
  437|      0|                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
  438|      0|                return (IV_FAIL);
  439|      0|            }
  440|       |
  441|  1.12M|            if(((codec_t *)(ps_handle->pv_codec_handle))->u1_enable_cu_info
  ------------------
  |  Branch (441:16): [True: 0, False: 1.12M]
  ------------------
  442|  1.12M|                            && !ps_ip->pu1_8x8_blk_qp_map && !ps_ip->pu1_8x8_blk_type_map)
  ------------------
  |  Branch (442:32): [True: 0, False: 0]
  |  Branch (442:62): [True: 0, False: 0]
  ------------------
  443|      0|            {
  444|      0|                ps_op->s_ivd_video_decode_op_t.u4_error_code |= 1
  445|      0|                                << IVD_UNSUPPORTEDPARAM;
  446|      0|                ps_op->s_ivd_video_decode_op_t.u4_error_code |=
  447|      0|                                IHEVCD_FRAME_INFO_OP_BUF_NULL;
  448|      0|                return (IV_FAIL);
  449|      0|            }
  450|       |
  451|  1.12M|        }
  452|  1.12M|            break;
  453|       |
  454|  1.12M|        case IVD_CMD_DELETE:
  ------------------
  |  Branch (454:9): [True: 664, False: 1.13M]
  ------------------
  455|    664|        {
  456|    664|            ihevcd_cxa_delete_ip_t *ps_ip =
  457|    664|                            (ihevcd_cxa_delete_ip_t *)pv_api_ip;
  458|    664|            ihevcd_cxa_delete_op_t *ps_op =
  459|    664|                            (ihevcd_cxa_delete_op_t *)pv_api_op;
  460|       |
  461|    664|            ps_op->s_ivd_delete_op_t.u4_error_code = 0;
  462|       |
  463|    664|            if(ps_ip->s_ivd_delete_ip_t.u4_size
  ------------------
  |  Branch (463:16): [True: 0, False: 664]
  ------------------
  464|    664|                            != sizeof(ihevcd_cxa_delete_ip_t))
  465|      0|            {
  466|      0|                ps_op->s_ivd_delete_op_t.u4_error_code |= 1
  467|      0|                                << IVD_UNSUPPORTEDPARAM;
  468|      0|                ps_op->s_ivd_delete_op_t.u4_error_code |=
  469|      0|                                IVD_IP_API_STRUCT_SIZE_INCORRECT;
  470|      0|                return (IV_FAIL);
  471|      0|            }
  472|       |
  473|    664|            if(ps_op->s_ivd_delete_op_t.u4_size
  ------------------
  |  Branch (473:16): [True: 0, False: 664]
  ------------------
  474|    664|                            != sizeof(ihevcd_cxa_delete_op_t))
  475|      0|            {
  476|      0|                ps_op->s_ivd_delete_op_t.u4_error_code |= 1
  477|      0|                                << IVD_UNSUPPORTEDPARAM;
  478|      0|                ps_op->s_ivd_delete_op_t.u4_error_code |=
  479|      0|                                IVD_OP_API_STRUCT_SIZE_INCORRECT;
  480|      0|                return (IV_FAIL);
  481|      0|            }
  482|       |
  483|    664|        }
  484|    664|            break;
  485|       |
  486|  2.97k|        case IVD_CMD_VIDEO_CTL:
  ------------------
  |  Branch (486:9): [True: 2.97k, False: 1.13M]
  ------------------
  487|  2.97k|        {
  488|  2.97k|            UWORD32 *pu4_ptr_cmd;
  489|  2.97k|            UWORD32 sub_command;
  490|       |
  491|  2.97k|            pu4_ptr_cmd = (UWORD32 *)pv_api_ip;
  492|  2.97k|            pu4_ptr_cmd += 2;
  493|  2.97k|            sub_command = *pu4_ptr_cmd;
  494|       |
  495|  2.97k|            switch(sub_command)
  496|  2.97k|            {
  497|  1.32k|                case IVD_CMD_CTL_SETPARAMS:
  ------------------
  |  Branch (497:17): [True: 1.32k, False: 1.64k]
  ------------------
  498|  1.32k|                {
  499|  1.32k|                    ihevcd_cxa_ctl_set_config_ip_t *ps_ip;
  500|  1.32k|                    ihevcd_cxa_ctl_set_config_op_t *ps_op;
  501|  1.32k|                    ps_ip = (ihevcd_cxa_ctl_set_config_ip_t *)pv_api_ip;
  502|  1.32k|                    ps_op = (ihevcd_cxa_ctl_set_config_op_t *)pv_api_op;
  503|       |
  504|  1.32k|                    if(ps_ip->s_ivd_ctl_set_config_ip_t.u4_size
  ------------------
  |  Branch (504:24): [True: 0, False: 1.32k]
  ------------------
  505|  1.32k|                                    != sizeof(ihevcd_cxa_ctl_set_config_ip_t) &&
  506|  1.32k|                                    ps_ip->s_ivd_ctl_set_config_ip_t.u4_size
  ------------------
  |  Branch (506:37): [True: 0, False: 0]
  ------------------
  507|      0|                                                != sizeof(ivd_ctl_set_config_ip_t))
  508|      0|                    {
  509|      0|                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |= 1
  510|      0|                                        << IVD_UNSUPPORTEDPARAM;
  511|      0|                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |=
  512|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  513|      0|                        return IV_FAIL;
  514|      0|                    }
  515|  1.32k|                }
  516|       |                    //no break; is needed here
  517|  1.32k|                case IVD_CMD_CTL_SETDEFAULT:
  ------------------
  |  Branch (517:17): [True: 0, False: 2.97k]
  ------------------
  518|  1.32k|                {
  519|  1.32k|                    ihevcd_cxa_ctl_set_config_op_t *ps_op;
  520|  1.32k|                    ps_op = (ihevcd_cxa_ctl_set_config_op_t *)pv_api_op;
  521|  1.32k|                    if(ps_op->s_ivd_ctl_set_config_op_t.u4_size
  ------------------
  |  Branch (521:24): [True: 0, False: 1.32k]
  ------------------
  522|  1.32k|                                    != sizeof(ihevcd_cxa_ctl_set_config_op_t))
  523|      0|                    {
  524|      0|                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |= 1
  525|      0|                                        << IVD_UNSUPPORTEDPARAM;
  526|      0|                        ps_op->s_ivd_ctl_set_config_op_t.u4_error_code |=
  527|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  528|      0|                        return IV_FAIL;
  529|      0|                    }
  530|  1.32k|                }
  531|  1.32k|                    break;
  532|       |
  533|  1.32k|                case IVD_CMD_CTL_GETPARAMS:
  ------------------
  |  Branch (533:17): [True: 0, False: 2.97k]
  ------------------
  534|      0|                {
  535|      0|                    ihevcd_cxa_ctl_getstatus_ip_t *ps_ip;
  536|      0|                    ihevcd_cxa_ctl_getstatus_op_t *ps_op;
  537|       |
  538|      0|                    ps_ip = (ihevcd_cxa_ctl_getstatus_ip_t *)pv_api_ip;
  539|      0|                    ps_op = (ihevcd_cxa_ctl_getstatus_op_t *)pv_api_op;
  540|      0|                    if(ps_ip->s_ivd_ctl_getstatus_ip_t.u4_size
  ------------------
  |  Branch (540:24): [True: 0, False: 0]
  ------------------
  541|      0|                                    != sizeof(ihevcd_cxa_ctl_getstatus_ip_t))
  542|      0|                    {
  543|      0|                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |= 1
  544|      0|                                        << IVD_UNSUPPORTEDPARAM;
  545|      0|                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |=
  546|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  547|      0|                        return IV_FAIL;
  548|      0|                    }
  549|      0|                    if((ps_op->s_ivd_ctl_getstatus_op_t.u4_size
  ------------------
  |  Branch (549:24): [True: 0, False: 0]
  ------------------
  550|      0|                                    != sizeof(ihevcd_cxa_ctl_getstatus_op_t)) &&
  551|      0|                       (ps_op->s_ivd_ctl_getstatus_op_t.u4_size
  ------------------
  |  Branch (551:24): [True: 0, False: 0]
  ------------------
  552|      0|                                    != sizeof(ivd_ctl_getstatus_op_t)))
  553|      0|                    {
  554|      0|                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |= 1
  555|      0|                                        << IVD_UNSUPPORTEDPARAM;
  556|      0|                        ps_op->s_ivd_ctl_getstatus_op_t.u4_error_code |=
  557|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  558|      0|                        return IV_FAIL;
  559|      0|                    }
  560|      0|                }
  561|      0|                    break;
  562|       |
  563|      0|                case IVD_CMD_CTL_GETBUFINFO:
  ------------------
  |  Branch (563:17): [True: 0, False: 2.97k]
  ------------------
  564|      0|                {
  565|      0|                    ihevcd_cxa_ctl_getbufinfo_ip_t *ps_ip;
  566|      0|                    ihevcd_cxa_ctl_getbufinfo_op_t *ps_op;
  567|      0|                    ps_ip = (ihevcd_cxa_ctl_getbufinfo_ip_t *)pv_api_ip;
  568|      0|                    ps_op = (ihevcd_cxa_ctl_getbufinfo_op_t *)pv_api_op;
  569|       |
  570|      0|                    if(ps_ip->s_ivd_ctl_getbufinfo_ip_t.u4_size
  ------------------
  |  Branch (570:24): [True: 0, False: 0]
  ------------------
  571|      0|                                    != sizeof(ihevcd_cxa_ctl_getbufinfo_ip_t))
  572|      0|                    {
  573|      0|                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |= 1
  574|      0|                                        << IVD_UNSUPPORTEDPARAM;
  575|      0|                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |=
  576|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  577|      0|                        return IV_FAIL;
  578|      0|                    }
  579|      0|                    if(ps_op->s_ivd_ctl_getbufinfo_op_t.u4_size
  ------------------
  |  Branch (579:24): [True: 0, False: 0]
  ------------------
  580|      0|                                    != sizeof(ihevcd_cxa_ctl_getbufinfo_op_t))
  581|      0|                    {
  582|      0|                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |= 1
  583|      0|                                        << IVD_UNSUPPORTEDPARAM;
  584|      0|                        ps_op->s_ivd_ctl_getbufinfo_op_t.u4_error_code |=
  585|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  586|      0|                        return IV_FAIL;
  587|      0|                    }
  588|      0|                }
  589|      0|                    break;
  590|       |
  591|      0|                case IVD_CMD_CTL_GETVERSION:
  ------------------
  |  Branch (591:17): [True: 0, False: 2.97k]
  ------------------
  592|      0|                {
  593|      0|                    ihevcd_cxa_ctl_getversioninfo_ip_t *ps_ip;
  594|      0|                    ihevcd_cxa_ctl_getversioninfo_op_t *ps_op;
  595|      0|                    ps_ip = (ihevcd_cxa_ctl_getversioninfo_ip_t *)pv_api_ip;
  596|      0|                    ps_op = (ihevcd_cxa_ctl_getversioninfo_op_t *)pv_api_op;
  597|      0|                    if(ps_ip->s_ivd_ctl_getversioninfo_ip_t.u4_size
  ------------------
  |  Branch (597:24): [True: 0, False: 0]
  ------------------
  598|      0|                                    != sizeof(ihevcd_cxa_ctl_getversioninfo_ip_t))
  599|      0|                    {
  600|      0|                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |= 1
  601|      0|                                        << IVD_UNSUPPORTEDPARAM;
  602|      0|                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
  603|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  604|      0|                        return IV_FAIL;
  605|      0|                    }
  606|      0|                    if(ps_op->s_ivd_ctl_getversioninfo_op_t.u4_size
  ------------------
  |  Branch (606:24): [True: 0, False: 0]
  ------------------
  607|      0|                                    != sizeof(ihevcd_cxa_ctl_getversioninfo_op_t))
  608|      0|                    {
  609|      0|                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |= 1
  610|      0|                                        << IVD_UNSUPPORTEDPARAM;
  611|      0|                        ps_op->s_ivd_ctl_getversioninfo_op_t.u4_error_code |=
  612|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  613|      0|                        return IV_FAIL;
  614|      0|                    }
  615|      0|                }
  616|      0|                    break;
  617|       |
  618|      0|                case IVD_CMD_CTL_FLUSH:
  ------------------
  |  Branch (618:17): [True: 0, False: 2.97k]
  ------------------
  619|      0|                {
  620|      0|                    ihevcd_cxa_ctl_flush_ip_t *ps_ip;
  621|      0|                    ihevcd_cxa_ctl_flush_op_t *ps_op;
  622|      0|                    ps_ip = (ihevcd_cxa_ctl_flush_ip_t *)pv_api_ip;
  623|      0|                    ps_op = (ihevcd_cxa_ctl_flush_op_t *)pv_api_op;
  624|      0|                    if(ps_ip->s_ivd_ctl_flush_ip_t.u4_size
  ------------------
  |  Branch (624:24): [True: 0, False: 0]
  ------------------
  625|      0|                                    != sizeof(ihevcd_cxa_ctl_flush_ip_t))
  626|      0|                    {
  627|      0|                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |= 1
  628|      0|                                        << IVD_UNSUPPORTEDPARAM;
  629|      0|                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |=
  630|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  631|      0|                        return IV_FAIL;
  632|      0|                    }
  633|      0|                    if(ps_op->s_ivd_ctl_flush_op_t.u4_size
  ------------------
  |  Branch (633:24): [True: 0, False: 0]
  ------------------
  634|      0|                                    != sizeof(ihevcd_cxa_ctl_flush_op_t))
  635|      0|                    {
  636|      0|                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |= 1
  637|      0|                                        << IVD_UNSUPPORTEDPARAM;
  638|      0|                        ps_op->s_ivd_ctl_flush_op_t.u4_error_code |=
  639|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  640|      0|                        return IV_FAIL;
  641|      0|                    }
  642|      0|                }
  643|      0|                    break;
  644|       |
  645|    321|                case IVD_CMD_CTL_RESET:
  ------------------
  |  Branch (645:17): [True: 321, False: 2.65k]
  ------------------
  646|    321|                {
  647|    321|                    ihevcd_cxa_ctl_reset_ip_t *ps_ip;
  648|    321|                    ihevcd_cxa_ctl_reset_op_t *ps_op;
  649|    321|                    ps_ip = (ihevcd_cxa_ctl_reset_ip_t *)pv_api_ip;
  650|    321|                    ps_op = (ihevcd_cxa_ctl_reset_op_t *)pv_api_op;
  651|    321|                    if(ps_ip->s_ivd_ctl_reset_ip_t.u4_size
  ------------------
  |  Branch (651:24): [True: 0, False: 321]
  ------------------
  652|    321|                                    != sizeof(ihevcd_cxa_ctl_reset_ip_t))
  653|      0|                    {
  654|      0|                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |= 1
  655|      0|                                        << IVD_UNSUPPORTEDPARAM;
  656|      0|                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |=
  657|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  658|      0|                        return IV_FAIL;
  659|      0|                    }
  660|    321|                    if(ps_op->s_ivd_ctl_reset_op_t.u4_size
  ------------------
  |  Branch (660:24): [True: 0, False: 321]
  ------------------
  661|    321|                                    != sizeof(ihevcd_cxa_ctl_reset_op_t))
  662|      0|                    {
  663|      0|                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |= 1
  664|      0|                                        << IVD_UNSUPPORTEDPARAM;
  665|      0|                        ps_op->s_ivd_ctl_reset_op_t.u4_error_code |=
  666|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  667|      0|                        return IV_FAIL;
  668|      0|                    }
  669|    321|                }
  670|    321|                    break;
  671|    321|                case IHEVCD_CXA_CMD_CTL_DEGRADE:
  ------------------
  |  Branch (671:17): [True: 0, False: 2.97k]
  ------------------
  672|      0|                {
  673|      0|                    ihevcd_cxa_ctl_degrade_ip_t *ps_ip;
  674|      0|                    ihevcd_cxa_ctl_degrade_op_t *ps_op;
  675|       |
  676|      0|                    ps_ip = (ihevcd_cxa_ctl_degrade_ip_t *)pv_api_ip;
  677|      0|                    ps_op = (ihevcd_cxa_ctl_degrade_op_t *)pv_api_op;
  678|       |
  679|      0|                    if(ps_ip->u4_size
  ------------------
  |  Branch (679:24): [True: 0, False: 0]
  ------------------
  680|      0|                                    != sizeof(ihevcd_cxa_ctl_degrade_ip_t))
  681|      0|                    {
  682|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  683|      0|                        ps_op->u4_error_code |=
  684|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  685|      0|                        return IV_FAIL;
  686|      0|                    }
  687|       |
  688|      0|                    if(ps_op->u4_size
  ------------------
  |  Branch (688:24): [True: 0, False: 0]
  ------------------
  689|      0|                                    != sizeof(ihevcd_cxa_ctl_degrade_op_t))
  690|      0|                    {
  691|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  692|      0|                        ps_op->u4_error_code |=
  693|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  694|      0|                        return IV_FAIL;
  695|      0|                    }
  696|       |
  697|      0|                    if((ps_ip->i4_degrade_pics < 0) ||
  ------------------
  |  Branch (697:24): [True: 0, False: 0]
  ------------------
  698|      0|                       (ps_ip->i4_degrade_pics > 4) ||
  ------------------
  |  Branch (698:24): [True: 0, False: 0]
  ------------------
  699|      0|                       (ps_ip->i4_nondegrade_interval < 0) ||
  ------------------
  |  Branch (699:24): [True: 0, False: 0]
  ------------------
  700|      0|                       (ps_ip->i4_degrade_type < 0) ||
  ------------------
  |  Branch (700:24): [True: 0, False: 0]
  ------------------
  701|      0|                       (ps_ip->i4_degrade_type > 15))
  ------------------
  |  Branch (701:24): [True: 0, False: 0]
  ------------------
  702|      0|                    {
  703|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  704|      0|                        return IV_FAIL;
  705|      0|                    }
  706|       |
  707|      0|                    break;
  708|      0|                }
  709|       |
  710|      0|                case IHEVCD_CXA_CMD_CTL_GET_BUFFER_DIMENSIONS:
  ------------------
  |  Branch (710:17): [True: 0, False: 2.97k]
  ------------------
  711|      0|                {
  712|      0|                    ihevcd_cxa_ctl_get_frame_dimensions_ip_t *ps_ip;
  713|      0|                    ihevcd_cxa_ctl_get_frame_dimensions_op_t *ps_op;
  714|       |
  715|      0|                    ps_ip =
  716|      0|                                    (ihevcd_cxa_ctl_get_frame_dimensions_ip_t *)pv_api_ip;
  717|      0|                    ps_op =
  718|      0|                                    (ihevcd_cxa_ctl_get_frame_dimensions_op_t *)pv_api_op;
  719|       |
  720|      0|                    if(ps_ip->u4_size
  ------------------
  |  Branch (720:24): [True: 0, False: 0]
  ------------------
  721|      0|                                    != sizeof(ihevcd_cxa_ctl_get_frame_dimensions_ip_t))
  722|      0|                    {
  723|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  724|      0|                        ps_op->u4_error_code |=
  725|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  726|      0|                        return IV_FAIL;
  727|      0|                    }
  728|       |
  729|      0|                    if(ps_op->u4_size
  ------------------
  |  Branch (729:24): [True: 0, False: 0]
  ------------------
  730|      0|                                    != sizeof(ihevcd_cxa_ctl_get_frame_dimensions_op_t))
  731|      0|                    {
  732|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  733|      0|                        ps_op->u4_error_code |=
  734|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  735|      0|                        return IV_FAIL;
  736|      0|                    }
  737|       |
  738|      0|                    break;
  739|      0|                }
  740|       |
  741|      0|                case IHEVCD_CXA_CMD_CTL_GET_VUI_PARAMS:
  ------------------
  |  Branch (741:17): [True: 0, False: 2.97k]
  ------------------
  742|      0|                {
  743|      0|                    ihevcd_cxa_ctl_get_vui_params_ip_t *ps_ip;
  744|      0|                    ihevcd_cxa_ctl_get_vui_params_op_t *ps_op;
  745|       |
  746|      0|                    ps_ip =
  747|      0|                                    (ihevcd_cxa_ctl_get_vui_params_ip_t *)pv_api_ip;
  748|      0|                    ps_op =
  749|      0|                                    (ihevcd_cxa_ctl_get_vui_params_op_t *)pv_api_op;
  750|       |
  751|      0|                    if(ps_ip->u4_size
  ------------------
  |  Branch (751:24): [True: 0, False: 0]
  ------------------
  752|      0|                                    != sizeof(ihevcd_cxa_ctl_get_vui_params_ip_t))
  753|      0|                    {
  754|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  755|      0|                        ps_op->u4_error_code |=
  756|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  757|      0|                        return IV_FAIL;
  758|      0|                    }
  759|       |
  760|      0|                    if(ps_op->u4_size
  ------------------
  |  Branch (760:24): [True: 0, False: 0]
  ------------------
  761|      0|                                    != sizeof(ihevcd_cxa_ctl_get_vui_params_op_t))
  762|      0|                    {
  763|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  764|      0|                        ps_op->u4_error_code |=
  765|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  766|      0|                        return IV_FAIL;
  767|      0|                    }
  768|       |
  769|      0|                    break;
  770|      0|                }
  771|      0|                case IHEVCD_CXA_CMD_CTL_GET_SEI_MASTERING_PARAMS:
  ------------------
  |  Branch (771:17): [True: 0, False: 2.97k]
  ------------------
  772|      0|                {
  773|      0|                    ihevcd_cxa_ctl_get_sei_mastering_params_ip_t *ps_ip;
  774|      0|                    ihevcd_cxa_ctl_get_sei_mastering_params_op_t *ps_op;
  775|       |
  776|      0|                    ps_ip = (ihevcd_cxa_ctl_get_sei_mastering_params_ip_t *)pv_api_ip;
  777|      0|                    ps_op = (ihevcd_cxa_ctl_get_sei_mastering_params_op_t *)pv_api_op;
  778|       |
  779|      0|                    if(ps_ip->u4_size
  ------------------
  |  Branch (779:24): [True: 0, False: 0]
  ------------------
  780|      0|                                    != sizeof(ihevcd_cxa_ctl_get_sei_mastering_params_ip_t))
  781|      0|                    {
  782|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  783|      0|                        ps_op->u4_error_code |=
  784|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  785|      0|                        return IV_FAIL;
  786|      0|                    }
  787|       |
  788|      0|                    if(ps_op->u4_size
  ------------------
  |  Branch (788:24): [True: 0, False: 0]
  ------------------
  789|      0|                                    != sizeof(ihevcd_cxa_ctl_get_sei_mastering_params_op_t))
  790|      0|                    {
  791|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  792|      0|                        ps_op->u4_error_code |=
  793|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  794|      0|                        return IV_FAIL;
  795|      0|                    }
  796|       |
  797|      0|                    break;
  798|      0|                }
  799|    664|                case IHEVCD_CXA_CMD_CTL_SET_NUM_CORES:
  ------------------
  |  Branch (799:17): [True: 664, False: 2.31k]
  ------------------
  800|    664|                {
  801|    664|                    ihevcd_cxa_ctl_set_num_cores_ip_t *ps_ip;
  802|    664|                    ihevcd_cxa_ctl_set_num_cores_op_t *ps_op;
  803|       |
  804|    664|                    ps_ip = (ihevcd_cxa_ctl_set_num_cores_ip_t *)pv_api_ip;
  805|    664|                    ps_op = (ihevcd_cxa_ctl_set_num_cores_op_t *)pv_api_op;
  806|       |
  807|    664|                    if(ps_ip->u4_size
  ------------------
  |  Branch (807:24): [True: 0, False: 664]
  ------------------
  808|    664|                                    != sizeof(ihevcd_cxa_ctl_set_num_cores_ip_t))
  809|      0|                    {
  810|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  811|      0|                        ps_op->u4_error_code |=
  812|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  813|      0|                        return IV_FAIL;
  814|      0|                    }
  815|       |
  816|    664|                    if(ps_op->u4_size
  ------------------
  |  Branch (816:24): [True: 0, False: 664]
  ------------------
  817|    664|                                    != sizeof(ihevcd_cxa_ctl_set_num_cores_op_t))
  818|      0|                    {
  819|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  820|      0|                        ps_op->u4_error_code |=
  821|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  822|      0|                        return IV_FAIL;
  823|      0|                    }
  824|       |
  825|    664|                    if((ps_ip->u4_num_cores < 1) || (ps_ip->u4_num_cores > MAX_NUM_CORES))
  ------------------
  |  |  116|    664|#define MAX_NUM_CORES       8
  ------------------
  |  Branch (825:24): [True: 0, False: 664]
  |  Branch (825:53): [True: 0, False: 664]
  ------------------
  826|      0|                    {
  827|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  828|      0|                        return IV_FAIL;
  829|      0|                    }
  830|    664|                    break;
  831|    664|                }
  832|    664|                case IHEVCD_CXA_CMD_CTL_SET_PROCESSOR:
  ------------------
  |  Branch (832:17): [True: 664, False: 2.31k]
  ------------------
  833|    664|                {
  834|    664|                    ihevcd_cxa_ctl_set_processor_ip_t *ps_ip;
  835|    664|                    ihevcd_cxa_ctl_set_processor_op_t *ps_op;
  836|       |
  837|    664|                    ps_ip = (ihevcd_cxa_ctl_set_processor_ip_t *)pv_api_ip;
  838|    664|                    ps_op = (ihevcd_cxa_ctl_set_processor_op_t *)pv_api_op;
  839|       |
  840|    664|                    if(ps_ip->u4_size
  ------------------
  |  Branch (840:24): [True: 0, False: 664]
  ------------------
  841|    664|                                    != sizeof(ihevcd_cxa_ctl_set_processor_ip_t))
  842|      0|                    {
  843|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  844|      0|                        ps_op->u4_error_code |=
  845|      0|                                        IVD_IP_API_STRUCT_SIZE_INCORRECT;
  846|      0|                        return IV_FAIL;
  847|      0|                    }
  848|       |
  849|    664|                    if(ps_op->u4_size
  ------------------
  |  Branch (849:24): [True: 0, False: 664]
  ------------------
  850|    664|                                    != sizeof(ihevcd_cxa_ctl_set_processor_op_t))
  851|      0|                    {
  852|      0|                        ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  853|      0|                        ps_op->u4_error_code |=
  854|      0|                                        IVD_OP_API_STRUCT_SIZE_INCORRECT;
  855|      0|                        return IV_FAIL;
  856|      0|                    }
  857|       |
  858|    664|                    break;
  859|    664|                }
  860|    664|                default:
  ------------------
  |  Branch (860:17): [True: 0, False: 2.97k]
  ------------------
  861|      0|                    *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
  862|      0|                    *(pu4_api_op + 1) |= IVD_UNSUPPORTED_API_CMD;
  863|      0|                    return IV_FAIL;
  864|  2.97k|            }
  865|  2.97k|        }
  866|  2.97k|            break;
  867|  2.97k|        default:
  ------------------
  |  Branch (867:9): [True: 0, False: 1.13M]
  ------------------
  868|      0|            *(pu4_api_op + 1) |= 1 << IVD_UNSUPPORTEDPARAM;
  869|      0|            *(pu4_api_op + 1) |= IVD_UNSUPPORTED_API_CMD;
  870|      0|            return IV_FAIL;
  871|  1.13M|    }
  872|       |
  873|  1.13M|    return IV_SUCCESS;
  874|  1.13M|}

ihevcd_bits_init:
  108|  1.15M|{
  109|  1.15M|    UWORD32 u4_cur_word;
  110|  1.15M|    UWORD32 u4_nxt_word;
  111|  1.15M|    UWORD32 u4_temp;
  112|  1.15M|    UWORD32 *pu4_buf;
  113|       |
  114|  1.15M|    pu4_buf     = (UWORD32 *)pu1_buf;
  115|  1.15M|    u4_temp = *pu4_buf++;
  116|  1.15M|    u4_cur_word = ITT_BIG_ENDIAN(u4_temp);
  ------------------
  |  |   63|  1.15M|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |   64|  1.15M|                            ((x & 0x0000ff00) << 8)    |   \
  |  |   65|  1.15M|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |   66|  1.15M|                            ((UWORD32)x >> 24);
  ------------------
  117|  1.15M|    u4_temp = *pu4_buf++;
  118|  1.15M|    u4_nxt_word = ITT_BIG_ENDIAN(u4_temp);
  ------------------
  |  |   63|  1.15M|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |   64|  1.15M|                            ((x & 0x0000ff00) << 8)    |   \
  |  |   65|  1.15M|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |   66|  1.15M|                            ((UWORD32)x >> 24);
  ------------------
  119|       |
  120|  1.15M|    ps_bitstrm->u4_bit_ofst     = 0;
  121|  1.15M|    ps_bitstrm->pu1_buf_base    = pu1_buf;
  122|  1.15M|    ps_bitstrm->pu4_buf         = pu4_buf;
  123|  1.15M|    ps_bitstrm->u4_cur_word     = u4_cur_word;
  124|  1.15M|    ps_bitstrm->u4_nxt_word     = u4_nxt_word;
  125|       |
  126|  1.15M|    ps_bitstrm->pu1_buf_max     = pu1_buf + u4_numbytes + 8;
  127|       |
  128|  1.15M|    return;
  129|  1.15M|}
ihevcd_bits_flush:
  156|   425k|{
  157|       |
  158|   425k|    BITS_FLUSH(ps_bitstrm->pu4_buf,
  ------------------
  |  |  127|   425k|                    m_u4_nxt_word, m_cnt)                   \
  |  |  128|   425k|{                                                           \
  |  |  129|   425k|    UWORD32 temp;                                           \
  |  |  130|   425k|                                                            \
  |  |  131|   425k|    m_u4_bit_ofst += m_cnt;                                 \
  |  |  132|   425k|    if( m_u4_bit_ofst >=   WORD_SIZE )                      \
  |  |  ------------------
  |  |  |  |   42|   850k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (132:9): [True: 106k, False: 319k]
  |  |  ------------------
  |  |  133|   425k|    {                                                       \
  |  |  134|   106k|        m_u4_cur_word  = m_u4_nxt_word;                     \
  |  |  135|   106k|        /* Getting the next word */                         \
  |  |  136|   106k|        temp = *(m_pu4_buf++);                              \
  |  |  137|   106k|                                                            \
  |  |  138|   106k|        m_u4_bit_ofst -= WORD_SIZE;                         \
  |  |  ------------------
  |  |  |  |   42|   106k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  139|   106k|        /* Swapping little endian to big endian conversion*/\
  |  |  140|   106k|        m_u4_nxt_word = ITT_BIG_ENDIAN(temp);                   \
  |  |  ------------------
  |  |  |  |   63|   106k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|   106k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|   106k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|   106k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  141|   106k|    }                                                       \
  |  |  142|   425k|}
  ------------------
  159|   425k|               ps_bitstrm->u4_bit_ofst,
  160|   425k|               ps_bitstrm->u4_cur_word,
  161|   425k|               ps_bitstrm->u4_nxt_word,
  162|   425k|               u4_numbits);
  163|       |
  164|   425k|    return;
  165|   425k|}
ihevcd_bits_flush_to_byte_boundary:
  188|  8.21k|{
  189|  8.21k|    UWORD32 u4_numbits;
  190|  8.21k|    u4_numbits = (ps_bitstrm->u4_bit_ofst) & 7;
  191|       |
  192|  8.21k|    u4_numbits = 8 - u4_numbits;
  193|       |
  194|  8.21k|    BITS_FLUSH(ps_bitstrm->pu4_buf,
  ------------------
  |  |  127|  8.21k|                    m_u4_nxt_word, m_cnt)                   \
  |  |  128|  8.21k|{                                                           \
  |  |  129|  8.21k|    UWORD32 temp;                                           \
  |  |  130|  8.21k|                                                            \
  |  |  131|  8.21k|    m_u4_bit_ofst += m_cnt;                                 \
  |  |  132|  8.21k|    if( m_u4_bit_ofst >=   WORD_SIZE )                      \
  |  |  ------------------
  |  |  |  |   42|  16.4k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (132:9): [True: 2.24k, False: 5.97k]
  |  |  ------------------
  |  |  133|  8.21k|    {                                                       \
  |  |  134|  2.24k|        m_u4_cur_word  = m_u4_nxt_word;                     \
  |  |  135|  2.24k|        /* Getting the next word */                         \
  |  |  136|  2.24k|        temp = *(m_pu4_buf++);                              \
  |  |  137|  2.24k|                                                            \
  |  |  138|  2.24k|        m_u4_bit_ofst -= WORD_SIZE;                         \
  |  |  ------------------
  |  |  |  |   42|  2.24k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  139|  2.24k|        /* Swapping little endian to big endian conversion*/\
  |  |  140|  2.24k|        m_u4_nxt_word = ITT_BIG_ENDIAN(temp);                   \
  |  |  ------------------
  |  |  |  |   63|  2.24k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  2.24k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  2.24k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  2.24k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  141|  2.24k|    }                                                       \
  |  |  142|  8.21k|}
  ------------------
  195|  8.21k|               ps_bitstrm->u4_bit_ofst,
  196|  8.21k|               ps_bitstrm->u4_cur_word,
  197|  8.21k|               ps_bitstrm->u4_nxt_word,
  198|  8.21k|               u4_numbits);
  199|       |
  200|  8.21k|    return;
  201|  8.21k|}
ihevcd_bits_seek:
  228|    596|{
  229|    596|    WORD32 val;
  230|    596|    ASSERT(numbits >= -32);
  ------------------
  |  |   55|    596|#define ASSERT(x) assert((x))
  ------------------
  231|    596|    ASSERT(numbits <= 32);
  ------------------
  |  |   55|    596|#define ASSERT(x) assert((x))
  ------------------
  232|       |    /* Check if Seeking backwards*/
  233|    596|    if(numbits < 0)
  ------------------
  |  Branch (233:8): [True: 565, False: 31]
  ------------------
  234|    565|    {
  235|    565|        UWORD32 abs_numbits = -numbits;
  236|    565|        if(ps_bitstrm->u4_bit_ofst >= abs_numbits)
  ------------------
  |  Branch (236:12): [True: 379, False: 186]
  ------------------
  237|    379|        {
  238|       |            /* If the current offset is greater than number of bits to seek back,
  239|       |             * then subtract abs_numbits from offset and return.
  240|       |             */
  241|    379|            ps_bitstrm->u4_bit_ofst -= abs_numbits;
  242|    379|            return;
  243|    379|        }
  244|    186|        else
  245|    186|        {
  246|       |            /* If the current offset is lesser than number of bits to seek back,
  247|       |             * then subtract abs_numbits from offset and add 32 and move cur_word to nxt_word
  248|       |             * and load cur_word appropriately and decrement pu4_buf
  249|       |             */
  250|    186|            ps_bitstrm->u4_bit_ofst += 32;
  251|    186|            ps_bitstrm->u4_bit_ofst -= abs_numbits;
  252|    186|            ps_bitstrm->pu4_buf--;
  253|       |
  254|    186|            val = *(ps_bitstrm->pu4_buf - 2);
  255|    186|            ps_bitstrm->u4_nxt_word = ps_bitstrm->u4_cur_word;
  256|    186|            ps_bitstrm->u4_cur_word = ITT_BIG_ENDIAN(val);
  ------------------
  |  |   63|    186|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |   64|    186|                            ((x & 0x0000ff00) << 8)    |   \
  |  |   65|    186|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |   66|    186|                            ((UWORD32)x >> 24);
  ------------------
  257|    186|            return;
  258|    186|        }
  259|    565|    }
  260|     31|    else
  261|     31|    {
  262|       |        /* Not supported/tested currently */
  263|     31|        ASSERT(1);
  ------------------
  |  |   55|     31|#define ASSERT(x) assert((x))
  ------------------
  264|     31|        BITS_FLUSH(ps_bitstrm->pu4_buf,
  ------------------
  |  |  127|     31|                    m_u4_nxt_word, m_cnt)                   \
  |  |  128|     31|{                                                           \
  |  |  129|     31|    UWORD32 temp;                                           \
  |  |  130|     31|                                                            \
  |  |  131|     31|    m_u4_bit_ofst += m_cnt;                                 \
  |  |  132|     31|    if( m_u4_bit_ofst >=   WORD_SIZE )                      \
  |  |  ------------------
  |  |  |  |   42|     62|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (132:9): [True: 0, False: 31]
  |  |  ------------------
  |  |  133|     31|    {                                                       \
  |  |  134|      0|        m_u4_cur_word  = m_u4_nxt_word;                     \
  |  |  135|      0|        /* Getting the next word */                         \
  |  |  136|      0|        temp = *(m_pu4_buf++);                              \
  |  |  137|      0|                                                            \
  |  |  138|      0|        m_u4_bit_ofst -= WORD_SIZE;                         \
  |  |  ------------------
  |  |  |  |   42|      0|#define WORD_SIZE         32
  |  |  ------------------
  |  |  139|      0|        /* Swapping little endian to big endian conversion*/\
  |  |  140|      0|        m_u4_nxt_word = ITT_BIG_ENDIAN(temp);                   \
  |  |  ------------------
  |  |  |  |   63|      0|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|      0|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|      0|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|      0|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  141|      0|    }                                                       \
  |  |  142|     31|}
  ------------------
  265|     31|                   ps_bitstrm->u4_bit_ofst,
  266|     31|                   ps_bitstrm->u4_cur_word,
  267|     31|                   ps_bitstrm->u4_nxt_word,
  268|     31|                   numbits);
  269|       |
  270|       |
  271|     31|    }
  272|     31|    return;
  273|    596|}
ihevcd_bits_nxt:
  299|  1.87M|{
  300|  1.87M|    UWORD32 u4_bits_read;
  301|       |
  302|  1.87M|    BITS_NXT(u4_bits_read,
  ------------------
  |  |   91|  1.87M|                 m_u4_cur_word, m_u4_nxt_word, m_cnt)       \
  |  |   92|  1.87M|{                                                           \
  |  |   93|  1.87M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)  >>        \
  |  |   94|  1.87M|                              (WORD_SIZE - m_cnt);          \
  |  |  ------------------
  |  |  |  |   42|  1.87M|#define WORD_SIZE         32
  |  |  ------------------
  |  |   95|  1.87M|                                                            \
  |  |   96|  1.87M|    if(m_u4_bit_ofst > (WORD_SIZE - m_cnt))                 \
  |  |  ------------------
  |  |  |  |   42|  1.87M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (96:8): [True: 175, False: 1.87M]
  |  |  ------------------
  |  |   97|  1.87M|    {                                                       \
  |  |   98|    175|        m_u4_bits |= SHR(m_u4_nxt_word,                     \
  |  |  ------------------
  |  |  |  |   57|    175|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 175, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   99|    175|                   (WORD_SIZE + WORD_SIZE - m_cnt           \
  |  |  100|    175|                          - m_u4_bit_ofst));                \
  |  |  101|    175|    }                                                       \
  |  |  102|  1.87M|}
  ------------------
  303|  1.87M|             ps_bitstrm->pu4_buf,
  304|  1.87M|             ps_bitstrm->u4_bit_ofst,
  305|  1.87M|             ps_bitstrm->u4_cur_word,
  306|  1.87M|             ps_bitstrm->u4_nxt_word,
  307|  1.87M|             u4_numbits);
  308|  1.87M|    return u4_bits_read;
  309|  1.87M|}
ihevcd_bits_get:
  371|  9.45M|{
  372|  9.45M|    UWORD32 u4_bits_read;
  373|       |
  374|  9.45M|    BITS_GET(u4_bits_read,
  ------------------
  |  |  150|  9.45M|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|  9.45M|{                                                               \
  |  |  152|  9.45M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|  9.45M|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|  9.45M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|  9.45M|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|  9.45M|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|  18.9M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 32.7k, False: 9.41M]
  |  |  ------------------
  |  |  156|  9.45M|    {                                                           \
  |  |  157|  32.7k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|  32.7k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 32.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|  32.7k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|  32.7k|    }                                                           \
  |  |  160|  9.45M|                                                                \
  |  |  161|  9.45M|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|  18.9M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 519k, False: 8.93M]
  |  |  ------------------
  |  |  162|  9.45M|    {                                                           \
  |  |  163|   519k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|   519k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|   519k|        /* Getting the next word */                             \
  |  |  166|   519k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|   519k|                                                                \
  |  |  168|   519k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|   519k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|   519k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|   519k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|   519k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|   519k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|   519k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|   519k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|   519k|    }                                                           \
  |  |  172|  9.45M|}
  ------------------
  375|  9.45M|             ps_bitstrm->pu4_buf,
  376|  9.45M|             ps_bitstrm->u4_bit_ofst,
  377|  9.45M|             ps_bitstrm->u4_cur_word,
  378|  9.45M|             ps_bitstrm->u4_nxt_word,
  379|  9.45M|             u4_numbits);
  380|  9.45M|    return u4_bits_read;
  381|       |
  382|  9.45M|}
ihevcd_bits_num_bits_remaining:
  406|  1.48M|{
  407|  1.48M|    UWORD32 u4_bits_consumed;
  408|  1.48M|    UWORD32 u4_size_in_bits;
  409|       |
  410|       |    /* 8 bytes are read in cur_word and nxt_word at the start. Hence */
  411|       |    /* subtract 8 bytes */
  412|  1.48M|    u4_bits_consumed = (UWORD32)(((UWORD8 *)ps_bitstrm->pu4_buf -
  413|  1.48M|                                  (UWORD8 *)ps_bitstrm->pu1_buf_base - 8) <<
  414|  1.48M|                                 3) + ps_bitstrm->u4_bit_ofst;
  415|       |
  416|  1.48M|    u4_size_in_bits = (UWORD32)(ps_bitstrm->pu1_buf_max -
  417|  1.48M|                    ps_bitstrm->pu1_buf_base) - 8;
  418|  1.48M|    u4_size_in_bits <<= 3;
  419|  1.48M|    if(u4_size_in_bits > u4_bits_consumed)
  ------------------
  |  Branch (419:8): [True: 1.48M, False: 2.22k]
  ------------------
  420|  1.48M|    {
  421|  1.48M|        return (u4_size_in_bits - u4_bits_consumed);
  422|  1.48M|    }
  423|  2.22k|    else
  424|  2.22k|    {
  425|  2.22k|        return 0;
  426|  2.22k|    }
  427|  1.48M|}
ihevcd_uev:
  484|   237k|{
  485|   237k|    UWORD32 u4_bits_read;
  486|   237k|    UWORD32 u4_clz;
  487|       |
  488|       |
  489|       |    /***************************************************************/
  490|       |    /* Find leading zeros in next 32 bits                          */
  491|       |    /***************************************************************/
  492|   237k|    BITS_NXT32(u4_bits_read,
  ------------------
  |  |  112|   237k|                 m_u4_cur_word, m_u4_nxt_word)                      \
  |  |  113|   237k|{                                                                   \
  |  |  114|   237k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst);                   \
  |  |  115|   237k|                                                                    \
  |  |  116|   237k|    m_u4_bits |= SHR(m_u4_nxt_word, (WORD_SIZE - m_u4_bit_ofst));   \
  |  |  ------------------
  |  |  |  |   57|   237k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 232k, False: 4.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|   237k|}
  ------------------
  493|   237k|               ps_bitstrm->pu4_buf,
  494|   237k|               ps_bitstrm->u4_bit_ofst,
  495|   237k|               ps_bitstrm->u4_cur_word,
  496|   237k|               ps_bitstrm->u4_nxt_word);
  497|       |
  498|       |
  499|   237k|    u4_clz = CLZ(u4_bits_read);
  500|       |
  501|   237k|    BITS_FLUSH(ps_bitstrm->pu4_buf,
  ------------------
  |  |  127|   237k|                    m_u4_nxt_word, m_cnt)                   \
  |  |  128|   237k|{                                                           \
  |  |  129|   237k|    UWORD32 temp;                                           \
  |  |  130|   237k|                                                            \
  |  |  131|   237k|    m_u4_bit_ofst += m_cnt;                                 \
  |  |  132|   237k|    if( m_u4_bit_ofst >=   WORD_SIZE )                      \
  |  |  ------------------
  |  |  |  |   42|   475k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (132:9): [True: 46.0k, False: 191k]
  |  |  ------------------
  |  |  133|   237k|    {                                                       \
  |  |  134|  46.0k|        m_u4_cur_word  = m_u4_nxt_word;                     \
  |  |  135|  46.0k|        /* Getting the next word */                         \
  |  |  136|  46.0k|        temp = *(m_pu4_buf++);                              \
  |  |  137|  46.0k|                                                            \
  |  |  138|  46.0k|        m_u4_bit_ofst -= WORD_SIZE;                         \
  |  |  ------------------
  |  |  |  |   42|  46.0k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  139|  46.0k|        /* Swapping little endian to big endian conversion*/\
  |  |  140|  46.0k|        m_u4_nxt_word = ITT_BIG_ENDIAN(temp);                   \
  |  |  ------------------
  |  |  |  |   63|  46.0k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  46.0k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  46.0k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  46.0k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  141|  46.0k|    }                                                       \
  |  |  142|   237k|}
  ------------------
  502|   237k|               ps_bitstrm->u4_bit_ofst,
  503|   237k|               ps_bitstrm->u4_cur_word,
  504|   237k|               ps_bitstrm->u4_nxt_word,
  505|   237k|               (u4_clz + 1));
  506|       |
  507|   237k|    u4_bits_read = 0;
  508|   237k|    if(u4_clz)
  ------------------
  |  Branch (508:8): [True: 125k, False: 112k]
  ------------------
  509|   125k|    {
  510|   125k|        BITS_GET(u4_bits_read,
  ------------------
  |  |  150|   125k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|   125k|{                                                               \
  |  |  152|   125k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|   125k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|   125k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|   125k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|   125k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|   250k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 21.7k, False: 103k]
  |  |  ------------------
  |  |  156|   125k|    {                                                           \
  |  |  157|  21.7k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|  21.7k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 21.7k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|  21.7k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|  21.7k|    }                                                           \
  |  |  160|   125k|                                                                \
  |  |  161|   125k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|   250k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 27.4k, False: 97.7k]
  |  |  ------------------
  |  |  162|   125k|    {                                                           \
  |  |  163|  27.4k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|  27.4k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|  27.4k|        /* Getting the next word */                             \
  |  |  166|  27.4k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|  27.4k|                                                                \
  |  |  168|  27.4k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|  27.4k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|  27.4k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|  27.4k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|  27.4k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  27.4k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  27.4k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  27.4k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|  27.4k|    }                                                           \
  |  |  172|   125k|}
  ------------------
  511|   125k|                 ps_bitstrm->pu4_buf,
  512|   125k|                 ps_bitstrm->u4_bit_ofst,
  513|   125k|                 ps_bitstrm->u4_cur_word,
  514|   125k|                 ps_bitstrm->u4_nxt_word,
  515|   125k|                 u4_clz);
  516|   125k|    }
  517|   237k|    return ((1 << u4_clz) + u4_bits_read - 1);
  518|       |
  519|   237k|}
ihevcd_sev:
  543|   121k|{
  544|   121k|    UWORD32 u4_bits_read;
  545|   121k|    UWORD32 u4_clz;
  546|   121k|    UWORD32 u4_abs_val;
  547|       |
  548|       |
  549|       |    /***************************************************************/
  550|       |    /* Find leading zeros in next 32 bits                          */
  551|       |    /***************************************************************/
  552|   121k|    BITS_NXT32(u4_bits_read,
  ------------------
  |  |  112|   121k|                 m_u4_cur_word, m_u4_nxt_word)                      \
  |  |  113|   121k|{                                                                   \
  |  |  114|   121k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst);                   \
  |  |  115|   121k|                                                                    \
  |  |  116|   121k|    m_u4_bits |= SHR(m_u4_nxt_word, (WORD_SIZE - m_u4_bit_ofst));   \
  |  |  ------------------
  |  |  |  |   57|   121k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 118k, False: 3.41k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|   121k|}
  ------------------
  553|   121k|               ps_bitstrm->pu4_buf,
  554|   121k|               ps_bitstrm->u4_bit_ofst,
  555|   121k|               ps_bitstrm->u4_cur_word,
  556|   121k|               ps_bitstrm->u4_nxt_word);
  557|       |
  558|       |
  559|   121k|    u4_clz = CLZ(u4_bits_read);
  560|       |
  561|   121k|    BITS_FLUSH(ps_bitstrm->pu4_buf,
  ------------------
  |  |  127|   121k|                    m_u4_nxt_word, m_cnt)                   \
  |  |  128|   121k|{                                                           \
  |  |  129|   121k|    UWORD32 temp;                                           \
  |  |  130|   121k|                                                            \
  |  |  131|   121k|    m_u4_bit_ofst += m_cnt;                                 \
  |  |  132|   121k|    if( m_u4_bit_ofst >=   WORD_SIZE )                      \
  |  |  ------------------
  |  |  |  |   42|   243k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (132:9): [True: 7.94k, False: 113k]
  |  |  ------------------
  |  |  133|   121k|    {                                                       \
  |  |  134|  7.94k|        m_u4_cur_word  = m_u4_nxt_word;                     \
  |  |  135|  7.94k|        /* Getting the next word */                         \
  |  |  136|  7.94k|        temp = *(m_pu4_buf++);                              \
  |  |  137|  7.94k|                                                            \
  |  |  138|  7.94k|        m_u4_bit_ofst -= WORD_SIZE;                         \
  |  |  ------------------
  |  |  |  |   42|  7.94k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  139|  7.94k|        /* Swapping little endian to big endian conversion*/\
  |  |  140|  7.94k|        m_u4_nxt_word = ITT_BIG_ENDIAN(temp);                   \
  |  |  ------------------
  |  |  |  |   63|  7.94k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  7.94k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  7.94k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  7.94k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  141|  7.94k|    }                                                       \
  |  |  142|   121k|}
  ------------------
  562|   121k|               ps_bitstrm->u4_bit_ofst,
  563|   121k|               ps_bitstrm->u4_cur_word,
  564|   121k|               ps_bitstrm->u4_nxt_word,
  565|   121k|               (u4_clz + 1));
  566|       |
  567|   121k|    u4_bits_read = 0;
  568|   121k|    if(u4_clz)
  ------------------
  |  Branch (568:8): [True: 16.0k, False: 105k]
  ------------------
  569|  16.0k|    {
  570|  16.0k|        BITS_GET(u4_bits_read,
  ------------------
  |  |  150|  16.0k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|  16.0k|{                                                               \
  |  |  152|  16.0k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|  16.0k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|  16.0k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|  16.0k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|  16.0k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|  32.1k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 1.21k, False: 14.8k]
  |  |  ------------------
  |  |  156|  16.0k|    {                                                           \
  |  |  157|  1.21k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|  1.21k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 1.21k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|  1.21k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|  1.21k|    }                                                           \
  |  |  160|  16.0k|                                                                \
  |  |  161|  16.0k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|  32.1k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 1.37k, False: 14.7k]
  |  |  ------------------
  |  |  162|  16.0k|    {                                                           \
  |  |  163|  1.37k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|  1.37k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|  1.37k|        /* Getting the next word */                             \
  |  |  166|  1.37k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|  1.37k|                                                                \
  |  |  168|  1.37k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|  1.37k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|  1.37k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|  1.37k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|  1.37k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  1.37k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  1.37k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  1.37k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|  1.37k|    }                                                           \
  |  |  172|  16.0k|}
  ------------------
  571|  16.0k|                 ps_bitstrm->pu4_buf,
  572|  16.0k|                 ps_bitstrm->u4_bit_ofst,
  573|  16.0k|                 ps_bitstrm->u4_cur_word,
  574|  16.0k|                 ps_bitstrm->u4_nxt_word,
  575|  16.0k|                 u4_clz);
  576|  16.0k|    }
  577|   121k|    u4_abs_val = ((1 << u4_clz) + u4_bits_read) >> 1;
  578|   121k|    if(u4_bits_read & 0x1)
  ------------------
  |  Branch (578:8): [True: 6.64k, False: 114k]
  ------------------
  579|  6.64k|        return (-(WORD32)u4_abs_val);
  580|   114k|    else
  581|   114k|        return (u4_abs_val);
  582|   121k|}

ihevcd_pu_boundary_strength:
   87|  4.56M|{
   88|  4.56M|    WORD32 i4_bs;
   89|  4.56M|    UWORD32 l0_ref_pic_buf_id, l1_ref_pic_buf_id;
   90|  4.56M|    UWORD32 ngbr_l0_ref_pic_buf_id, ngbr_l1_ref_pic_buf_id;
   91|       |
   92|  4.56M|    WORD16 i2_mv_x0, i2_mv_y0, i2_mv_x1, i2_mv_y1;
   93|  4.56M|    WORD16 i2_ngbr_mv_x0, i2_ngbr_mv_y0, i2_ngbr_mv_x1, i2_ngbr_mv_y1;
   94|       |
   95|  4.56M|    WORD32 num_mv, ngbr_num_mv;
   96|       |
   97|  4.56M|    num_mv = (PRED_BI == ps_pu->b2_pred_mode) ? 2 : 1;
  ------------------
  |  Branch (97:14): [True: 2.87M, False: 1.69M]
  ------------------
   98|  4.56M|    ngbr_num_mv = (PRED_BI == ps_ngbr_pu->b2_pred_mode) ? 2 : 1;
  ------------------
  |  Branch (98:19): [True: 2.88M, False: 1.68M]
  ------------------
   99|       |
  100|  4.56M|    l0_ref_pic_buf_id = ps_pu->mv.i1_l0_ref_pic_buf_id;
  101|  4.56M|    l1_ref_pic_buf_id = ps_pu->mv.i1_l1_ref_pic_buf_id;
  102|  4.56M|    ngbr_l0_ref_pic_buf_id = ps_ngbr_pu->mv.i1_l0_ref_pic_buf_id;
  103|  4.56M|    ngbr_l1_ref_pic_buf_id = ps_ngbr_pu->mv.i1_l1_ref_pic_buf_id;
  104|       |
  105|       |
  106|  4.56M|    i2_mv_x0 = ps_pu->mv.s_l0_mv.i2_mvx;
  107|  4.56M|    i2_mv_y0 = ps_pu->mv.s_l0_mv.i2_mvy;
  108|  4.56M|    i2_mv_x1 = ps_pu->mv.s_l1_mv.i2_mvx;
  109|  4.56M|    i2_mv_y1 = ps_pu->mv.s_l1_mv.i2_mvy;
  110|       |
  111|  4.56M|    i2_ngbr_mv_x0 = ps_ngbr_pu->mv.s_l0_mv.i2_mvx;
  112|  4.56M|    i2_ngbr_mv_y0 = ps_ngbr_pu->mv.s_l0_mv.i2_mvy;
  113|  4.56M|    i2_ngbr_mv_x1 = ps_ngbr_pu->mv.s_l1_mv.i2_mvx;
  114|  4.56M|    i2_ngbr_mv_y1 = ps_ngbr_pu->mv.s_l1_mv.i2_mvy;
  115|       |
  116|       |
  117|       |    /* If two motion vectors are used */
  118|  4.56M|    if((2 == num_mv) &&
  ------------------
  |  Branch (118:8): [True: 2.88M, False: 1.68M]
  ------------------
  119|  4.56M|            (2 == ngbr_num_mv))
  ------------------
  |  Branch (119:13): [True: 2.72M, False: 157k]
  ------------------
  120|  2.72M|    {
  121|  2.72M|        if((l0_ref_pic_buf_id == ngbr_l0_ref_pic_buf_id && l1_ref_pic_buf_id == ngbr_l1_ref_pic_buf_id) ||
  ------------------
  |  Branch (121:13): [True: 2.71M, False: 4.16k]
  |  Branch (121:60): [True: 2.71M, False: 5.50k]
  ------------------
  122|  2.72M|                (l0_ref_pic_buf_id == ngbr_l1_ref_pic_buf_id && l1_ref_pic_buf_id == ngbr_l0_ref_pic_buf_id))
  ------------------
  |  Branch (122:18): [True: 4.22k, False: 5.52k]
  |  Branch (122:65): [True: 9, False: 4.21k]
  ------------------
  123|  2.71M|        {
  124|  2.71M|            if(l0_ref_pic_buf_id != l1_ref_pic_buf_id) /* Different L0 and L1 */
  ------------------
  |  Branch (124:16): [True: 255k, False: 2.45M]
  ------------------
  125|   255k|            {
  126|   255k|                if(l0_ref_pic_buf_id == ngbr_l0_ref_pic_buf_id)
  ------------------
  |  Branch (126:20): [True: 255k, False: 4]
  ------------------
  127|   255k|                {
  128|   255k|                    i4_bs = (ABS(i2_mv_x0 - i2_ngbr_mv_x0) < 4) &&
  ------------------
  |  |   45|   255k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 13.2k, False: 242k]
  |  |  ------------------
  ------------------
  |  Branch (128:29): [True: 248k, False: 6.98k]
  ------------------
  129|   255k|                            (ABS(i2_mv_y0 - i2_ngbr_mv_y0) < 4) &&
  ------------------
  |  |   45|   248k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 10.8k, False: 237k]
  |  |  ------------------
  ------------------
  |  Branch (129:29): [True: 243k, False: 5.06k]
  ------------------
  130|   255k|                            (ABS(i2_mv_x1 - i2_ngbr_mv_x1) < 4) &&
  ------------------
  |  |   45|   243k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.49k, False: 238k]
  |  |  ------------------
  ------------------
  |  Branch (130:29): [True: 242k, False: 1.27k]
  ------------------
  131|   255k|                            (ABS(i2_mv_y1 - i2_ngbr_mv_y1) < 4) ? 0 : 1;
  ------------------
  |  |   45|   242k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5.64k, False: 236k]
  |  |  ------------------
  ------------------
  |  Branch (131:29): [True: 241k, False: 737]
  ------------------
  132|   255k|                }
  133|      4|                else
  134|      4|                {
  135|      4|                    i4_bs = (ABS(i2_mv_x0 - i2_ngbr_mv_x1) < 4) &&
  ------------------
  |  |   45|  18.4E|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 8, False: 18.4E]
  |  |  ------------------
  ------------------
  |  Branch (135:29): [True: 9, False: 18.4E]
  ------------------
  136|      9|                            (ABS(i2_mv_y0 - i2_ngbr_mv_y1) < 4) &&
  ------------------
  |  |   45|      9|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 5, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (136:29): [True: 4, False: 5]
  ------------------
  137|      4|                            (ABS(i2_mv_x1 - i2_ngbr_mv_x0) < 4) &&
  ------------------
  |  |   45|      4|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (137:29): [True: 4, False: 0]
  ------------------
  138|      4|                            (ABS(i2_mv_y1 - i2_ngbr_mv_y0) < 4) ? 0 : 1;
  ------------------
  |  |   45|      4|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 0, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (138:29): [True: 4, False: 0]
  ------------------
  139|      4|                }
  140|   255k|            }
  141|  2.45M|            else /* Same L0 and L1 */
  142|  2.45M|            {
  143|  2.45M|                i4_bs = ((ABS(i2_mv_x0 - i2_ngbr_mv_x0) >= 4) ||
  ------------------
  |  |   45|  2.45M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 20.7k, False: 2.43M]
  |  |  ------------------
  ------------------
  |  Branch (143:26): [True: 8.48k, False: 2.44M]
  ------------------
  144|  2.45M|                         (ABS(i2_mv_y0 - i2_ngbr_mv_y0) >= 4) ||
  ------------------
  |  |   45|  2.44M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 15.8k, False: 2.43M]
  |  |  ------------------
  ------------------
  |  Branch (144:26): [True: 5.78k, False: 2.44M]
  ------------------
  145|  2.45M|                         (ABS(i2_mv_x1 - i2_ngbr_mv_x1) >= 4) ||
  ------------------
  |  |   45|  2.44M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 11.2k, False: 2.43M]
  |  |  ------------------
  ------------------
  |  Branch (145:26): [True: 2.80k, False: 2.44M]
  ------------------
  146|  2.45M|                         (ABS(i2_mv_y1 - i2_ngbr_mv_y1) >= 4)) &&
  ------------------
  |  |   45|  2.44M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 11.8k, False: 2.42M]
  |  |  ------------------
  ------------------
  |  Branch (146:26): [True: 3.43k, False: 2.43M]
  ------------------
  147|  2.45M|                                ((ABS(i2_mv_x0 - i2_ngbr_mv_x1) >= 4) ||
  ------------------
  |  |   45|  20.5k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 8.30k, False: 12.2k]
  |  |  ------------------
  ------------------
  |  Branch (147:34): [True: 8.05k, False: 12.4k]
  ------------------
  148|  20.5k|                                 (ABS(i2_mv_y0 - i2_ngbr_mv_y1) >= 4) ||
  ------------------
  |  |   45|  12.4k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 3.78k, False: 8.67k]
  |  |  ------------------
  ------------------
  |  Branch (148:34): [True: 5.86k, False: 6.58k]
  ------------------
  149|  20.5k|                                 (ABS(i2_mv_x1 - i2_ngbr_mv_x0) >= 4) ||
  ------------------
  |  |   45|  6.58k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 3.03k, False: 3.54k]
  |  |  ------------------
  ------------------
  |  Branch (149:34): [True: 3.39k, False: 3.19k]
  ------------------
  150|  2.43M|                                 (ABS(i2_mv_y1 - i2_ngbr_mv_y0) >= 4)) ? 1 : 0;
  ------------------
  |  |   45|  3.19k|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 1.75k, False: 1.43k]
  |  |  ------------------
  ------------------
  |  Branch (150:34): [True: 2.58k, False: 610]
  ------------------
  151|  2.45M|            }
  152|  2.71M|        }
  153|  9.65k|        else /* If the reference pictures used are different */
  154|  9.65k|        {
  155|  9.65k|            i4_bs = 1;
  156|  9.65k|        }
  157|  2.72M|    }
  158|       |
  159|       |    /* If one motion vector is used in both PUs */
  160|  1.84M|    else if((1 == num_mv) &&
  ------------------
  |  Branch (160:13): [True: 1.69M, False: 151k]
  ------------------
  161|  1.84M|            (1 == ngbr_num_mv))
  ------------------
  |  Branch (161:13): [True: 1.52M, False: 165k]
  ------------------
  162|  1.52M|    {
  163|  1.52M|        WORD16 i2_mv_x, i2_mv_y;
  164|  1.52M|        WORD16 i2_ngbr_mv_x, i2_ngbr_mv_y;
  165|  1.52M|        UWORD32 ref_pic_buf_id, ngbr_ref_pic_buf_id;
  166|       |
  167|  1.52M|        if(PRED_L0 == ps_pu->b2_pred_mode)
  ------------------
  |  Branch (167:12): [True: 1.35M, False: 170k]
  ------------------
  168|  1.35M|        {
  169|  1.35M|            i2_mv_x = i2_mv_x0;
  170|  1.35M|            i2_mv_y = i2_mv_y0;
  171|  1.35M|            ref_pic_buf_id = l0_ref_pic_buf_id;
  172|  1.35M|        }
  173|   170k|        else
  174|   170k|        {
  175|   170k|            i2_mv_x = i2_mv_x1;
  176|   170k|            i2_mv_y = i2_mv_y1;
  177|   170k|            ref_pic_buf_id = l1_ref_pic_buf_id;
  178|   170k|        }
  179|       |
  180|  1.52M|        if(PRED_L0 == ps_ngbr_pu->b2_pred_mode)
  ------------------
  |  Branch (180:12): [True: 1.35M, False: 171k]
  ------------------
  181|  1.35M|        {
  182|  1.35M|            i2_ngbr_mv_x = i2_ngbr_mv_x0;
  183|  1.35M|            i2_ngbr_mv_y = i2_ngbr_mv_y0;
  184|  1.35M|            ngbr_ref_pic_buf_id = ngbr_l0_ref_pic_buf_id;
  185|  1.35M|        }
  186|   171k|        else
  187|   171k|        {
  188|   171k|            i2_ngbr_mv_x = i2_ngbr_mv_x1;
  189|   171k|            i2_ngbr_mv_y = i2_ngbr_mv_y1;
  190|   171k|            ngbr_ref_pic_buf_id = ngbr_l1_ref_pic_buf_id;
  191|   171k|        }
  192|       |
  193|  1.52M|        i4_bs = (ref_pic_buf_id == ngbr_ref_pic_buf_id) &&
  ------------------
  |  Branch (193:17): [True: 1.47M, False: 49.9k]
  ------------------
  194|  1.52M|                (ABS(i2_mv_x - i2_ngbr_mv_x) < 4)  &&
  ------------------
  |  |   45|  1.47M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 81.3k, False: 1.39M]
  |  |  ------------------
  ------------------
  |  Branch (194:17): [True: 1.42M, False: 50.0k]
  ------------------
  195|  1.52M|                (ABS(i2_mv_y - i2_ngbr_mv_y) < 4) ? 0 : 1;
  ------------------
  |  |   45|  1.42M|#define ABS(x)      ((((WORD32)(x)) > 0)           ? (x) : -(x))
  |  |  ------------------
  |  |  |  Branch (45:22): [True: 58.2k, False: 1.36M]
  |  |  ------------------
  ------------------
  |  Branch (195:17): [True: 1.40M, False: 24.5k]
  ------------------
  196|  1.52M|    }
  197|       |
  198|       |    /* If the no. of motion vectors is not the same */
  199|   317k|    else
  200|   317k|    {
  201|   317k|        i4_bs = 1;
  202|   317k|    }
  203|       |
  204|       |
  205|  4.56M|    return i4_bs;
  206|  4.56M|}
ihevcd_ctb_boundary_strength_islice:
  210|   694k|{
  211|   694k|    pps_t *ps_pps;
  212|   694k|    sps_t *ps_sps;
  213|   694k|    tu_t *ps_tu;
  214|   694k|    UWORD32 *pu4_vert_bs;
  215|   694k|    UWORD32 *pu4_horz_bs;
  216|   694k|    WORD32 bs_strd;
  217|   694k|    WORD32 vert_bs0_tmp;
  218|   694k|    WORD32 horz_bs0_tmp;
  219|   694k|    UWORD8 *pu1_qp;
  220|   694k|    WORD32 qp_strd;
  221|   694k|    UWORD32 u4_qp_const_in_ctb;
  222|   694k|    WORD32 ctb_indx;
  223|   694k|    WORD32 i4_tu_cnt;
  224|   694k|    WORD32 log2_ctb_size;
  225|   694k|    WORD32 ctb_size;
  226|       |
  227|   694k|    WORD8 i1_loop_filter_across_tiles_enabled_flag;
  228|   694k|    WORD8 i1_loop_filter_across_slices_enabled_flag;
  229|       |
  230|   694k|    WORD32 i;
  231|       |
  232|   694k|    PROFILE_DISABLE_BOUNDARY_STRENGTH();
  ------------------
  |  |   84|   694k|#define PROFILE_DISABLE_BOUNDARY_STRENGTH() ;
  ------------------
  233|       |
  234|   694k|    ps_pps = ps_bs_ctxt->ps_pps;
  235|   694k|    ps_sps = ps_bs_ctxt->ps_sps;
  236|   694k|    i1_loop_filter_across_tiles_enabled_flag = ps_pps->i1_loop_filter_across_tiles_enabled_flag;
  237|   694k|    i1_loop_filter_across_slices_enabled_flag = ps_bs_ctxt->ps_slice_hdr->i1_slice_loop_filter_across_slices_enabled_flag;
  238|   694k|    i4_tu_cnt = ps_bs_ctxt->i4_ctb_tu_cnt;
  239|       |
  240|   694k|    log2_ctb_size = ps_sps->i1_log2_ctb_size;
  241|   694k|    ctb_size = (1 << log2_ctb_size);
  242|       |
  243|       |    /* strides are in units of number of bytes */
  244|       |    /* ctb_size * ctb_size / 8 / 16 is the number of bytes needed per CTB */
  245|   694k|    bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) << (2 * log2_ctb_size - 7);
  246|       |
  247|   694k|    pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_bs_ctxt->pu4_pic_vert_bs +
  248|   694k|                    (ps_bs_ctxt->i4_ctb_x << (2 * log2_ctb_size - 7)) +
  249|   694k|                    ps_bs_ctxt->i4_ctb_y * bs_strd);
  250|   694k|    pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_bs_ctxt->pu4_pic_horz_bs +
  251|   694k|                    (ps_bs_ctxt->i4_ctb_x << (2 * log2_ctb_size - 7)) +
  252|   694k|                    ps_bs_ctxt->i4_ctb_y * bs_strd);
  253|       |
  254|       |    /* ctb_size/8 elements per CTB */
  255|   694k|    qp_strd = ps_sps->i2_pic_wd_in_ctb << (log2_ctb_size - 3);
  256|   694k|    pu1_qp = ps_bs_ctxt->pu1_pic_qp + ((ps_bs_ctxt->i4_ctb_x + ps_bs_ctxt->i4_ctb_y * qp_strd) << (log2_ctb_size - 3));
  257|       |
  258|   694k|    ctb_indx = ps_bs_ctxt->i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_bs_ctxt->i4_ctb_y;
  259|   694k|    u4_qp_const_in_ctb = ps_bs_ctxt->pu1_pic_qp_const_in_ctb[ctb_indx >> 3] & (1 << (ctb_indx & 7));
  260|       |
  261|   694k|    vert_bs0_tmp = pu4_vert_bs[0] & (0xFFFFFFFF >> (sizeof(UWORD32) * 8 - ctb_size / 2));
  262|   694k|    horz_bs0_tmp = pu4_horz_bs[0] & (0xFFFFFFFF >> (sizeof(UWORD32) * 8 - ctb_size / 2));
  263|       |
  264|       |    /* ctb_size/8 is the number of edges per CTB
  265|       |     * ctb_size/4 is the number of BS values needed per edge
  266|       |     * divided by 8 for the number of bytes
  267|       |     * 2 is the number of bits needed for each BS value */
  268|       |/*
  269|       |    memset(pu4_vert_bs, 0, (ctb_size / 8 + 1) * (ctb_size / 4) / 8 * 2 );
  270|       |    memset(pu4_horz_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2 );
  271|       |*/
  272|   694k|    memset(pu4_vert_bs, 0, (1 << (2 * log2_ctb_size - 7)) + ((ctb_size >> 5) << 1));
  273|   694k|    memset(pu4_horz_bs, 0, (1 << (2 * log2_ctb_size - 7)));
  274|       |
  275|       |    /* pu4_vert_bs[0] has information about the left CTB which is not required when ctb_x = 0 */
  276|   694k|    if(0 != ps_bs_ctxt->i4_ctb_x)
  ------------------
  |  Branch (276:8): [True: 670k, False: 24.1k]
  ------------------
  277|   670k|    {
  278|   670k|        pu4_vert_bs[0] |= vert_bs0_tmp;
  279|   670k|    }
  280|       |
  281|       |    /* pu4_horz_bs[0] has information about the top CTB which is not required when ctb_y = 0 */
  282|   694k|    if(0 != ps_bs_ctxt->i4_ctb_y)
  ------------------
  |  Branch (282:8): [True: 610k, False: 83.9k]
  ------------------
  283|   610k|    {
  284|   610k|        pu4_horz_bs[0] |= horz_bs0_tmp;
  285|   610k|    }
  286|       |
  287|   694k|    ps_tu = ps_bs_ctxt->ps_tu;
  288|       |
  289|       |    /* Populating the QP array - if const_qp_in_ctb flag is one, set only the first element */
  290|   694k|    if(u4_qp_const_in_ctb)
  ------------------
  |  Branch (290:8): [True: 687k, False: 7.60k]
  ------------------
  291|   687k|        pu1_qp[0] = ps_tu->b7_qp;
  292|       |
  293|  20.6M|    for(i = 0; i < i4_tu_cnt; i++)
  ------------------
  |  Branch (293:16): [True: 20.0M, False: 694k]
  ------------------
  294|  20.0M|    {
  295|  20.0M|        WORD32 start_pos_x;
  296|  20.0M|        WORD32 start_pos_y;
  297|  20.0M|        WORD32 tu_size;
  298|       |
  299|       |
  300|  20.0M|        UWORD32 u4_bs;
  301|  20.0M|        ps_tu = ps_bs_ctxt->ps_tu + i;
  302|       |
  303|       |        /* start_pos_x and start_pos_y are in units of min TU size (4x4) */
  304|  20.0M|        start_pos_x = ps_tu->b4_pos_x;
  305|  20.0M|        start_pos_y = ps_tu->b4_pos_y;
  306|       |
  307|  20.0M|        tu_size = 1 << (ps_tu->b3_size + 2);
  308|  20.0M|        tu_size >>= 2; /* TU size divided by 4 */
  309|       |
  310|  20.0M|        u4_bs = DUP_LSB_10(tu_size);
  ------------------
  |  |   78|  20.0M|#define DUP_LSB_10(x) ((UWORD32)0xAAAAAAAA >> (32 - ((x) * 2)))
  ------------------
  311|       |
  312|       |        /* Only if the current edge falls on 8 pixel grid set BS */
  313|  20.0M|        if(0 == (start_pos_x & 1))
  ------------------
  |  Branch (313:12): [True: 19.6M, False: 341k]
  ------------------
  314|  19.6M|        {
  315|  19.6M|            WORD32 shift;
  316|  19.6M|            shift = start_pos_y * 2;
  317|       |            /* shift += (((start_pos_x >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  318|       |             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  319|       |             *  and deblocking is done on 8x8 grid
  320|       |             */
  321|  19.6M|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (321:16): [True: 1.10M, False: 18.5M]
  ------------------
  322|  1.10M|                shift += ((start_pos_x & 2) << (log2_ctb_size - 2));
  323|  19.6M|            pu4_vert_bs[start_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  324|  19.6M|        }
  325|       |        /* Only if the current edge falls on 8 pixel grid set BS */
  326|  20.0M|        if(0 == (start_pos_y & 1))
  ------------------
  |  Branch (326:12): [True: 19.6M, False: 341k]
  ------------------
  327|  19.6M|        {
  328|  19.6M|            WORD32 shift;
  329|  19.6M|            shift = start_pos_x * 2;
  330|       |            /* shift += (((start_pos_y >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  331|       |             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  332|       |             *  and deblocking is done on 8x8 grid
  333|       |             */
  334|  19.6M|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (334:16): [True: 1.10M, False: 18.5M]
  ------------------
  335|  1.10M|                shift += ((start_pos_y & 2) << (log2_ctb_size - 2));
  336|  19.6M|            pu4_horz_bs[start_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  337|  19.6M|        }
  338|       |
  339|       |        /* Populating the QP array */
  340|  20.0M|        if(0 == u4_qp_const_in_ctb)
  ------------------
  |  Branch (340:12): [True: 454k, False: 19.5M]
  ------------------
  341|   454k|        {
  342|   454k|            if(0 == (start_pos_x & 1) && 0 == (start_pos_y & 1))
  ------------------
  |  Branch (342:16): [True: 304k, False: 149k]
  |  Branch (342:42): [True: 229k, False: 74.8k]
  ------------------
  343|   229k|            {
  344|   229k|                WORD32 row, col;
  345|   511k|                for(row = start_pos_y; row < start_pos_y + tu_size; row += 2)
  ------------------
  |  Branch (345:40): [True: 281k, False: 229k]
  ------------------
  346|   281k|                {
  347|   708k|                    for(col = start_pos_x; col < start_pos_x + tu_size; col += 2)
  ------------------
  |  Branch (347:44): [True: 426k, False: 281k]
  ------------------
  348|   426k|                    {
  349|   426k|                        pu1_qp[(row >> 1) * qp_strd + (col >> 1)] = ps_tu->b7_qp;
  350|   426k|                    }
  351|   281k|                }
  352|   229k|            }
  353|   454k|        }
  354|       |
  355|  20.0M|    }
  356|   694k|    {
  357|       |        /*Determine if the slice is dependent, and is its left neighbor belongs to the same slice, in a different tile*/
  358|   694k|        UWORD32 ctb_addr;
  359|   694k|        WORD32 slice_idx, left_slice_idx = -1, top_slice_idx = -1;
  360|       |        /* If left neighbor is not available, then set BS for entire first column to zero */
  361|   694k|        if(!ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (361:12): [True: 627k, False: 67.3k]
  ------------------
  362|   627k|        {
  363|   627k|            if((0 == i1_loop_filter_across_tiles_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_tile_x) ||
  ------------------
  |  Branch (363:17): [True: 627k, False: 18.4E]
  |  Branch (363:66): [True: 22.5k, False: 604k]
  ------------------
  364|   627k|                            (0 == i1_loop_filter_across_slices_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_slice_x && 0 == ps_bs_ctxt->i4_ctb_slice_y) ||
  ------------------
  |  Branch (364:30): [True: 411k, False: 193k]
  |  Branch (364:80): [True: 39, False: 411k]
  |  Branch (364:115): [True: 33, False: 6]
  ------------------
  365|   627k|                            (0 == ps_bs_ctxt->i4_ctb_x))
  ------------------
  |  Branch (365:29): [True: 18.4E, False: 605k]
  ------------------
  366|  22.5k|            {
  367|  22.5k|                pu4_vert_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (367:35): [True: 12.8k, False: 9.78k]
  ------------------
  368|  22.5k|            }
  369|   627k|        }
  370|  67.3k|        else
  371|  67.3k|        {
  372|       |            //If across-tiles is disabled
  373|  67.3k|            if((0 == i1_loop_filter_across_tiles_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_tile_x))
  ------------------
  |  Branch (373:17): [True: 22.2k, False: 45.0k]
  |  Branch (373:66): [True: 2.15k, False: 20.1k]
  ------------------
  374|  2.15k|            {
  375|  2.15k|                pu4_vert_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (375:35): [True: 2.05k, False: 108]
  ------------------
  376|  2.15k|            }
  377|  65.2k|            else
  378|  65.2k|            {
  379|  65.2k|                ctb_addr = ps_bs_ctxt->i4_ctb_x + (ps_bs_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  380|  65.2k|                slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  381|  65.2k|                if(ps_bs_ctxt->i4_ctb_x)
  ------------------
  |  Branch (381:20): [True: 60.5k, False: 4.71k]
  ------------------
  382|  60.5k|                {
  383|  60.5k|                    ctb_addr = (ps_bs_ctxt->i4_ctb_x - 1) + (ps_bs_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  384|  60.5k|                    left_slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  385|  60.5k|                }
  386|       |                /*If the 1st slice in a new tile is a dependent slice*/
  387|  65.2k|                if(!((ps_bs_ctxt->ps_slice_hdr->i1_dependent_slice_flag == 1) && (slice_idx == left_slice_idx)))
  ------------------
  |  Branch (387:22): [True: 135, False: 65.0k]
  |  Branch (387:82): [True: 7, False: 128]
  ------------------
  388|  61.4k|                {
  389|       |                    /* Removed reduntant checks */
  390|  61.4k|                    if((0 == i1_loop_filter_across_slices_enabled_flag && (
  ------------------
  |  Branch (390:25): [True: 25.2k, False: 36.2k]
  ------------------
  391|  25.2k|                                    ((slice_idx != left_slice_idx) && 0 == ps_bs_ctxt->i4_ctb_slice_y) ||
  ------------------
  |  Branch (391:38): [True: 318, False: 24.9k]
  |  Branch (391:71): [True: 234, False: 84]
  ------------------
  392|  25.2k|                                    ((0 == ps_bs_ctxt->i4_ctb_tile_x) && (slice_idx != left_slice_idx)))) ||
  ------------------
  |  Branch (392:38): [True: 120, False: 24.8k]
  |  Branch (392:74): [True: 84, False: 36]
  ------------------
  393|  61.4k|                                    (0 == ps_bs_ctxt->i4_ctb_x))
  ------------------
  |  Branch (393:37): [True: 657, False: 60.5k]
  ------------------
  394|  1.01k|                    {
  395|  1.01k|                        pu4_vert_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (395:43): [True: 969, False: 49]
  ------------------
  396|  1.01k|                    }
  397|  61.4k|                }
  398|  65.2k|            }
  399|  67.3k|        }
  400|       |
  401|   694k|        ctb_addr = ps_bs_ctxt->i4_ctb_x + (ps_bs_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  402|   694k|        slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  403|   694k|        if(ps_bs_ctxt->i4_ctb_y)
  ------------------
  |  Branch (403:12): [True: 607k, False: 86.6k]
  ------------------
  404|   607k|        {
  405|   607k|            ctb_addr = (ps_bs_ctxt->i4_ctb_x) + ((ps_bs_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb);
  406|   607k|            top_slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  407|   607k|        }
  408|       |
  409|       |        /* If top neighbor is not available, then set BS for entire first row to zero */
  410|       |        /* Removed reduntant checks */
  411|   694k|        if((0 == i1_loop_filter_across_tiles_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_tile_y)
  ------------------
  |  Branch (411:13): [True: 649k, False: 44.8k]
  |  Branch (411:62): [True: 81.9k, False: 567k]
  ------------------
  412|   694k|                        || (0 == i1_loop_filter_across_slices_enabled_flag && ((slice_idx != top_slice_idx)))
  ------------------
  |  Branch (412:29): [True: 401k, False: 208k]
  |  Branch (412:79): [True: 764, False: 401k]
  ------------------
  413|   694k|                        || (0 == ps_bs_ctxt->i4_ctb_y))
  ------------------
  |  Branch (413:28): [True: 2.04k, False: 607k]
  ------------------
  414|  84.8k|        {
  415|  84.8k|            pu4_horz_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (415:31): [True: 79.7k, False: 5.12k]
  ------------------
  416|  84.8k|        }
  417|   694k|    }
  418|       |
  419|       |    /**
  420|       |     *  Set BS of bottom and right frame boundaries to zero if it is an incomplete CTB
  421|       |     *   (They might have been set to  non zero values because of CBF of the current CTB)
  422|       |     *   This block might not be needed for I slices*/
  423|   694k|    {
  424|   694k|        WORD32 num_rows_remaining = (ps_sps->i2_pic_height_in_luma_samples - (ps_bs_ctxt->i4_ctb_y << log2_ctb_size)) >> 3;
  425|   694k|        WORD32 num_cols_remaining = (ps_sps->i2_pic_width_in_luma_samples - (ps_bs_ctxt->i4_ctb_x << log2_ctb_size)) >> 3;
  426|   694k|        if(num_rows_remaining < (ctb_size >> 3))
  ------------------
  |  Branch (426:12): [True: 69.8k, False: 624k]
  ------------------
  427|  69.8k|        {
  428|       |            /* WORD32 offset = (((num_rows_remaining >> 3) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 4));
  429|       |             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  430|       |             *  and deblocking is done on 8x8 grid
  431|       |             */
  432|  69.8k|            WORD32 offset;
  433|  69.8k|            offset = (num_rows_remaining >> (6 - log2_ctb_size)) << 2;
  434|  69.8k|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (434:16): [True: 9.91k, False: 59.9k]
  ------------------
  435|  9.91k|                offset += (num_rows_remaining & 1) << (log2_ctb_size - 4);
  436|       |
  437|  69.8k|            memset(((UWORD8 *)pu4_horz_bs) + offset, 0, 1 << (log2_ctb_size - 4));
  438|  69.8k|        }
  439|       |
  440|   694k|        if(num_cols_remaining < (ctb_size >> 3))
  ------------------
  |  Branch (440:12): [True: 21.2k, False: 673k]
  ------------------
  441|  21.2k|        {
  442|       |            /* WORD32 offset = (((num_cols_remaining >> 3) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 4));
  443|       |             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  444|       |             *  and deblocking is done on 8x8 grid
  445|       |             */
  446|       |
  447|  21.2k|            WORD32 offset;
  448|  21.2k|            offset = (num_cols_remaining >> (6 - log2_ctb_size)) << 2;
  449|  21.2k|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (449:16): [True: 9.49k, False: 11.7k]
  ------------------
  450|  9.49k|                offset += (num_cols_remaining & 1) << (log2_ctb_size - 4);
  451|       |
  452|  21.2k|            memset(((UWORD8 *)pu4_vert_bs) + offset, 0, 1 << (log2_ctb_size - 4));
  453|  21.2k|        }
  454|   694k|    }
  455|       |
  456|   694k|    return 0;
  457|   694k|}
ihevcd_ctb_boundary_strength_pbslice:
  459|   153k|{
  460|   153k|    sps_t *ps_sps;
  461|   153k|    pps_t *ps_pps;
  462|   153k|    WORD32 cur_ctb_idx, next_ctb_idx = 0;
  463|   153k|    WORD32 i4_tu_cnt;
  464|   153k|    WORD32 i4_pu_cnt;
  465|   153k|    tu_t *ps_tu;
  466|       |
  467|   153k|    UWORD32 *pu4_vert_bs;
  468|   153k|    UWORD32 *pu4_horz_bs;
  469|   153k|    WORD32 bs_strd;
  470|   153k|    WORD32 vert_bs0_tmp;
  471|   153k|    WORD32 horz_bs0_tmp;
  472|   153k|    UWORD8 *pu1_qp;
  473|   153k|    WORD32 qp_strd;
  474|   153k|    UWORD32 u4_qp_const_in_ctb;
  475|   153k|    WORD32 ctb_indx;
  476|   153k|    WORD32 log2_ctb_size;
  477|   153k|    WORD32 ctb_size;
  478|       |
  479|   153k|    WORD32 i;
  480|   153k|    WORD8 i1_loop_filter_across_tiles_enabled_flag;
  481|   153k|    WORD8 i1_loop_filter_across_slices_enabled_flag;
  482|       |
  483|   153k|    PROFILE_DISABLE_BOUNDARY_STRENGTH();
  ------------------
  |  |   84|   153k|#define PROFILE_DISABLE_BOUNDARY_STRENGTH() ;
  ------------------
  484|       |
  485|   153k|    ps_sps = ps_bs_ctxt->ps_sps;
  486|   153k|    ps_pps = ps_bs_ctxt->ps_pps;
  487|       |
  488|   153k|    log2_ctb_size = ps_sps->i1_log2_ctb_size;
  489|   153k|    ctb_size = (1 << log2_ctb_size);
  490|       |
  491|       |    /* strides are in units of number of bytes */
  492|       |    /* ctb_size * ctb_size / 8 / 16 is the number of bytes needed per CTB */
  493|   153k|    bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) << (2 * log2_ctb_size - 7);
  494|       |
  495|   153k|    pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_bs_ctxt->pu4_pic_vert_bs +
  496|   153k|                    (ps_bs_ctxt->i4_ctb_x << (2 * log2_ctb_size - 7)) +
  497|   153k|                    ps_bs_ctxt->i4_ctb_y * bs_strd);
  498|   153k|    pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_bs_ctxt->pu4_pic_horz_bs +
  499|   153k|                    (ps_bs_ctxt->i4_ctb_x << (2 * log2_ctb_size - 7)) +
  500|   153k|                    ps_bs_ctxt->i4_ctb_y * bs_strd);
  501|       |
  502|   153k|    vert_bs0_tmp = pu4_vert_bs[0] & (0xFFFFFFFF >> (sizeof(UWORD32) * 8 - ctb_size / 2));
  503|   153k|    horz_bs0_tmp = pu4_horz_bs[0] & (0xFFFFFFFF >> (sizeof(UWORD32) * 8 - ctb_size / 2));
  504|       |
  505|   153k|    ps_tu = ps_bs_ctxt->ps_tu;
  506|       |
  507|       |    /* ctb_size/8 elements per CTB */
  508|   153k|    qp_strd = ps_sps->i2_pic_wd_in_ctb << (log2_ctb_size - 3);
  509|   153k|    pu1_qp = ps_bs_ctxt->pu1_pic_qp + ((ps_bs_ctxt->i4_ctb_x + ps_bs_ctxt->i4_ctb_y * qp_strd) << (log2_ctb_size - 3));
  510|       |
  511|   153k|    ctb_indx = ps_bs_ctxt->i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_bs_ctxt->i4_ctb_y;
  512|   153k|    u4_qp_const_in_ctb = ps_bs_ctxt->pu1_pic_qp_const_in_ctb[ctb_indx >> 3] & (1 << (ctb_indx & 7));
  513|       |
  514|   153k|    i1_loop_filter_across_tiles_enabled_flag = ps_pps->i1_loop_filter_across_tiles_enabled_flag;
  515|   153k|    i1_loop_filter_across_slices_enabled_flag = ps_bs_ctxt->ps_slice_hdr->i1_slice_loop_filter_across_slices_enabled_flag;
  516|       |
  517|       |    /* ctb_size/8 is the number of edges per CTB
  518|       |     * ctb_size/4 is the number of BS values needed per edge
  519|       |     * divided by 8 for the number of bytes
  520|       |     * 2 is the number of bits needed for each BS value */
  521|       |/*
  522|       |    memset(pu4_vert_bs, 0, (ctb_size / 8 + 1) * (ctb_size / 4) * 2 / 8 );
  523|       |    memset(pu4_horz_bs, 0, (ctb_size / 8) * (ctb_size / 4) * 2 / 8 );
  524|       |*/
  525|   153k|    memset(pu4_vert_bs, 0, (1 << (2 * log2_ctb_size - 7)) + (ctb_size >> 4));
  526|   153k|    memset(pu4_horz_bs, 0, (1 << (2 * log2_ctb_size - 7)));
  527|       |
  528|       |    /* pu4_vert_bs[0] has information about the left CTB which is not required when ctb_x = 0 */
  529|   153k|    if(0 != ps_bs_ctxt->i4_ctb_x)
  ------------------
  |  Branch (529:8): [True: 128k, False: 24.3k]
  ------------------
  530|   128k|    {
  531|   128k|        pu4_vert_bs[0] |= vert_bs0_tmp;
  532|   128k|    }
  533|       |
  534|       |    /* pu4_horz_bs[0] has information about the top CTB which is not required when ctb_y = 0 */
  535|   153k|    if(0 != ps_bs_ctxt->i4_ctb_y)
  ------------------
  |  Branch (535:8): [True: 145k, False: 8.06k]
  ------------------
  536|   145k|    {
  537|   145k|        pu4_horz_bs[0] |= horz_bs0_tmp;
  538|   145k|    }
  539|       |    /* pu4_horz_bs[bs_strd / 4] corresponds to pu4_horz_bs[0] of the bottom CTB */
  540|   153k|    *(UWORD32 *)((UWORD8 *)pu4_horz_bs + bs_strd) = 0;
  541|       |
  542|   153k|    cur_ctb_idx = ps_bs_ctxt->i4_ctb_x
  543|   153k|                    + ps_bs_ctxt->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  544|   153k|    next_ctb_idx = ps_bs_ctxt->i4_next_tu_ctb_cnt;
  545|   153k|    if(1 == ps_bs_ctxt->ps_codec->i4_num_cores)
  ------------------
  |  Branch (545:8): [True: 7.39k, False: 145k]
  ------------------
  546|  7.39k|    {
  547|  7.39k|        i4_tu_cnt = ps_bs_ctxt->pu4_pic_tu_idx[next_ctb_idx] - ps_bs_ctxt->pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|  7.39k|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  7.39k|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  7.39k|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  7.39k|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  7.39k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  7.39k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  548|  7.39k|    }
  549|   145k|    else
  550|   145k|    {
  551|   145k|        i4_tu_cnt = ps_bs_ctxt->pu4_pic_tu_idx[next_ctb_idx] - ps_bs_ctxt->pu4_pic_tu_idx[cur_ctb_idx];
  552|   145k|    }
  553|       |
  554|   153k|    ps_tu = ps_bs_ctxt->ps_tu;
  555|   153k|    if(u4_qp_const_in_ctb)
  ------------------
  |  Branch (555:8): [True: 149k, False: 4.21k]
  ------------------
  556|   149k|        pu1_qp[0] = ps_tu->b7_qp;
  557|       |
  558|       |    /* For all TUs in the CTB For left and top edges, check if there are coded coefficients on either sides of the edge */
  559|  2.56M|    for(i = 0; i < i4_tu_cnt; i++)
  ------------------
  |  Branch (559:16): [True: 2.41M, False: 153k]
  ------------------
  560|  2.41M|    {
  561|  2.41M|        WORD32 start_pos_x;
  562|  2.41M|        WORD32 start_pos_y;
  563|  2.41M|        WORD32 end_pos_x;
  564|  2.41M|        WORD32 end_pos_y;
  565|  2.41M|        WORD32 tu_size;
  566|  2.41M|        UWORD32 u4_bs;
  567|  2.41M|        WORD32 intra_flag;
  568|  2.41M|        UWORD8 *pu1_pic_intra_flag;
  569|       |
  570|  2.41M|        ps_tu = ps_bs_ctxt->ps_tu + i;
  571|       |
  572|  2.41M|        start_pos_x = ps_tu->b4_pos_x;
  573|  2.41M|        start_pos_y = ps_tu->b4_pos_y;
  574|       |
  575|  2.41M|        tu_size = 1 << (ps_tu->b3_size + 2);
  576|  2.41M|        tu_size >>= 2;
  577|       |
  578|  2.41M|        end_pos_x = start_pos_x + tu_size;
  579|  2.41M|        end_pos_y = start_pos_y + tu_size;
  580|       |
  581|  2.41M|        {
  582|  2.41M|            WORD32 tu_abs_x = (ps_bs_ctxt->i4_ctb_x << log2_ctb_size) + (start_pos_x << 2);
  583|  2.41M|            WORD32 tu_abs_y = (ps_bs_ctxt->i4_ctb_y << log2_ctb_size) + (start_pos_y << 2);
  584|       |
  585|  2.41M|            WORD32 numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
  586|       |
  587|  2.41M|            pu1_pic_intra_flag = ps_bs_ctxt->ps_codec->pu1_pic_intra_flag;
  588|  2.41M|            pu1_pic_intra_flag += (tu_abs_y >> 3) * numbytes_row;
  589|  2.41M|            pu1_pic_intra_flag += (tu_abs_x >> 6);
  590|       |
  591|  2.41M|            intra_flag = *pu1_pic_intra_flag;
  592|  2.41M|            intra_flag &= (1 << ((tu_abs_x >> 3) % 8));
  593|  2.41M|        }
  594|  2.41M|        if(intra_flag)
  ------------------
  |  Branch (594:12): [True: 29.0k, False: 2.38M]
  ------------------
  595|  29.0k|        {
  596|  29.0k|            u4_bs = DUP_LSB_10(tu_size);
  ------------------
  |  |   78|  29.0k|#define DUP_LSB_10(x) ((UWORD32)0xAAAAAAAA >> (32 - ((x) * 2)))
  ------------------
  597|       |
  598|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  599|  29.0k|            if(0 == (start_pos_x & 1))
  ------------------
  |  Branch (599:16): [True: 16.3k, False: 12.6k]
  ------------------
  600|  16.3k|            {
  601|  16.3k|                WORD32 shift;
  602|  16.3k|                shift = start_pos_y * 2;
  603|       |                /* shift += (((start_pos_x >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  604|       |                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  605|       |                 *  and deblocking is done on 8x8 grid
  606|       |                 */
  607|  16.3k|                if(6 != log2_ctb_size)
  ------------------
  |  Branch (607:20): [True: 2.04k, False: 14.3k]
  ------------------
  608|  2.04k|                    shift += ((start_pos_x & 2) << (log2_ctb_size - 2));
  609|  16.3k|                pu4_vert_bs[start_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  610|  16.3k|            }
  611|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  612|  29.0k|            if(0 == (start_pos_y & 1))
  ------------------
  |  Branch (612:16): [True: 16.3k, False: 12.6k]
  ------------------
  613|  16.3k|            {
  614|  16.3k|                WORD32 shift;
  615|  16.3k|                shift = start_pos_x * 2;
  616|       |                /* shift += (((start_pos_y >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  617|       |                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  618|       |                 *  and deblocking is done on 8x8 grid
  619|       |                 */
  620|  16.3k|                if(6 != log2_ctb_size)
  ------------------
  |  Branch (620:20): [True: 2.04k, False: 14.3k]
  ------------------
  621|  2.04k|                    shift += ((start_pos_y & 2) << (log2_ctb_size - 2));
  622|  16.3k|                pu4_horz_bs[start_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  623|  16.3k|            }
  624|  29.0k|        }
  625|       |
  626|       |
  627|       |        /* If the current TU is coded then set both top edge and left edge BS to 1 and go to next TU */
  628|  2.41M|        if(ps_tu->b1_y_cbf)
  ------------------
  |  Branch (628:12): [True: 46.9k, False: 2.36M]
  ------------------
  629|  46.9k|        {
  630|  46.9k|            u4_bs = DUP_LSB_01(tu_size);
  ------------------
  |  |   75|  46.9k|#define DUP_LSB_01(x) ((UWORD32)0x55555555 >> (32 - ((x) * 2)))
  ------------------
  631|       |
  632|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  633|  46.9k|            if(0 == (start_pos_x & 1))
  ------------------
  |  Branch (633:16): [True: 36.3k, False: 10.6k]
  ------------------
  634|  36.3k|            {
  635|  36.3k|                WORD32 shift;
  636|  36.3k|                shift = start_pos_y * 2;
  637|       |                /* shift += (((start_pos_x >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  638|       |                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  639|       |                 *  and deblocking is done on 8x8 grid
  640|       |                 */
  641|  36.3k|                if(6 != log2_ctb_size)
  ------------------
  |  Branch (641:20): [True: 2.94k, False: 33.3k]
  ------------------
  642|  2.94k|                    shift += ((start_pos_x & 2) << (log2_ctb_size - 2));
  643|  36.3k|                pu4_vert_bs[start_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  644|  36.3k|            }
  645|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  646|  46.9k|            if(0 == (start_pos_y & 1))
  ------------------
  |  Branch (646:16): [True: 36.4k, False: 10.4k]
  ------------------
  647|  36.4k|            {
  648|  36.4k|                WORD32 shift;
  649|  36.4k|                shift = start_pos_x * 2;
  650|       |                /* shift += (((start_pos_y >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  651|       |                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  652|       |                 *  and deblocking is done on 8x8 grid
  653|       |                 */
  654|  36.4k|                if(6 != log2_ctb_size)
  ------------------
  |  Branch (654:20): [True: 3.03k, False: 33.4k]
  ------------------
  655|  3.03k|                    shift += ((start_pos_y & 2) << (log2_ctb_size - 2));
  656|  36.4k|                pu4_horz_bs[start_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  657|  36.4k|            }
  658|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  659|  46.9k|            if(0 == (end_pos_x & 1))
  ------------------
  |  Branch (659:16): [True: 36.3k, False: 10.5k]
  ------------------
  660|  36.3k|            {
  661|  36.3k|                if(!(ctb_size / 8 == (end_pos_x >> 1) && ps_bs_ctxt->i4_ctb_x == ps_sps->i2_pic_wd_in_ctb - 1))
  ------------------
  |  Branch (661:22): [True: 8.17k, False: 28.1k]
  |  Branch (661:58): [True: 462, False: 7.71k]
  ------------------
  662|  35.8k|                {
  663|  35.8k|                    WORD32 shift;
  664|  35.8k|                    shift = start_pos_y * 2;
  665|  35.8k|                    shift += (((end_pos_x >> 1) & ((MAX_CTB_SIZE >> log2_ctb_size) - 1)) << (log2_ctb_size - 1));
  ------------------
  |  |  341|  35.8k|#define MAX_CTB_SIZE        64
  ------------------
  666|  35.8k|                    pu4_vert_bs[end_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  667|  35.8k|                }
  668|  36.3k|            }
  669|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  670|  46.9k|            if(0 == (end_pos_y & 1))
  ------------------
  |  Branch (670:16): [True: 36.1k, False: 10.7k]
  ------------------
  671|  36.1k|            {
  672|       |                /* If end_pos_y corresponds to the bottom of the CTB, write to pu4_horz_bs[0] of the bottom CTB */
  673|  36.1k|                if(ctb_size / 8 == (end_pos_y >> 1))
  ------------------
  |  Branch (673:20): [True: 7.88k, False: 28.2k]
  ------------------
  674|  7.88k|                {
  675|  7.88k|                    *(UWORD32 *)((UWORD8 *)pu4_horz_bs + bs_strd) |= (u4_bs << (start_pos_x * 2));
  676|  7.88k|                }
  677|  28.2k|                else
  678|  28.2k|                {
  679|  28.2k|                    WORD32 shift;
  680|  28.2k|                    shift = start_pos_x * 2;
  681|  28.2k|                    shift += (((end_pos_y >> 1) & ((MAX_CTB_SIZE >> log2_ctb_size) - 1)) << (log2_ctb_size - 1));
  ------------------
  |  |  341|  28.2k|#define MAX_CTB_SIZE        64
  ------------------
  682|  28.2k|                    pu4_horz_bs[end_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  683|  28.2k|                }
  684|  36.1k|            }
  685|  46.9k|        }
  686|       |
  687|  2.41M|        if(0 == u4_qp_const_in_ctb)
  ------------------
  |  Branch (687:12): [True: 126k, False: 2.28M]
  ------------------
  688|   126k|        {
  689|   126k|            if(0 == (start_pos_x & 1) && 0 == (start_pos_y & 1))
  ------------------
  |  Branch (689:16): [True: 104k, False: 22.0k]
  |  Branch (689:42): [True: 93.3k, False: 11.0k]
  ------------------
  690|  93.3k|            {
  691|  93.3k|                WORD32 row, col;
  692|   206k|                for(row = start_pos_y; row < start_pos_y + tu_size; row += 2)
  ------------------
  |  Branch (692:40): [True: 112k, False: 93.3k]
  ------------------
  693|   112k|                {
  694|   283k|                    for(col = start_pos_x; col < start_pos_x + tu_size; col += 2)
  ------------------
  |  Branch (694:44): [True: 170k, False: 112k]
  ------------------
  695|   170k|                    {
  696|   170k|                        pu1_qp[(row >> 1) * qp_strd + (col >> 1)] = ps_tu->b7_qp;
  697|   170k|                    }
  698|   112k|                }
  699|  93.3k|            }
  700|   126k|        }
  701|  2.41M|    }
  702|       |
  703|       |    /* For all PUs in the CTB,
  704|       |    For left and top edges, compute BS */
  705|       |
  706|   153k|    cur_ctb_idx = ps_bs_ctxt->i4_ctb_x
  707|   153k|                    + ps_bs_ctxt->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  708|       |
  709|   153k|    {
  710|   153k|        WORD32 next_ctb_idx;
  711|   153k|        next_ctb_idx = ps_bs_ctxt->i4_next_pu_ctb_cnt;
  712|   153k|        i4_pu_cnt = ps_bs_ctxt->pu4_pic_pu_idx[next_ctb_idx] - ps_bs_ctxt->pu4_pic_pu_idx[cur_ctb_idx];
  713|   153k|    }
  714|       |
  715|  2.44M|    for(i = 0; i < i4_pu_cnt; i++)
  ------------------
  |  Branch (715:16): [True: 2.28M, False: 153k]
  ------------------
  716|  2.28M|    {
  717|  2.28M|        WORD32 start_pos_x;
  718|  2.28M|        WORD32 start_pos_y;
  719|  2.28M|        WORD32 end_pos_x;
  720|  2.28M|        WORD32 end_pos_y;
  721|  2.28M|        WORD32 pu_wd, pu_ht;
  722|  2.28M|        UWORD32 u4_bs;
  723|  2.28M|        pu_t *ps_pu = ps_bs_ctxt->ps_pu + i;
  724|  2.28M|        pu_t *ps_ngbr_pu;
  725|  2.28M|        UWORD32 u4_ngbr_pu_indx;
  726|       |
  727|  2.28M|        start_pos_x = ps_pu->b4_pos_x;
  728|  2.28M|        start_pos_y = ps_pu->b4_pos_y;
  729|       |
  730|  2.28M|        pu_wd = (ps_pu->b4_wd + 1);
  731|  2.28M|        pu_ht = (ps_pu->b4_ht + 1);
  732|       |
  733|  2.28M|        end_pos_x = start_pos_x + pu_wd;
  734|  2.28M|        end_pos_y = start_pos_y + pu_ht;
  735|       |
  736|       |        /* If the current PU is intra, set Boundary strength as 2 for both top and left edge */
  737|       |        /* Need not mask the BS to zero even if it was set to 1 already since BS 2 and 3 are assumed to be the same in leaf level functions */
  738|  2.28M|        if(ps_pu->b1_intra_flag)
  ------------------
  |  Branch (738:12): [True: 7.41k, False: 2.28M]
  ------------------
  739|  7.41k|        {
  740|  7.41k|            u4_bs = DUP_LSB_10(pu_ht);
  ------------------
  |  |   78|  7.41k|#define DUP_LSB_10(x) ((UWORD32)0xAAAAAAAA >> (32 - ((x) * 2)))
  ------------------
  741|       |
  742|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  743|  7.41k|            if(0 == (start_pos_x & 1))
  ------------------
  |  Branch (743:16): [True: 7.41k, False: 0]
  ------------------
  744|  7.41k|            {
  745|  7.41k|                WORD32 shift;
  746|  7.41k|                shift = start_pos_y * 2;
  747|       |                /* shift += (((start_pos_x >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  748|       |                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  749|       |                 *  and deblocking is done on 8x8 grid
  750|       |                 */
  751|  7.41k|                if(6 != log2_ctb_size)
  ------------------
  |  Branch (751:20): [True: 333, False: 7.07k]
  ------------------
  752|    333|                    shift += ((start_pos_x & 2) << (log2_ctb_size - 2));
  753|  7.41k|                pu4_vert_bs[start_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  754|  7.41k|            }
  755|       |
  756|  7.41k|            u4_bs = DUP_LSB_10(pu_wd);
  ------------------
  |  |   78|  7.41k|#define DUP_LSB_10(x) ((UWORD32)0xAAAAAAAA >> (32 - ((x) * 2)))
  ------------------
  757|       |
  758|       |            /* Only if the current edge falls on 8 pixel grid set BS */
  759|  7.41k|            if(0 == (start_pos_y & 1))
  ------------------
  |  Branch (759:16): [True: 7.41k, False: 0]
  ------------------
  760|  7.41k|            {
  761|  7.41k|                WORD32 shift;
  762|  7.41k|                shift = start_pos_x * 2;
  763|       |                /* shift += (((start_pos_y >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  764|       |                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  765|       |                 *  and deblocking is done on 8x8 grid
  766|       |                 */
  767|  7.41k|                if(6 != log2_ctb_size)
  ------------------
  |  Branch (767:20): [True: 333, False: 7.07k]
  ------------------
  768|    333|                    shift += ((start_pos_y & 2) << (log2_ctb_size - 2));
  769|  7.41k|                pu4_horz_bs[start_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  770|  7.41k|            }
  771|  7.41k|        }
  772|       |
  773|  2.28M|        else
  774|  2.28M|        {
  775|       |            /* Vertical edge */
  776|       |            /* Process only if the edge is not a frame edge */
  777|  2.28M|            if(0 != ps_bs_ctxt->i4_ctb_x + start_pos_x)
  ------------------
  |  Branch (777:16): [True: 2.19M, False: 82.2k]
  ------------------
  778|  2.19M|            {
  779|  2.19M|                do
  780|  2.26M|                {
  781|  2.26M|                    WORD32 pu_ngbr_ht;
  782|  2.26M|                    WORD32 min_pu_ht;
  783|  2.26M|                    WORD32 ngbr_end_pos_y;
  784|  2.26M|                    UWORD32 ngbr_pu_idx_strd;
  785|  2.26M|                    ngbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  341|  2.26M|#define MAX_CTB_SIZE        64
  ------------------
                                  ngbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  357|  2.26M|#define MIN_PU_SIZE         4
  ------------------
  786|  2.26M|                    u4_ngbr_pu_indx = ps_bs_ctxt->pu4_pic_pu_idx_map[(start_pos_y + 1) * ngbr_pu_idx_strd + (start_pos_x)];
  787|  2.26M|                    ps_ngbr_pu = ps_bs_ctxt->ps_pic_pu + u4_ngbr_pu_indx;
  788|       |
  789|  2.26M|                    pu_ngbr_ht = ps_ngbr_pu->b4_ht + 1;
  790|  2.26M|                    ngbr_end_pos_y = ps_ngbr_pu->b4_pos_y + pu_ngbr_ht;
  791|       |
  792|  2.26M|                    min_pu_ht = MIN(ngbr_end_pos_y, end_pos_y) - start_pos_y;
  ------------------
  |  |   43|  2.26M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 62.7k, False: 2.19M]
  |  |  ------------------
  ------------------
  793|       |
  794|  2.26M|                    if(ps_ngbr_pu->b1_intra_flag)
  ------------------
  |  Branch (794:24): [True: 6.82k, False: 2.25M]
  ------------------
  795|  6.82k|                    {
  796|  6.82k|                        u4_bs = DUP_LSB_10(min_pu_ht);
  ------------------
  |  |   78|  6.82k|#define DUP_LSB_10(x) ((UWORD32)0xAAAAAAAA >> (32 - ((x) * 2)))
  ------------------
  797|       |
  798|       |                        /* Only if the current edge falls on 8 pixel grid set BS */
  799|  6.82k|                        if(0 == (start_pos_x & 1))
  ------------------
  |  Branch (799:28): [True: 6.82k, False: 0]
  ------------------
  800|  6.82k|                        {
  801|  6.82k|                            WORD32 shift;
  802|  6.82k|                            shift = start_pos_y * 2;
  803|       |                            /* shift += (((start_pos_x >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  804|       |                             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  805|       |                             *  and deblocking is done on 8x8 grid
  806|       |                             */
  807|  6.82k|                            if(6 != log2_ctb_size)
  ------------------
  |  Branch (807:32): [True: 272, False: 6.55k]
  ------------------
  808|    272|                                shift += ((start_pos_x & 2) << (log2_ctb_size - 2));
  809|  6.82k|                            pu4_vert_bs[start_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  810|  6.82k|                        }
  811|  6.82k|                    }
  812|  2.25M|                    else
  813|  2.25M|                    {
  814|  2.25M|                        u4_bs = ihevcd_pu_boundary_strength(ps_pu, ps_ngbr_pu);
  815|  2.25M|                        if(u4_bs)
  ------------------
  |  Branch (815:28): [True: 230k, False: 2.02M]
  ------------------
  816|   230k|                        {
  817|   230k|                            u4_bs = DUP_LSB_01(min_pu_ht);
  ------------------
  |  |   75|   230k|#define DUP_LSB_01(x) ((UWORD32)0x55555555 >> (32 - ((x) * 2)))
  ------------------
  818|   230k|                            if(0 == (start_pos_x & 1))
  ------------------
  |  Branch (818:32): [True: 212k, False: 17.5k]
  ------------------
  819|   212k|                            {
  820|   212k|                                WORD32 shift;
  821|   212k|                                shift = start_pos_y * 2;
  822|       |                                /* shift += (((start_pos_x >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  823|       |                                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  824|       |                                 *  and deblocking is done on 8x8 grid
  825|       |                                 */
  826|   212k|                                if(6 != log2_ctb_size)
  ------------------
  |  Branch (826:36): [True: 11.6k, False: 200k]
  ------------------
  827|  11.6k|                                    shift += ((start_pos_x & 2) << (log2_ctb_size - 2));
  828|   212k|                                pu4_vert_bs[start_pos_x >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  829|   212k|                            }
  830|   230k|                        }
  831|  2.25M|                    }
  832|       |
  833|  2.26M|                    pu_ht -= min_pu_ht;
  834|  2.26M|                    start_pos_y += min_pu_ht;
  835|  2.26M|                }while(pu_ht > 0);
  ------------------
  |  Branch (835:24): [True: 62.7k, False: 2.19M]
  ------------------
  836|       |
  837|       |                /* Reinitialising since the values are updated in the previous loop */
  838|  2.19M|                pu_ht = ps_pu->b4_ht + 1;
  839|  2.19M|                start_pos_y = ps_pu->b4_pos_y;
  840|  2.19M|            }
  841|       |
  842|       |            /* Horizontal edge */
  843|       |            /* Process only if the edge is not a frame edge */
  844|  2.28M|            if(0 != ps_bs_ctxt->i4_ctb_y + start_pos_y)
  ------------------
  |  Branch (844:16): [True: 2.26M, False: 20.0k]
  ------------------
  845|  2.26M|            {
  846|  2.26M|                do
  847|  2.33M|                {
  848|  2.33M|                    WORD32 pu_ngbr_wd;
  849|  2.33M|                    WORD32 min_pu_wd;
  850|  2.33M|                    WORD32 ngbr_end_pos_x;
  851|  2.33M|                    UWORD32 ngbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  341|  2.33M|#define MAX_CTB_SIZE        64
  ------------------
                                  UWORD32 ngbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  357|  2.33M|#define MIN_PU_SIZE         4
  ------------------
  852|  2.33M|                    u4_ngbr_pu_indx = ps_bs_ctxt->pu4_pic_pu_idx_map[(start_pos_y)*ngbr_pu_idx_strd + (start_pos_x + 1)];
  853|  2.33M|                    ps_ngbr_pu = ps_bs_ctxt->ps_pic_pu + u4_ngbr_pu_indx;
  854|       |
  855|  2.33M|                    pu_ngbr_wd = ps_ngbr_pu->b4_wd + 1;
  856|  2.33M|                    ngbr_end_pos_x = ps_ngbr_pu->b4_pos_x + pu_ngbr_wd;
  857|       |
  858|  2.33M|                    min_pu_wd = MIN(ngbr_end_pos_x, end_pos_x) - start_pos_x;
  ------------------
  |  |   43|  2.33M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 71.0k, False: 2.26M]
  |  |  ------------------
  ------------------
  859|       |
  860|  2.33M|                    if(ps_ngbr_pu->b1_intra_flag)
  ------------------
  |  Branch (860:24): [True: 7.13k, False: 2.32M]
  ------------------
  861|  7.13k|                    {
  862|  7.13k|                        u4_bs = DUP_LSB_10(min_pu_wd);
  ------------------
  |  |   78|  7.13k|#define DUP_LSB_10(x) ((UWORD32)0xAAAAAAAA >> (32 - ((x) * 2)))
  ------------------
  863|       |
  864|       |                        /* Only if the current edge falls on 8 pixel grid set BS */
  865|  7.13k|                        if(0 == (start_pos_y & 1))
  ------------------
  |  Branch (865:28): [True: 7.13k, False: 0]
  ------------------
  866|  7.13k|                        {
  867|  7.13k|                            WORD32 shift;
  868|  7.13k|                            shift = start_pos_x * 2;
  869|       |                            /* shift += (((start_pos_y >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  870|       |                             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  871|       |                             *  and deblocking is done on 8x8 grid
  872|       |                             */
  873|  7.13k|                            if(6 != log2_ctb_size)
  ------------------
  |  Branch (873:32): [True: 373, False: 6.76k]
  ------------------
  874|    373|                                shift += ((start_pos_y & 2) << (log2_ctb_size - 2));
  875|  7.13k|                            pu4_horz_bs[start_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  876|  7.13k|                        }
  877|  7.13k|                    }
  878|  2.32M|                    else
  879|  2.32M|                    {
  880|  2.32M|                        u4_bs = ihevcd_pu_boundary_strength(ps_pu, ps_ngbr_pu);
  881|  2.32M|                        if(u4_bs)
  ------------------
  |  Branch (881:28): [True: 263k, False: 2.06M]
  ------------------
  882|   263k|                        {
  883|   263k|                            u4_bs = DUP_LSB_01(min_pu_wd);
  ------------------
  |  |   75|   263k|#define DUP_LSB_01(x) ((UWORD32)0x55555555 >> (32 - ((x) * 2)))
  ------------------
  884|       |
  885|       |                            /* Only if the current edge falls on 8 pixel grid set BS */
  886|   263k|                            if(0 == (start_pos_y & 1))
  ------------------
  |  Branch (886:32): [True: 250k, False: 12.6k]
  ------------------
  887|   250k|                            {
  888|   250k|                                WORD32 shift;
  889|   250k|                                shift = start_pos_x * 2;
  890|       |                                /* shift += (((start_pos_y >> 1) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 1));
  891|       |                                 *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  892|       |                                 *  and deblocking is done on 8x8 grid
  893|       |                                 */
  894|   250k|                                if(6 != log2_ctb_size)
  ------------------
  |  Branch (894:36): [True: 16.1k, False: 234k]
  ------------------
  895|  16.1k|                                    shift += ((start_pos_y & 2) << (log2_ctb_size - 2));
  896|   250k|                                pu4_horz_bs[start_pos_y >> (7 - log2_ctb_size)] |= (u4_bs << shift);
  897|   250k|                            }
  898|   263k|                        }
  899|  2.32M|                    }
  900|       |
  901|  2.33M|                    pu_wd -= min_pu_wd;
  902|  2.33M|                    start_pos_x += min_pu_wd;
  903|  2.33M|                }while(pu_wd > 0);
  ------------------
  |  Branch (903:24): [True: 71.0k, False: 2.26M]
  ------------------
  904|       |
  905|       |                /* Reinitialising since the values are updated in the previous loop */
  906|  2.26M|                pu_wd = ps_pu->b4_wd + 1;
  907|  2.26M|                start_pos_x = ps_pu->b4_pos_x;
  908|  2.26M|            }
  909|  2.28M|        }
  910|  2.28M|    }
  911|       |
  912|   153k|    {
  913|       |        /* If left neighbor is not available, then set BS for entire first column to zero */
  914|   153k|        UWORD32 ctb_addr;
  915|   153k|        WORD32 slice_idx, left_slice_idx = -1, top_slice_idx = -1;
  916|       |
  917|   153k|        if(!ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (917:12): [True: 146k, False: 6.86k]
  ------------------
  918|   146k|        {
  919|   146k|            if((0 == i1_loop_filter_across_tiles_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_tile_x) ||
  ------------------
  |  Branch (919:17): [True: 146k, False: 18.4E]
  |  Branch (919:66): [True: 23.4k, False: 123k]
  ------------------
  920|   146k|                            (0 == i1_loop_filter_across_slices_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_slice_x && 0 == ps_bs_ctxt->i4_ctb_slice_y) ||
  ------------------
  |  Branch (920:30): [True: 100k, False: 22.7k]
  |  Branch (920:80): [True: 132, False: 100k]
  |  Branch (920:115): [True: 54, False: 78]
  ------------------
  921|   146k|                            (0 == ps_bs_ctxt->i4_ctb_x))
  ------------------
  |  Branch (921:29): [True: 18.4E, False: 123k]
  ------------------
  922|  23.5k|            {
  923|  23.5k|                pu4_vert_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (923:35): [True: 3.27k, False: 20.2k]
  ------------------
  924|  23.5k|            }
  925|   146k|        }
  926|  6.86k|        else
  927|  6.86k|        {
  928|  6.86k|            if((0 == i1_loop_filter_across_tiles_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_tile_x))
  ------------------
  |  Branch (928:17): [True: 4.97k, False: 1.89k]
  |  Branch (928:66): [True: 563, False: 4.41k]
  ------------------
  929|    563|            {
  930|    563|                pu4_vert_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (930:35): [True: 23, False: 540]
  ------------------
  931|    563|            }
  932|  6.30k|            else
  933|  6.30k|            {
  934|       |
  935|  6.30k|                ctb_addr = ps_bs_ctxt->i4_ctb_x + (ps_bs_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  936|  6.30k|                slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  937|       |
  938|  6.30k|                if(ps_bs_ctxt->i4_ctb_x)
  ------------------
  |  Branch (938:20): [True: 5.12k, False: 1.18k]
  ------------------
  939|  5.12k|                {
  940|  5.12k|                    ctb_addr = (ps_bs_ctxt->i4_ctb_x - 1) + (ps_bs_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  941|  5.12k|                    left_slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  942|  5.12k|                }
  943|       |
  944|  6.30k|                if(!((ps_bs_ctxt->ps_slice_hdr->i1_dependent_slice_flag == 1) && (slice_idx == left_slice_idx)))
  ------------------
  |  Branch (944:22): [True: 0, False: 6.30k]
  |  Branch (944:82): [True: 0, False: 0]
  ------------------
  945|  5.43k|                {
  946|       |                    /* Removed reduntant checks */
  947|  5.43k|                    if((0 == i1_loop_filter_across_slices_enabled_flag && (
  ------------------
  |  Branch (947:25): [True: 3.86k, False: 1.57k]
  ------------------
  948|  3.86k|                                    (0 == ps_bs_ctxt->i4_ctb_slice_x && 0 == ps_bs_ctxt->i4_ctb_slice_y) ||
  ------------------
  |  Branch (948:38): [True: 25, False: 3.83k]
  |  Branch (948:73): [True: 10, False: 15]
  ------------------
  949|  5.40k|                                    ((0 == ps_bs_ctxt->i4_ctb_tile_x) && (slice_idx != left_slice_idx)))) || (0 == ps_bs_ctxt->i4_ctb_x))
  ------------------
  |  Branch (949:38): [True: 15, False: 3.83k]
  |  Branch (949:74): [True: 15, False: 0]
  |  Branch (949:110): [True: 286, False: 5.11k]
  ------------------
  950|    311|                    {
  951|    311|                        pu4_vert_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (951:43): [True: 305, False: 6]
  ------------------
  952|    311|                    }
  953|  5.43k|                }
  954|  6.30k|            }
  955|  6.86k|        }
  956|       |
  957|   153k|        ctb_addr = ps_bs_ctxt->i4_ctb_x + (ps_bs_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  958|   153k|        slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  959|   153k|        if(ps_bs_ctxt->i4_ctb_y)
  ------------------
  |  Branch (959:12): [True: 144k, False: 8.49k]
  ------------------
  960|   144k|        {
  961|   144k|            ctb_addr = (ps_bs_ctxt->i4_ctb_x) + ((ps_bs_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb);
  962|   144k|            top_slice_idx = ps_bs_ctxt->pu1_slice_idx[ctb_addr];
  963|   144k|        }
  964|       |        /* If top neighbor is not available, then set BS for entire first row to zero */
  965|       |        /* Removed reduntant checks */
  966|   153k|        if((0 == i1_loop_filter_across_tiles_enabled_flag && 0 == ps_bs_ctxt->i4_ctb_tile_y)
  ------------------
  |  Branch (966:13): [True: 151k, False: 1.87k]
  |  Branch (966:62): [True: 8.04k, False: 143k]
  ------------------
  967|   153k|                        || (0 == i1_loop_filter_across_slices_enabled_flag && ((slice_idx != top_slice_idx)))
  ------------------
  |  Branch (967:29): [True: 120k, False: 23.7k]
  |  Branch (967:79): [True: 65, False: 120k]
  ------------------
  968|   153k|                        || (0 == ps_bs_ctxt->i4_ctb_y))
  ------------------
  |  Branch (968:28): [True: 132, False: 144k]
  ------------------
  969|  8.24k|        {
  970|  8.24k|            pu4_horz_bs[0] &= (64 == ctb_size) ? 0 : ((UWORD32)0xFFFFFFFF) << (ctb_size / 2);
  ------------------
  |  Branch (970:31): [True: 5.40k, False: 2.84k]
  ------------------
  971|  8.24k|        }
  972|   153k|    }
  973|       |
  974|       |    /**
  975|       |     *  Set BS of bottom and right frame boundaries to zero if it is an incomplete CTB
  976|       |     *   (They might have set to  non zero values because of CBF of the current CTB)*/
  977|   153k|    {
  978|   153k|        WORD32 num_rows_remaining = (ps_sps->i2_pic_height_in_luma_samples - (ps_bs_ctxt->i4_ctb_y << log2_ctb_size)) >> 3;
  979|   153k|        WORD32 num_cols_remaining = (ps_sps->i2_pic_width_in_luma_samples - (ps_bs_ctxt->i4_ctb_x << log2_ctb_size)) >> 3;
  980|   153k|        if(num_rows_remaining < (ctb_size >> 3))
  ------------------
  |  Branch (980:12): [True: 4.74k, False: 148k]
  ------------------
  981|  4.74k|        {
  982|       |            /* WORD32 offset = (((num_rows_remaining >> 3) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 4));
  983|       |             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  984|       |             *  and deblocking is done on 8x8 grid
  985|       |             */
  986|  4.74k|            WORD32 offset;
  987|  4.74k|            offset = (num_rows_remaining >> (6 - log2_ctb_size)) << 2;
  988|  4.74k|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (988:16): [True: 732, False: 4.01k]
  ------------------
  989|    732|                offset += (num_rows_remaining & 1) << (log2_ctb_size - 4);
  990|       |
  991|  4.74k|            memset(((UWORD8 *)pu4_horz_bs) + offset, 0, 1 << (log2_ctb_size - 4));
  992|  4.74k|        }
  993|       |
  994|   153k|        if(num_cols_remaining < (ctb_size >> 3))
  ------------------
  |  Branch (994:12): [True: 21.4k, False: 131k]
  ------------------
  995|  21.4k|        {
  996|       |            /* WORD32 offset = (((num_cols_remaining >> 3) & (MAX_CTB_SIZE / ctb_size - 1)) << (log2_ctb_size - 4));
  997|       |             *  will reduce to the following assuming ctb size is one of 16, 32 and 64
  998|       |             *  and deblocking is done on 8x8 grid
  999|       |             */
 1000|       |
 1001|  21.4k|            WORD32 offset;
 1002|  21.4k|            offset = (num_cols_remaining >> (6 - log2_ctb_size)) << 2;
 1003|  21.4k|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (1003:16): [True: 20.4k, False: 982]
  ------------------
 1004|  20.4k|                offset += (num_cols_remaining & 1) << (log2_ctb_size - 4);
 1005|       |
 1006|  21.4k|            memset(((UWORD8 *)pu4_vert_bs) + offset, 0, 1 << (log2_ctb_size - 4));
 1007|  21.4k|        }
 1008|   153k|    }
 1009|   153k|    return 0;
 1010|   153k|}

ihevcd_cabac_init:
  137|  5.83k|{
  138|       |    /* Sanity checks */
  139|  5.83k|    ASSERT(ps_cabac != NULL);
  ------------------
  |  |   55|  5.83k|#define ASSERT(x) assert((x))
  ------------------
  140|  5.83k|    ASSERT(ps_bitstrm != NULL);
  ------------------
  |  |   55|  5.83k|#define ASSERT(x) assert((x))
  ------------------
  141|  5.83k|    ASSERT((qp >= 0) && (qp < 52));
  ------------------
  |  |   55|  5.83k|#define ASSERT(x) assert((x))
  ------------------
  142|  5.83k|    ASSERT((cabac_init_idc >= 0) && (cabac_init_idc < 3));
  ------------------
  |  |   55|  5.83k|#define ASSERT(x) assert((x))
  ------------------
  143|  5.83k|    UNUSED(qp);
  ------------------
  |  |   38|  5.83k|#define UNUSED(x) ((void)(x))
  ------------------
  144|  5.83k|    UNUSED(cabac_init_idc);
  ------------------
  |  |   38|  5.83k|#define UNUSED(x) ((void)(x))
  ------------------
  145|       |    /* CABAC engine uses 32 bit range instead of 9 bits as specified by
  146|       |     * the spec. This is done to reduce number of renormalizations
  147|       |     */
  148|       |    /* cabac engine initialization */
  149|  5.83k|#if FULLRANGE
  150|  5.83k|    ps_cabac->u4_range = (UWORD32)510 << RANGE_SHIFT;
  ------------------
  |  |   41|  5.83k|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  ------------------
  |  |  |  |   40|  5.83k|#define RANGE_NUMBITS 31
  |  |  ------------------
  ------------------
  151|  5.83k|    BITS_GET(ps_cabac->u4_ofst, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  150|  5.83k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|  5.83k|{                                                               \
  |  |  152|  5.83k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|  5.83k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|  5.83k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|  5.83k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|  5.83k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|  11.6k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 4.39k, False: 1.43k]
  |  |  ------------------
  |  |  156|  5.83k|    {                                                           \
  |  |  157|  4.39k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|  4.39k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 4.39k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|  4.39k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|  4.39k|    }                                                           \
  |  |  160|  5.83k|                                                                \
  |  |  161|  5.83k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|  11.6k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 4.39k, False: 1.43k]
  |  |  ------------------
  |  |  162|  5.83k|    {                                                           \
  |  |  163|  4.39k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|  4.39k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|  4.39k|        /* Getting the next word */                             \
  |  |  166|  4.39k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|  4.39k|                                                                \
  |  |  168|  4.39k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|  4.39k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|  4.39k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|  4.39k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|  4.39k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  4.39k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  4.39k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  4.39k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|  4.39k|    }                                                           \
  |  |  172|  5.83k|}
  ------------------
  152|  5.83k|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, (9 + RANGE_SHIFT));
  153|       |
  154|       |#else
  155|       |    ps_cabac->u4_range = (UWORD32)510;
  156|       |    BITS_GET(ps_cabac->u4_ofst, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  157|       |                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, 9);
  158|       |
  159|       |#endif
  160|       |
  161|       |    /* cabac context initialization based on init idc and slice qp */
  162|  5.83k|    memcpy(ps_cabac->au1_ctxt_models,
  163|  5.83k|           pu1_init_ctxt,
  164|  5.83k|           IHEVC_CAB_CTXT_END);
  165|  5.83k|    DEBUG_RANGE_OFST("init", ps_cabac->u4_range, ps_cabac->u4_ofst);
  166|       |
  167|       |    /*
  168|       |     * If the offset is greater than or equal to range, return fail.
  169|       |     */
  170|  5.83k|    if(ps_cabac->u4_ofst >= ps_cabac->u4_range)
  ------------------
  |  Branch (170:8): [True: 31, False: 5.80k]
  ------------------
  171|     31|    {
  172|     31|        return ((IHEVCD_ERROR_T)IHEVCD_FAIL);
  173|     31|    }
  174|       |
  175|  5.80k|    return ((IHEVCD_ERROR_T)IHEVCD_SUCCESS);
  176|  5.83k|}
ihevcd_cabac_reset:
  180|     94|{
  181|       |    /* Sanity checks */
  182|     94|    ASSERT(ps_cabac != NULL);
  ------------------
  |  |   55|     94|#define ASSERT(x) assert((x))
  ------------------
  183|     94|    ASSERT(ps_bitstrm != NULL);
  ------------------
  |  |   55|     94|#define ASSERT(x) assert((x))
  ------------------
  184|       |
  185|       |    /* CABAC engine uses 32 bit range instead of 9 bits as specified by
  186|       |     * the spec. This is done to reduce number of renormalizations
  187|       |     */
  188|       |    /* cabac engine initialization */
  189|     94|#if FULLRANGE
  190|     94|    ps_cabac->u4_range = (UWORD32)510 << RANGE_SHIFT;
  ------------------
  |  |   41|     94|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  ------------------
  |  |  |  |   40|     94|#define RANGE_NUMBITS 31
  |  |  ------------------
  ------------------
  191|     94|    BITS_GET(ps_cabac->u4_ofst, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  150|     94|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|     94|{                                                               \
  |  |  152|     94|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|     94|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|     94|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|     94|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|     94|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|    188|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 76, False: 18]
  |  |  ------------------
  |  |  156|     94|    {                                                           \
  |  |  157|     76|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|     76|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 76, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|     76|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|     76|    }                                                           \
  |  |  160|     94|                                                                \
  |  |  161|     94|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|    188|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 76, False: 18]
  |  |  ------------------
  |  |  162|     94|    {                                                           \
  |  |  163|     76|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|     76|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|     76|        /* Getting the next word */                             \
  |  |  166|     76|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|     76|                                                                \
  |  |  168|     76|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|     76|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|     76|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|     76|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|     76|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|     76|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|     76|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|     76|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|     76|    }                                                           \
  |  |  172|     94|}
  ------------------
  192|     94|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, (9 + RANGE_SHIFT));
  193|       |
  194|       |#else
  195|       |    ps_cabac->u4_range = (UWORD32)510;
  196|       |    BITS_GET(ps_cabac->u4_ofst, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  197|       |                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, 9);
  198|       |
  199|       |#endif
  200|       |
  201|     94|    return ((IHEVCD_ERROR_T)IHEVCD_SUCCESS);
  202|     94|}
ihevcd_cabac_decode_bin:
  234|  22.4M|{
  235|  22.4M|    UWORD32 u4_range = ps_cabac->u4_range;
  236|  22.4M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;
  237|  22.4M|    UWORD32 u4_rlps;
  238|  22.4M|    UWORD32 u4_bin;
  239|  22.4M|    UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index];
  240|  22.4M|    WORD32 state_mps = *pu1_ctxt_model;
  241|  22.4M|#if FULLRANGE
  242|  22.4M|    WORD32 clz;
  243|  22.4M|#endif
  244|  22.4M|    UWORD32 u4_qnt_range;
  245|       |
  246|       |    /* Sanity checks */
  247|  22.4M|    ASSERT(u4_range >= 256);
  ------------------
  |  |   55|  22.4M|#define ASSERT(x) assert((x))
  ------------------
  248|  22.4M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));
  ------------------
  |  |   55|  22.4M|#define ASSERT(x) assert((x))
  ------------------
  249|  22.4M|    ASSERT(state_mps < 128);
  ------------------
  |  |   55|  22.4M|#define ASSERT(x) assert((x))
  ------------------
  250|  22.4M|#if FULLRANGE
  251|  22.4M|    clz = CLZ(u4_range);
  252|  22.4M|    clz -= (32 - RANGE_NUMBITS);
  ------------------
  |  |   40|  22.4M|#define RANGE_NUMBITS 31
  ------------------
  253|  22.4M|    u4_qnt_range = u4_range << clz;
  254|  22.4M|    u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3;
  ------------------
  |  |   41|  22.4M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  ------------------
  |  |  |  |   40|  22.4M|#define RANGE_NUMBITS 31
  |  |  ------------------
  ------------------
  255|       |#else
  256|       |    u4_qnt_range = (u4_range >> 6) & 0x3;
  257|       |#endif
  258|       |    /* Get the lps range from LUT based on quantized range and state */
  259|  22.4M|    u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range];
  260|  22.4M|#if FULLRANGE
  261|  22.4M|    u4_rlps = u4_rlps << (RANGE_SHIFT - clz);
  ------------------
  |  |   41|  22.4M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  ------------------
  |  |  |  |   40|  22.4M|#define RANGE_NUMBITS 31
  |  |  ------------------
  ------------------
  262|  22.4M|#endif
  263|  22.4M|    u4_range -= u4_rlps;
  264|       |
  265|  22.4M|    u4_bin = state_mps & 1;
  266|       |
  267|  22.4M|    if(u4_ofst >= u4_range)
  ------------------
  |  Branch (267:8): [True: 2.79M, False: 19.6M]
  ------------------
  268|  2.79M|    {
  269|  2.79M|        u4_bin = 1 - u4_bin;
  270|  2.79M|        u4_ofst -= u4_range;
  271|  2.79M|        u4_range = u4_rlps;
  272|  2.79M|    }
  273|       |
  274|  22.4M|    *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin];
  275|       |
  276|       |    /*****************************************************************/
  277|       |    /* Re-normalization; calculate bits generated based on range(R)  */
  278|       |    /*****************************************************************/
  279|  22.4M|    if(u4_range < (1 << 8))
  ------------------
  |  Branch (279:8): [True: 310k, False: 22.1M]
  ------------------
  280|   310k|    {
  281|   310k|        UWORD32 u4_bits;
  282|   310k|        WORD32 numbits;
  283|   310k|        numbits = CLZ(u4_range);
  284|   310k|        numbits -= (32 - RANGE_NUMBITS);
  ------------------
  |  |   40|   310k|#define RANGE_NUMBITS 31
  ------------------
  285|       |#if !FULLRANGE
  286|       |        numbits -= RANGE_SHIFT;
  287|       |#endif
  288|   310k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  150|   310k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|   310k|{                                                               \
  |  |  152|   310k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|   310k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|   310k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|   310k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|   310k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|   621k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 214k, False: 95.8k]
  |  |  ------------------
  |  |  156|   310k|    {                                                           \
  |  |  157|   214k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|   214k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 214k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|   214k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|   214k|    }                                                           \
  |  |  160|   310k|                                                                \
  |  |  161|   310k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|   621k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 224k, False: 86.5k]
  |  |  ------------------
  |  |  162|   310k|    {                                                           \
  |  |  163|   224k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|   224k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|   224k|        /* Getting the next word */                             \
  |  |  166|   224k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|   224k|                                                                \
  |  |  168|   224k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|   224k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|   224k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|   224k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|   224k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|   224k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|   224k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|   224k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|   224k|    }                                                           \
  |  |  172|   310k|}
  ------------------
  289|   310k|                 ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);
  290|       |
  291|   310k|        u4_ofst <<= numbits;
  292|   310k|        u4_ofst |= u4_bits;
  293|   310k|        u4_range <<= numbits;
  294|       |
  295|   310k|    }
  296|       |    /* Update the cabac context */
  297|  22.4M|    ps_cabac->u4_range = u4_range;
  298|  22.4M|    ps_cabac->u4_ofst = u4_ofst;
  299|  22.4M|    DEBUG_RANGE_OFST("bin", ps_cabac->u4_range, ps_cabac->u4_ofst);
  300|       |
  301|  22.4M|    return (u4_bin);
  302|       |
  303|       |
  304|  22.4M|}
ihevcd_cabac_decode_bypass_bin:
  326|   252k|{
  327|       |
  328|   252k|    UWORD32 u4_bin;
  329|   252k|    UWORD32 u4_range = ps_cabac->u4_range;
  330|   252k|    UWORD32 u4_ofst = ps_cabac->u4_ofst;
  331|   252k|    UWORD32 u4_bits;
  332|       |
  333|       |    /* Sanity checks */
  334|   252k|    ASSERT(u4_range >= 256);
  ------------------
  |  |   55|   252k|#define ASSERT(x) assert((x))
  ------------------
  335|       |
  336|   252k|    BIT_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  182|   252k|                          m_u4_cur_word,m_u4_nxt_word)          \
  |  |  183|   252k|{                                                               \
  |  |  184|   252k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  185|   252k|                             >> (WORD_SIZE_MINUS1);             \
  |  |  ------------------
  |  |  |  |   51|   252k|#define WORD_SIZE_MINUS1  (WORD_SIZE - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   252k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  186|   252k|    m_u4_bit_ofst++;                                            \
  |  |  187|   252k|                                                                \
  |  |  188|   252k|    if(m_u4_bit_ofst ==  WORD_SIZE)                             \
  |  |  ------------------
  |  |  |  |   42|   504k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (188:8): [True: 8.89k, False: 243k]
  |  |  ------------------
  |  |  189|   252k|    {                                                           \
  |  |  190|  8.89k|        UWORD32 pu4_word_tmp;                                   \
  |  |  191|  8.89k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  192|  8.89k|        /* Getting the next word */                             \
  |  |  193|  8.89k|        pu4_word_tmp = *m_pu4_buf++;                            \
  |  |  194|  8.89k|                                                                \
  |  |  195|  8.89k|        m_u4_bit_ofst = 0;                                      \
  |  |  196|  8.89k|        /* Swapping little endian to big endian conversion*/    \
  |  |  197|  8.89k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|  8.89k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|  8.89k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|  8.89k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|  8.89k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  198|  8.89k|    }                                                           \
  |  |  199|   252k|}
  ------------------
  337|   252k|            ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word);
  338|       |
  339|   252k|    u4_ofst <<= 1;
  340|   252k|    u4_ofst |= u4_bits;
  341|       |
  342|   252k|    u4_bin = 0;
  343|   252k|    if(u4_ofst >= u4_range)
  ------------------
  |  Branch (343:8): [True: 120k, False: 132k]
  ------------------
  344|   120k|    {
  345|   120k|        u4_bin = 1;
  346|   120k|        u4_ofst -= u4_range;
  347|   120k|    }
  348|       |
  349|       |    /* Update the cabac context */
  350|   252k|    ps_cabac->u4_ofst = u4_ofst;
  351|   252k|    DEBUG_RANGE_OFST("bypass end", ps_cabac->u4_range, ps_cabac->u4_ofst);
  352|   252k|    return (u4_bin);
  353|   252k|}
ihevcd_cabac_decode_terminate:
  376|   397k|{
  377|   397k|    UWORD32 u4_range = ps_cabac->u4_range;
  378|   397k|    UWORD32 u4_ofst = ps_cabac->u4_ofst;
  379|   397k|    UWORD32 u4_bin;
  380|   397k|#if FULLRANGE
  381|   397k|    WORD32 clz;
  382|   397k|#endif
  383|       |    /* Sanity checks */
  384|   397k|    ASSERT(u4_range >= 256);
  ------------------
  |  |   55|   397k|#define ASSERT(x) assert((x))
  ------------------
  385|   397k|#if FULLRANGE
  386|   397k|    clz = CLZ(u4_range);
  387|   397k|    clz -= (32 - RANGE_NUMBITS);
  ------------------
  |  |   40|   397k|#define RANGE_NUMBITS 31
  ------------------
  388|   397k|    u4_range -= 2 << (RANGE_SHIFT - clz);
  ------------------
  |  |   41|   397k|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  ------------------
  |  |  |  |   40|   397k|#define RANGE_NUMBITS 31
  |  |  ------------------
  ------------------
  389|       |#else
  390|       |    u4_range -= 2;
  391|       |#endif
  392|       |
  393|   397k|    if(u4_ofst >= u4_range)
  ------------------
  |  Branch (393:8): [True: 596, False: 397k]
  ------------------
  394|    596|    {
  395|    596|        u4_bin = 1;
  396|       |
  397|    596|#if FULLRANGE
  398|       |        /* In case of FULLRANGE extra bits read earlier need to pushed back to the bitstream */
  399|    596|        {
  400|    596|            WORD32 clz;
  401|    596|            WORD32 numbits;
  402|    596|            clz = CLZ(ps_cabac->u4_range);
  403|       |
  404|    596|            numbits = (32 - clz);
  405|    596|            numbits -= 9;
  406|       |
  407|    596|            ihevcd_bits_seek(ps_bitstrm, -numbits);
  408|    596|        }
  409|    596|#endif
  410|       |
  411|    596|    }
  412|   397k|    else
  413|   397k|    {
  414|   397k|        u4_bin = 0;
  415|   397k|    }
  416|   397k|    if(0 == u4_bin)
  ------------------
  |  Branch (416:8): [True: 397k, False: 596]
  ------------------
  417|   397k|    {
  418|   397k|        UWORD32 u4_bits;
  419|   397k|        WORD32 numbits;
  420|   397k|        numbits = CLZ(u4_range);
  421|   397k|        numbits -= (32 - RANGE_NUMBITS);
  ------------------
  |  |   40|   397k|#define RANGE_NUMBITS 31
  ------------------
  422|       |#if !FULLRANGE
  423|       |        numbits -= RANGE_SHIFT;
  424|       |#endif
  425|       |        /* Renormalize if required */
  426|   397k|        if(numbits)
  ------------------
  |  Branch (426:12): [True: 369k, False: 27.8k]
  ------------------
  427|   369k|        {
  428|   369k|            BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  150|   369k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|   369k|{                                                               \
  |  |  152|   369k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|   369k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|   369k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|   369k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|   369k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|   738k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 101k, False: 267k]
  |  |  ------------------
  |  |  156|   369k|    {                                                           \
  |  |  157|   101k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|   101k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 101k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|   101k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|   101k|    }                                                           \
  |  |  160|   369k|                                                                \
  |  |  161|   369k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|   738k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 113k, False: 255k]
  |  |  ------------------
  |  |  162|   369k|    {                                                           \
  |  |  163|   113k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|   113k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|   113k|        /* Getting the next word */                             \
  |  |  166|   113k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|   113k|                                                                \
  |  |  168|   113k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|   113k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|   113k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|   113k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|   113k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|   113k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|   113k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|   113k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|   113k|    }                                                           \
  |  |  172|   369k|}
  ------------------
  429|   369k|                     ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);
  430|       |
  431|   369k|            u4_ofst <<= numbits;
  432|   369k|            u4_ofst |= u4_bits;
  433|   369k|            u4_range <<= numbits;
  434|   369k|        }
  435|   397k|    }
  436|       |    /* bits to be inserted in the bitstream */
  437|   397k|    ps_cabac->u4_range = u4_range;
  438|   397k|    ps_cabac->u4_ofst = u4_ofst;
  439|   397k|    DEBUG_RANGE_OFST("term", ps_cabac->u4_range, ps_cabac->u4_ofst);
  440|       |
  441|   397k|    return (u4_bin);
  442|   397k|}
ihevcd_cabac_decode_bypass_bins:
  471|  3.31M|{
  472|  3.31M|    UWORD32 u4_bins;
  473|       |
  474|       |
  475|  3.31M|    UWORD32 u4_range = ps_cabac->u4_range;
  476|  3.31M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;
  477|  3.31M|    UWORD32 u4_bits;
  478|  3.31M|    ASSERT(u4_range >= 256);
  ------------------
  |  |   55|  3.31M|#define ASSERT(x) assert((x))
  ------------------
  479|  3.31M|    ASSERT(numbins > 0);
  ------------------
  |  |   55|  3.31M|#define ASSERT(x) assert((x))
  ------------------
  480|       |
  481|       |    /* Sanity checks */
  482|  3.31M|    ASSERT(numbins < 17);
  ------------------
  |  |   55|  3.31M|#define ASSERT(x) assert((x))
  ------------------
  483|       |
  484|  3.31M|    u4_bins = 0;
  485|       |
  486|  3.31M|    BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  150|  3.31M|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  151|  3.31M|{                                                               \
  |  |  152|  3.31M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  153|  3.31M|                             >> (WORD_SIZE - m_cnt);            \
  |  |  ------------------
  |  |  |  |   42|  3.31M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  154|  3.31M|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  155|  3.31M|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  ------------------
  |  |  |  |   42|  6.62M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (155:8): [True: 220k, False: 3.09M]
  |  |  ------------------
  |  |  156|  3.31M|    {                                                           \
  |  |  157|   220k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  ------------------
  |  |  |  |   57|   220k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 220k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  158|   220k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  159|   220k|    }                                                           \
  |  |  160|  3.31M|                                                                \
  |  |  161|  3.31M|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  ------------------
  |  |  |  |   42|  6.62M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (161:9): [True: 317k, False: 2.99M]
  |  |  ------------------
  |  |  162|  3.31M|    {                                                           \
  |  |  163|   317k|        UWORD32 pu4_word_tmp;                                   \
  |  |  164|   317k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  165|   317k|        /* Getting the next word */                             \
  |  |  166|   317k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  167|   317k|                                                                \
  |  |  168|   317k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  ------------------
  |  |  |  |   42|   317k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  169|   317k|        /* Swapping little endian to big endian conversion*/    \
  |  |  170|   317k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  ------------------
  |  |  |  |   63|   317k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|   317k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|   317k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|   317k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  171|   317k|    }                                                           \
  |  |  172|  3.31M|}
  ------------------
  487|  3.31M|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins);
  488|       |
  489|  3.31M|    do
  490|  10.2M|    {
  491|  10.2M|        UWORD32 u4_bit;
  492|  10.2M|        numbins--;
  493|  10.2M|        u4_bit = (u4_bits >> numbins) & 1;
  494|  10.2M|        u4_ofst <<= 1;
  495|  10.2M|        u4_ofst |= u4_bit;
  496|       |
  497|  10.2M|        u4_bins <<= 1;
  498|  10.2M|        if(u4_ofst >= u4_range)
  ------------------
  |  Branch (498:12): [True: 3.45M, False: 6.77M]
  ------------------
  499|  3.45M|        {
  500|  3.45M|            u4_bins += 1;
  501|  3.45M|            u4_ofst -= u4_range;
  502|  3.45M|        }
  503|  10.2M|    }while(numbins);
  ------------------
  |  Branch (503:12): [True: 6.91M, False: 3.31M]
  ------------------
  504|       |
  505|       |    /* Update the cabac context */
  506|  3.31M|    ps_cabac->u4_ofst = u4_ofst;
  507|  3.31M|    DEBUG_RANGE_OFST("bypass", ps_cabac->u4_range, ps_cabac->u4_ofst);
  508|  3.31M|    return (u4_bins);
  509|  3.31M|}
ihevcd_cabac_decode_bins_tunary:
  556|  7.45M|{
  557|  7.45M|    UWORD32 u4_sym;
  558|  7.45M|    WORD32 bin;
  559|       |
  560|       |    /* Sanity checks */
  561|  7.45M|    ASSERT(c_max > 0);
  ------------------
  |  |   55|  7.45M|#define ASSERT(x) assert((x))
  ------------------
  562|  7.45M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));
  ------------------
  |  |   55|  7.45M|#define ASSERT(x) assert((x))
  ------------------
  563|  7.45M|    ASSERT((ctxt_index + (c_max >> ctxt_shift)) < IHEVC_CAB_CTXT_END);
  ------------------
  |  |   55|  7.45M|#define ASSERT(x) assert((x))
  ------------------
  564|       |
  565|  7.45M|    u4_sym = 0;
  566|  7.45M|    do
  567|  19.1M|    {
  568|  19.1M|        WORD32 bin_index;
  569|  19.1M|        bin_index = ctxt_index + MIN((u4_sym >> ctxt_shift), (UWORD32)ctxt_inc_max);
  ------------------
  |  |   43|  19.1M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 19.1M, False: 43.0k]
  |  |  ------------------
  ------------------
  570|  76.6M|        IHEVCD_CABAC_DECODE_BIN(bin, ps_cabac, ps_bitstrm,  bin_index);
  ------------------
  |  |   59|  19.1M|#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index)       \
  |  |   60|  19.1M|{                                                                               \
  |  |   61|  19.1M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |   62|  19.1M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |   63|  19.1M|    UWORD32 u4_rlps;                                                            \
  |  |   64|  19.1M|    UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index];            \
  |  |   65|  19.1M|    WORD32 state_mps = *pu1_ctxt_model;                                         \
  |  |   66|  19.1M|    WORD32 clz;                                                                 \
  |  |   67|  19.1M|    UWORD32 u4_qnt_range;                                                       \
  |  |   68|  19.1M|                                                                                \
  |  |   69|  19.1M|    /* Sanity checks */                                                         \
  |  |   70|  19.1M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  19.1M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   71|  19.1M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  19.1M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   72|  19.1M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));             \
  |  |  ------------------
  |  |  |  |   55|  19.1M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   73|  19.1M|    ASSERT(state_mps < 128);                                                    \
  |  |  ------------------
  |  |  |  |   55|  19.1M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   74|  19.1M|    clz = CLZ(u4_range);                                                        \
  |  |   75|  19.1M|    clz -= (32 - RANGE_NUMBITS);                                                \
  |  |  ------------------
  |  |  |  |   40|  19.1M|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |   76|  19.1M|    u4_qnt_range = u4_range << clz;                                             \
  |  |   77|  19.1M|    u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3;                   \
  |  |  ------------------
  |  |  |  |   41|  19.1M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  19.1M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  19.1M|    /* Get the lps range from LUT based on quantized range and state */         \
  |  |   79|  19.1M|    u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range];              \
  |  |   80|  19.1M|    u4_rlps = u4_rlps << (RANGE_SHIFT - clz);                                   \
  |  |  ------------------
  |  |  |  |   41|  19.1M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  19.1M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  19.1M|    u4_range -= u4_rlps;                                                        \
  |  |   82|  19.1M|                                                                                \
  |  |   83|  19.1M|    u4_bin = state_mps & 1;                                                     \
  |  |   84|  19.1M|                                                                                \
  |  |   85|  19.1M|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (85:8): [True: 2.07M, False: 17.0M]
  |  |  ------------------
  |  |   86|  19.1M|    {                                                                           \
  |  |   87|  2.07M|        u4_bin = 1 - u4_bin;                                                    \
  |  |   88|  2.07M|        u4_ofst -= u4_range;                                                    \
  |  |   89|  2.07M|        u4_range = u4_rlps;                                                     \
  |  |   90|  2.07M|    }                                                                           \
  |  |   91|  19.1M|                                                                                \
  |  |   92|  19.1M|    *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin];         \
  |  |   93|  19.1M|                                                                                \
  |  |   94|  19.1M|    /*****************************************************************/         \
  |  |   95|  19.1M|    /* Re-normalization; calculate bits generated based on range(R)  */         \
  |  |   96|  19.1M|    /*****************************************************************/         \
  |  |   97|  19.1M|    if(u4_range < (1 << 8))                                                     \
  |  |  ------------------
  |  |  |  Branch (97:8): [True: 246k, False: 18.9M]
  |  |  ------------------
  |  |   98|  19.1M|    {                                                                           \
  |  |   99|   246k|        UWORD32 u4_bits;                                                        \
  |  |  100|   246k|        WORD32 numbits;                                                         \
  |  |  101|   246k|        numbits = CLZ(u4_range);                                                \
  |  |  102|   246k|        numbits -= (32 - RANGE_NUMBITS);                                        \
  |  |  ------------------
  |  |  |  |   40|   246k|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |  103|   246k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|   246k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|   246k|{                                                               \
  |  |  |  |  152|   246k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|   246k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   246k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|   246k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|   246k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   493k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 177k, False: 69.3k]
  |  |  |  |  ------------------
  |  |  |  |  156|   246k|    {                                                           \
  |  |  |  |  157|   177k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   177k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 177k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|   177k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|   177k|    }                                                           \
  |  |  |  |  160|   246k|                                                                \
  |  |  |  |  161|   246k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   493k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 185k, False: 61.0k]
  |  |  |  |  ------------------
  |  |  |  |  162|   246k|    {                                                           \
  |  |  |  |  163|   185k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|   185k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|   185k|        /* Getting the next word */                             \
  |  |  |  |  166|   185k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|   185k|                                                                \
  |  |  |  |  168|   185k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   185k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|   185k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|   185k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   185k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   185k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   185k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   185k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|   185k|    }                                                           \
  |  |  |  |  172|   246k|}
  |  |  ------------------
  |  |  104|   246k|                 ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);    \
  |  |  105|   246k|                                                                                \
  |  |  106|   246k|        u4_ofst <<= numbits;                                                    \
  |  |  107|   246k|        u4_ofst |= u4_bits;                                                     \
  |  |  108|   246k|        u4_range <<= numbits;                                                   \
  |  |  109|   246k|                                                                                \
  |  |  110|   246k|    }                                                                           \
  |  |  111|  19.1M|    /* Update the cabac context */                                              \
  |  |  112|  19.1M|    ps_cabac->u4_range = u4_range;                                              \
  |  |  113|  19.1M|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  114|  19.1M|                                                                                \
  |  |  115|  19.1M|}
  ------------------
  571|  76.6M|        u4_sym++;
  572|  76.6M|    }while(((WORD32)u4_sym < c_max) && bin);
  ------------------
  |  Branch (572:12): [True: 17.9M, False: 1.18M]
  |  Branch (572:40): [True: 11.7M, False: 6.27M]
  ------------------
  573|       |
  574|  7.45M|    u4_sym = u4_sym - 1 + bin;
  575|       |
  576|  7.45M|    return (u4_sym);
  577|  7.45M|}
ihevcd_cabac_decode_bypass_bins_tunary:
  606|  2.37M|{
  607|       |
  608|  2.37M|    UWORD32 u4_sym;
  609|  2.37M|    WORD32 bin;
  610|  2.37M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;
  611|  2.37M|    UWORD32 u4_range = ps_cabac->u4_range;
  612|  2.37M|    UWORD32 u4_bits;
  613|       |    /* Sanity checks */
  614|  2.37M|    ASSERT(c_max > 0);
  ------------------
  |  |   55|  2.37M|#define ASSERT(x) assert((x))
  ------------------
  615|  2.37M|    ASSERT(u4_range >= 256);
  ------------------
  |  |   55|  2.37M|#define ASSERT(x) assert((x))
  ------------------
  616|  2.37M|    u4_sym = 0;
  617|  2.37M|    BITS_NXT(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |   91|  2.37M|                 m_u4_cur_word, m_u4_nxt_word, m_cnt)       \
  |  |   92|  2.37M|{                                                           \
  |  |   93|  2.37M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)  >>        \
  |  |   94|  2.37M|                              (WORD_SIZE - m_cnt);          \
  |  |  ------------------
  |  |  |  |   42|  2.37M|#define WORD_SIZE         32
  |  |  ------------------
  |  |   95|  2.37M|                                                            \
  |  |   96|  2.37M|    if(m_u4_bit_ofst > (WORD_SIZE - m_cnt))                 \
  |  |  ------------------
  |  |  |  |   42|  2.37M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (96:8): [True: 109k, False: 2.26M]
  |  |  ------------------
  |  |   97|  2.37M|    {                                                       \
  |  |   98|   109k|        m_u4_bits |= SHR(m_u4_nxt_word,                     \
  |  |  ------------------
  |  |  |  |   57|   109k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (57:19): [True: 109k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   99|   109k|                   (WORD_SIZE + WORD_SIZE - m_cnt           \
  |  |  100|   109k|                          - m_u4_bit_ofst));                \
  |  |  101|   109k|    }                                                       \
  |  |  102|  2.37M|}
  ------------------
  618|  2.37M|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, (UWORD32)c_max);
  619|  2.37M|    u4_bits <<= (32 - c_max);
  620|  2.37M|    do
  621|  3.43M|    {
  622|  3.43M|        u4_ofst <<= 1;
  623|  3.43M|        u4_ofst |= (u4_bits >> 31);
  624|  3.43M|        u4_bits <<= 1;
  625|       |
  626|  3.43M|        bin = 0;
  627|  3.43M|        if(u4_ofst >= u4_range)
  ------------------
  |  Branch (627:12): [True: 1.46M, False: 1.97M]
  ------------------
  628|  1.46M|        {
  629|  1.46M|            bin = 1;
  630|  1.46M|            u4_ofst -= u4_range;
  631|  1.46M|        }
  632|  3.43M|        u4_sym++;
  633|  3.43M|    }while(((WORD32)u4_sym < c_max) && bin);
  ------------------
  |  Branch (633:12): [True: 2.65M, False: 782k]
  |  Branch (633:40): [True: 1.06M, False: 1.58M]
  ------------------
  634|  2.37M|    BITS_FLUSH(ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,
  ------------------
  |  |  127|  2.37M|                    m_u4_nxt_word, m_cnt)                   \
  |  |  128|  2.37M|{                                                           \
  |  |  129|  2.37M|    UWORD32 temp;                                           \
  |  |  130|  2.37M|                                                            \
  |  |  131|  2.37M|    m_u4_bit_ofst += m_cnt;                                 \
  |  |  132|  2.37M|    if( m_u4_bit_ofst >=   WORD_SIZE )                      \
  |  |  ------------------
  |  |  |  |   42|  4.74M|#define WORD_SIZE         32
  |  |  ------------------
  |  |  |  Branch (132:9): [True: 106k, False: 2.26M]
  |  |  ------------------
  |  |  133|  2.37M|    {                                                       \
  |  |  134|   106k|        m_u4_cur_word  = m_u4_nxt_word;                     \
  |  |  135|   106k|        /* Getting the next word */                         \
  |  |  136|   106k|        temp = *(m_pu4_buf++);                              \
  |  |  137|   106k|                                                            \
  |  |  138|   106k|        m_u4_bit_ofst -= WORD_SIZE;                         \
  |  |  ------------------
  |  |  |  |   42|   106k|#define WORD_SIZE         32
  |  |  ------------------
  |  |  139|   106k|        /* Swapping little endian to big endian conversion*/\
  |  |  140|   106k|        m_u4_nxt_word = ITT_BIG_ENDIAN(temp);                   \
  |  |  ------------------
  |  |  |  |   63|   106k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |   64|   106k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |   65|   106k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |   66|   106k|                            ((UWORD32)x >> 24);
  |  |  ------------------
  |  |  141|   106k|    }                                                       \
  |  |  142|  2.37M|}
  ------------------
  635|  2.37M|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, u4_sym);
  636|       |
  637|  2.37M|    u4_sym = u4_sym - 1 + bin;
  638|       |    /* Update the cabac context */
  639|  2.37M|    ps_cabac->u4_ofst = u4_ofst;
  640|       |
  641|  2.37M|    return (u4_sym);
  642|  2.37M|}
ihevcd_cabac_decode_bypass_bins_egk:
  669|  62.2k|{
  670|       |
  671|  62.2k|    UWORD32 u4_sym;
  672|  62.2k|    WORD32 numones;
  673|  62.2k|    WORD32 bin;
  674|       |
  675|       |    /* Sanity checks */
  676|  62.2k|    ASSERT((k >= 0));
  ------------------
  |  |   55|  62.2k|#define ASSERT(x) assert((x))
  ------------------
  677|       |
  678|  62.2k|    numones = k;
  679|  62.2k|    bin = 1;
  680|  62.2k|    u4_sym = 0;
  681|   167k|    while(bin && (numones <= 16))
  ------------------
  |  Branch (681:11): [True: 105k, False: 62.2k]
  |  Branch (681:18): [True: 105k, False: 13]
  ------------------
  682|   105k|    {
  683|   211k|        IHEVCD_CABAC_DECODE_BYPASS_BIN(bin, ps_cabac, ps_bitstrm);
  ------------------
  |  |  122|   105k|#define IHEVCD_CABAC_DECODE_BYPASS_BIN(u4_bin, ps_cabac, ps_bitstrm)            \
  |  |  123|   105k|{                                                                               \
  |  |  124|   105k|                                                                                \
  |  |  125|   105k|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  126|   105k|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  127|   105k|    UWORD32 u4_bits;                                                            \
  |  |  128|   105k|                                                                                \
  |  |  129|   105k|    /* Sanity checks */                                                         \
  |  |  130|   105k|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|   105k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  131|   105k|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|   105k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  132|   105k|                                                                                \
  |  |  133|   105k|    BIT_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,              \
  |  |  ------------------
  |  |  |  |  182|   105k|                          m_u4_cur_word,m_u4_nxt_word)          \
  |  |  |  |  183|   105k|{                                                               \
  |  |  |  |  184|   105k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  185|   105k|                             >> (WORD_SIZE_MINUS1);             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|   105k|#define WORD_SIZE_MINUS1  (WORD_SIZE - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   42|   105k|#define WORD_SIZE         32
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|   105k|    m_u4_bit_ofst++;                                            \
  |  |  |  |  187|   105k|                                                                \
  |  |  |  |  188|   105k|    if(m_u4_bit_ofst ==  WORD_SIZE)                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   211k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (188:8): [True: 3.52k, False: 102k]
  |  |  |  |  ------------------
  |  |  |  |  189|   105k|    {                                                           \
  |  |  |  |  190|  3.52k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  191|  3.52k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  192|  3.52k|        /* Getting the next word */                             \
  |  |  |  |  193|  3.52k|        pu4_word_tmp = *m_pu4_buf++;                            \
  |  |  |  |  194|  3.52k|                                                                \
  |  |  |  |  195|  3.52k|        m_u4_bit_ofst = 0;                                      \
  |  |  |  |  196|  3.52k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  197|  3.52k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  3.52k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|  3.52k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|  3.52k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|  3.52k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  198|  3.52k|    }                                                           \
  |  |  |  |  199|   105k|}
  |  |  ------------------
  |  |  134|   105k|            ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word);                  \
  |  |  135|   105k|                                                                                \
  |  |  136|   105k|    u4_ofst <<= 1;                                                              \
  |  |  137|   105k|    u4_ofst |= u4_bits;                                                         \
  |  |  138|   105k|                                                                                \
  |  |  139|   105k|    u4_bin = 0;                                                                 \
  |  |  140|   105k|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (140:8): [True: 43.2k, False: 62.2k]
  |  |  ------------------
  |  |  141|   105k|    {                                                                           \
  |  |  142|  43.2k|        u4_bin = 1;                                                             \
  |  |  143|  43.2k|        u4_ofst -= u4_range;                                                    \
  |  |  144|  43.2k|    }                                                                           \
  |  |  145|   105k|                                                                                \
  |  |  146|   105k|    /* Update the cabac context */                                              \
  |  |  147|   105k|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  148|   105k|}
  ------------------
  684|   211k|        u4_sym += bin << numones++;
  685|   211k|    }
  686|       |
  687|  62.2k|    numones -= 1;
  688|       |
  689|  62.2k|    if(numones)
  ------------------
  |  Branch (689:8): [True: 56.7k, False: 5.55k]
  ------------------
  690|  56.7k|    {
  691|  56.7k|        UWORD32 u4_suffix;
  692|       |
  693|   226k|        IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_suffix, ps_cabac, ps_bitstrm, numones);
  ------------------
  |  |  156|  56.7k|#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \
  |  |  157|  56.7k|{                                                                               \
  |  |  158|  56.7k|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  159|  56.7k|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  160|  56.7k|    UWORD32 u4_bits;                                                            \
  |  |  161|  56.7k|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  56.7k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  162|  56.7k|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  56.7k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  163|  56.7k|    ASSERT(numbins > 0);                                                        \
  |  |  ------------------
  |  |  |  |   55|  56.7k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  164|  56.7k|    {                                                                           \
  |  |  165|  56.7k|        WORD32 numbins_tmp = numbins;                                           \
  |  |  166|  56.7k|        /* Sanity checks */                                                     \
  |  |  167|  56.7k|        ASSERT(numbins < 17);                                                   \
  |  |  ------------------
  |  |  |  |   55|  56.7k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  168|  56.7k|                                                                                \
  |  |  169|  56.7k|        u4_bins = 0;                                                            \
  |  |  170|  56.7k|                                                                                \
  |  |  171|  56.7k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|  56.7k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|  56.7k|{                                                               \
  |  |  |  |  152|  56.7k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|  56.7k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  56.7k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|  56.7k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|  56.7k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   113k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 1.27k, False: 55.4k]
  |  |  |  |  ------------------
  |  |  |  |  156|  56.7k|    {                                                           \
  |  |  |  |  157|  1.27k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.27k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 1.27k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|  1.27k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|  1.27k|    }                                                           \
  |  |  |  |  160|  56.7k|                                                                \
  |  |  |  |  161|  56.7k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   113k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 3.02k, False: 53.7k]
  |  |  |  |  ------------------
  |  |  |  |  162|  56.7k|    {                                                           \
  |  |  |  |  163|  3.02k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|  3.02k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|  3.02k|        /* Getting the next word */                             \
  |  |  |  |  166|  3.02k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|  3.02k|                                                                \
  |  |  |  |  168|  3.02k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  3.02k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|  3.02k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|  3.02k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  3.02k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|  3.02k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|  3.02k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|  3.02k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|  3.02k|    }                                                           \
  |  |  |  |  172|  56.7k|}
  |  |  ------------------
  |  |  172|  56.7k|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins); \
  |  |  173|  56.7k|        do                                                                      \
  |  |  174|  99.5k|        {                                                                       \
  |  |  175|  99.5k|            UWORD32 u4_bit;                                                     \
  |  |  176|  99.5k|            numbins_tmp--;                                                      \
  |  |  177|  99.5k|            u4_bit = (u4_bits >> numbins_tmp) & 1;                              \
  |  |  178|  99.5k|            u4_ofst <<= 1;                                                      \
  |  |  179|  99.5k|            u4_ofst |= u4_bit;                                                  \
  |  |  180|  99.5k|                                                                                \
  |  |  181|  99.5k|            u4_bins <<= 1;                                                      \
  |  |  182|  99.5k|            if(u4_ofst >= u4_range)                                             \
  |  |  ------------------
  |  |  |  Branch (182:16): [True: 48.0k, False: 51.5k]
  |  |  ------------------
  |  |  183|  99.5k|            {                                                                   \
  |  |  184|  48.0k|                u4_bins += 1;                                                   \
  |  |  185|  48.0k|                u4_ofst -= u4_range;                                            \
  |  |  186|  48.0k|            }                                                                   \
  |  |  187|  99.5k|        }while(numbins_tmp);                                                    \
  |  |  ------------------
  |  |  |  Branch (187:16): [True: 42.8k, False: 56.7k]
  |  |  ------------------
  |  |  188|  56.7k|                                                                                \
  |  |  189|  56.7k|        /* Update the cabac context */                                          \
  |  |  190|  56.7k|        ps_cabac->u4_ofst = u4_ofst;                                            \
  |  |  191|  56.7k|    }                                                                           \
  |  |  192|  56.7k|}
  ------------------
  694|   226k|        u4_sym += u4_suffix;
  695|   226k|    }
  696|  62.2k|    return (u4_sym);
  697|  62.2k|}

ihevcd_deblk_ctb:
  100|  6.24M|{
  101|  6.24M|    WORD32 ctb_size;
  102|  6.24M|    WORD32 log2_ctb_size;
  103|  6.24M|    UWORD32 u4_bs;
  104|  6.24M|    WORD32 bs_tz; /*Leading zeros in boundary strength*/
  105|  6.24M|    WORD32 qp_p, qp_q;
  106|       |
  107|  6.24M|    WORD32 filter_p, filter_q;
  108|       |
  109|  6.24M|    UWORD8 *pu1_src;
  110|  6.24M|    WORD32 qp_strd;
  111|  6.24M|    UWORD32 *pu4_vert_bs, *pu4_horz_bs;
  112|  6.24M|    UWORD32 *pu4_ctb_vert_bs, *pu4_ctb_horz_bs;
  113|  6.24M|    WORD32 bs_strd;
  114|  6.24M|    WORD32 src_strd;
  115|  6.24M|    UWORD8 *pu1_qp;
  116|  6.24M|    UWORD16 *pu2_ctb_no_loop_filter_flag;
  117|  6.24M|    UWORD16 au2_ctb_no_loop_filter_flag[9];
  118|       |
  119|  6.24M|    WORD32 col, row;
  120|       |
  121|       |    /* Flag to indicate if QP is constant in CTB
  122|       |     * 0 - top_left, 1 - top, 2 - left, 3 - current */
  123|  6.24M|    UWORD32 u4_qp_const_in_ctb[4] = { 0, 0, 0, 0 };
  124|  6.24M|    WORD32 ctb_indx;
  125|  6.24M|    WORD32  chroma_yuv420sp_vu = ps_deblk->is_chroma_yuv420sp_vu;
  126|  6.24M|    sps_t *ps_sps;
  127|  6.24M|    pps_t *ps_pps;
  128|  6.24M|    codec_t *ps_codec;
  129|  6.24M|    slice_header_t *ps_slice_hdr;
  130|       |
  131|  6.24M|    PROFILE_DISABLE_DEBLK();
  ------------------
  |  |   57|  6.24M|#define PROFILE_DISABLE_DEBLK() ;
  ------------------
  132|       |
  133|  6.24M|    ps_sps = ps_deblk->ps_sps;
  134|  6.24M|    ps_pps = ps_deblk->ps_pps;
  135|  6.24M|    ps_codec = ps_deblk->ps_codec;
  136|  6.24M|    ps_slice_hdr = ps_deblk->ps_slice_hdr;
  137|       |
  138|  6.24M|    log2_ctb_size = ps_sps->i1_log2_ctb_size;
  139|  6.24M|    ctb_size = (1 << ps_sps->i1_log2_ctb_size);
  140|       |
  141|       |    /* strides are in units of number of bytes */
  142|       |    /* ctb_size * ctb_size / 8 / 16 is the number of bytes needed per CTB */
  143|  6.24M|    bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) << (2 * log2_ctb_size - 7);
  144|       |
  145|  6.24M|    pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_deblk->s_bs_ctxt.pu4_pic_vert_bs +
  146|  6.24M|                    (ps_deblk->i4_ctb_x << (2 * log2_ctb_size - 7)) +
  147|  6.24M|                    ps_deblk->i4_ctb_y * bs_strd);
  148|  6.24M|    pu4_ctb_vert_bs = pu4_vert_bs;
  149|       |
  150|  6.24M|    pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_deblk->s_bs_ctxt.pu4_pic_horz_bs +
  151|  6.24M|                    (ps_deblk->i4_ctb_x << (2 * log2_ctb_size - 7)) +
  152|  6.24M|                    ps_deblk->i4_ctb_y * bs_strd);
  153|  6.24M|    pu4_ctb_horz_bs = pu4_horz_bs;
  154|       |
  155|  6.24M|    qp_strd = ps_sps->i2_pic_wd_in_ctb << (log2_ctb_size - 3);
  156|  6.24M|    pu1_qp = ps_deblk->s_bs_ctxt.pu1_pic_qp + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * qp_strd) << (log2_ctb_size - 3));
  157|       |
  158|  6.24M|    pu2_ctb_no_loop_filter_flag = ps_deblk->au2_ctb_no_loop_filter_flag;
  159|       |
  160|  6.24M|    ctb_indx = ps_deblk->i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_deblk->i4_ctb_y;
  161|  6.24M|    if(i4_is_last_ctb_y)
  ------------------
  |  Branch (161:8): [True: 8.64k, False: 6.23M]
  ------------------
  162|  8.64k|    {
  163|  8.64k|        pu4_vert_bs = (UWORD32 *)((UWORD8 *)pu4_vert_bs + bs_strd);
  164|  8.64k|        pu4_ctb_vert_bs = pu4_vert_bs;
  165|       |        /* ctb_size/8 is the number of edges per CTB
  166|       |         * ctb_size/4 is the number of BS values needed per edge
  167|       |         * divided by 8 for the number of bytes
  168|       |         * 2 is the number of bits needed for each BS value */
  169|  8.64k|        memset(pu4_vert_bs, 0, 1 << (2 * log2_ctb_size - 7));
  170|       |
  171|  8.64k|        pu1_qp += (qp_strd << (log2_ctb_size - 3));
  172|  8.64k|        pu2_ctb_no_loop_filter_flag += (ctb_size >> 3);
  173|  8.64k|        ctb_indx += ps_sps->i2_pic_wd_in_ctb;
  174|  8.64k|    }
  175|       |
  176|  6.24M|    if(i4_is_last_ctb_x)
  ------------------
  |  Branch (176:8): [True: 10.1k, False: 6.23M]
  ------------------
  177|  10.1k|    {
  178|  10.1k|        pu4_horz_bs = (UWORD32 *)((UWORD8 *)pu4_horz_bs + (1 << (2 * log2_ctb_size - 7)));
  179|  10.1k|        pu4_ctb_horz_bs = pu4_horz_bs;
  180|  10.1k|        memset(pu4_horz_bs, 0, 1 << (2 * log2_ctb_size - 7));
  181|       |
  182|  10.1k|        pu1_qp += (ctb_size >> 3);
  183|       |
  184|  95.0k|        for(row = 0; row < (ctb_size >> 3) + 1; row++)
  ------------------
  |  Branch (184:22): [True: 84.9k, False: 10.1k]
  ------------------
  185|  84.9k|            au2_ctb_no_loop_filter_flag[row] = ps_deblk->au2_ctb_no_loop_filter_flag[row] >> (ctb_size >> 3);
  186|  10.1k|        pu2_ctb_no_loop_filter_flag = au2_ctb_no_loop_filter_flag;
  187|  10.1k|        ctb_indx += 1;
  188|  10.1k|    }
  189|       |
  190|  6.24M|    u4_qp_const_in_ctb[3] = ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx) >> 3] & (1 << (ctb_indx & 7));
  191|       |
  192|  6.24M|    if(ps_deblk->i4_ctb_x || i4_is_last_ctb_x)
  ------------------
  |  Branch (192:8): [True: 6.11M, False: 128k]
  |  Branch (192:30): [True: 628, False: 127k]
  ------------------
  193|  6.11M|    {
  194|  6.11M|        u4_qp_const_in_ctb[2] = ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx - 1) >> 3] & (1 << ((ctb_indx - 1) & 7));
  195|  6.11M|    }
  196|       |
  197|  6.24M|    if((ps_deblk->i4_ctb_x || i4_is_last_ctb_x) && (ps_deblk->i4_ctb_y || i4_is_last_ctb_y))
  ------------------
  |  Branch (197:9): [True: 6.11M, False: 128k]
  |  Branch (197:31): [True: 628, False: 127k]
  |  Branch (197:53): [True: 5.95M, False: 163k]
  |  Branch (197:75): [True: 435, False: 162k]
  ------------------
  198|  5.95M|    {
  199|  5.95M|        u4_qp_const_in_ctb[0] =
  200|  5.95M|                        ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx - ps_sps->i2_pic_wd_in_ctb - 1) >> 3] &
  201|  5.95M|                        (1 << ((ctb_indx - ps_sps->i2_pic_wd_in_ctb - 1) & 7));
  202|  5.95M|    }
  203|       |
  204|       |
  205|       |
  206|  6.24M|    if(ps_deblk->i4_ctb_y || i4_is_last_ctb_y)
  ------------------
  |  Branch (206:8): [True: 6.07M, False: 168k]
  |  Branch (206:30): [True: 526, False: 168k]
  ------------------
  207|  6.07M|    {
  208|  6.07M|        u4_qp_const_in_ctb[1] =
  209|  6.07M|                        ps_deblk->s_bs_ctxt.pu1_pic_qp_const_in_ctb[(ctb_indx - ps_sps->i2_pic_wd_in_ctb) >> 3] &
  210|  6.07M|                        (1 << ((ctb_indx - ps_sps->i2_pic_wd_in_ctb) & 7));
  211|  6.07M|    }
  212|       |
  213|  6.24M|    src_strd = ps_codec->i4_strd;
  214|       |
  215|       |    /* Luma Vertical Edge */
  216|       |
  217|  6.24M|    if(0 == i4_is_last_ctb_x)
  ------------------
  |  Branch (217:8): [True: 6.23M, False: 9.67k]
  ------------------
  218|  6.23M|    {
  219|       |        /* Top CTB's slice header */
  220|  6.23M|        slice_header_t *ps_slice_hdr_top;
  221|  6.23M|        {
  222|  6.23M|            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
  223|  6.23M|            if(i4_is_last_ctb_y)
  ------------------
  |  Branch (223:16): [True: 8.64k, False: 6.22M]
  ------------------
  224|  8.64k|                cur_ctb_indx += ps_sps->i2_pic_wd_in_ctb;
  225|  6.23M|            ps_slice_hdr_top = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - ps_sps->i2_pic_wd_in_ctb];
  226|  6.23M|        }
  227|       |
  228|  6.23M|        pu1_src = ps_deblk->pu1_cur_pic_luma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd) << (log2_ctb_size));
  229|  6.23M|        pu1_src += i4_is_last_ctb_y ? ps_deblk->ps_codec->i4_strd << log2_ctb_size : 0;
  ------------------
  |  Branch (229:20): [True: 8.64k, False: 6.22M]
  ------------------
  230|       |
  231|       |        /** Deblocking is done on a shifted CTB -
  232|       |         *  Vertical edge processing is done by shifting the CTB up by four pixels */
  233|  6.23M|        pu1_src -= 4 * src_strd;
  234|       |
  235|  25.8M|        for(col = 0; col < ctb_size / 8; col++)
  ------------------
  |  Branch (235:22): [True: 19.6M, False: 6.23M]
  ------------------
  236|  19.6M|        {
  237|  19.6M|            WORD32 shift = 0;
  238|       |
  239|       |            /*  downshift vert_bs by ctb_size/2 for each column
  240|       |             *  shift = (col & ((MAX_CTB_SIZE >> log2_ctb_size) - 1)) << (log2_ctb_size - 1);
  241|       |             *  which will reduce to the following assuming ctb size is one of 16, 32 and 64
  242|       |             *  and deblocking is done on 8x8 grid
  243|       |             */
  244|  19.6M|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (244:16): [True: 11.0M, False: 8.61M]
  ------------------
  245|  11.0M|                shift = (col & 1) << (log2_ctb_size - 1);
  246|       |
  247|       |            /* BS for the column - Last row is excluded and the top row is included*/
  248|  19.6M|            u4_bs = (pu4_vert_bs[0] >> shift) << 2;
  249|       |
  250|  19.6M|            if(ps_deblk->i4_ctb_y || i4_is_last_ctb_y)
  ------------------
  |  Branch (250:16): [True: 18.5M, False: 1.09M]
  |  Branch (250:38): [True: 1.06k, False: 1.09M]
  ------------------
  251|  18.5M|            {
  252|       |                /* Picking the last BS of the previous CTB corresponding to the same column */
  253|  18.5M|                UWORD32 *pu4_vert_bs_top = (UWORD32 *)((UWORD8 *)pu4_vert_bs - bs_strd);
  254|  18.5M|                UWORD32 u4_top_bs = (*pu4_vert_bs_top) >> (shift + (1 << (log2_ctb_size - 1)) - 2);
  255|  18.5M|                u4_bs |= u4_top_bs & 3;
  256|  18.5M|            }
  257|       |
  258|  77.9M|            for(row = 0; row < ctb_size / 4;)
  ------------------
  |  Branch (258:26): [True: 58.3M, False: 19.6M]
  ------------------
  259|  58.3M|            {
  260|  58.3M|                WORD8 i1_beta_offset_div2 = ps_slice_hdr->i1_beta_offset_div2;
  261|  58.3M|                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
  262|       |
  263|       |                /* Trailing zeros are computed and the corresponding rows are not processed */
  264|  58.3M|                bs_tz = CTZ(u4_bs) >> 1;
  265|  58.3M|                if(0 != bs_tz)
  ------------------
  |  Branch (265:20): [True: 23.0M, False: 35.2M]
  ------------------
  266|  23.0M|                {
  267|  23.0M|                    u4_bs = u4_bs >> (bs_tz << 1);
  268|  23.0M|                    if((row + bs_tz) >= (ctb_size / 4))
  ------------------
  |  Branch (268:24): [True: 16.8M, False: 6.18M]
  ------------------
  269|  16.8M|                        pu1_src += 4 * (ctb_size / 4 - row) * src_strd;
  270|  6.18M|                    else
  271|  6.18M|                        pu1_src += 4 * bs_tz  * src_strd;
  272|       |
  273|  23.0M|                    row += bs_tz;
  274|  23.0M|                    continue;
  275|  23.0M|                }
  276|       |
  277|  35.2M|                if(0 == row)
  ------------------
  |  Branch (277:20): [True: 2.85M, False: 32.4M]
  ------------------
  278|  2.85M|                {
  279|  2.85M|                    i1_beta_offset_div2 = ps_slice_hdr_top->i1_beta_offset_div2;
  280|  2.85M|                    i1_tc_offset_div2 = ps_slice_hdr_top->i1_tc_offset_div2;
  281|       |
  282|  2.85M|                    if(0 == col)
  ------------------
  |  Branch (282:24): [True: 651k, False: 2.20M]
  ------------------
  283|   651k|                    {
  284|   651k|                        qp_p = u4_qp_const_in_ctb[0] ?
  ------------------
  |  Branch (284:32): [True: 645k, False: 6.10k]
  ------------------
  285|   645k|                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
  286|   651k|                                        pu1_qp[-qp_strd - 1];
  287|   651k|                    }
  288|  2.20M|                    else
  289|  2.20M|                    {
  290|  2.20M|                        qp_p = u4_qp_const_in_ctb[1] ?
  ------------------
  |  Branch (290:32): [True: 2.18M, False: 17.3k]
  ------------------
  291|  2.18M|                                        pu1_qp[-ctb_size / 8 * qp_strd] :
  292|  2.20M|                                        pu1_qp[col - 1 - qp_strd];
  293|  2.20M|                    }
  294|       |
  295|  2.85M|                    qp_q = u4_qp_const_in_ctb[1] ?
  ------------------
  |  Branch (295:28): [True: 2.82M, False: 35.9k]
  ------------------
  296|  2.82M|                                    pu1_qp[-ctb_size / 8 * qp_strd] :
  297|  2.85M|                                    pu1_qp[col - qp_strd];
  298|  2.85M|                }
  299|  32.4M|                else
  300|  32.4M|                {
  301|  32.4M|                    if(0 == col)
  ------------------
  |  Branch (301:24): [True: 8.84M, False: 23.5M]
  ------------------
  302|  8.84M|                    {
  303|  8.84M|                        qp_p = u4_qp_const_in_ctb[2] ?
  ------------------
  |  Branch (303:32): [True: 8.74M, False: 99.6k]
  ------------------
  304|  8.74M|                                        pu1_qp[-ctb_size / 8] :
  305|  8.84M|                                        pu1_qp[((row - 1) >> 1) * qp_strd - 1];
  306|  8.84M|                    }
  307|  23.5M|                    else
  308|  23.5M|                    {
  309|  23.5M|                        qp_p = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (309:32): [True: 26.8M, False: 18.4E]
  ------------------
  310|  26.8M|                                        pu1_qp[0] :
  311|  18.4E|                                        pu1_qp[((row - 1) >> 1) * qp_strd + col - 1];
  312|  23.5M|                    }
  313|       |
  314|  32.4M|                    qp_q = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (314:28): [True: 33.8M, False: 18.4E]
  ------------------
  315|  33.8M|                                    pu1_qp[0] :
  316|  18.4E|                                    pu1_qp[((row - 1) >> 1) * qp_strd + col];
  317|  32.4M|                }
  318|       |
  319|  35.2M|                filter_p = (pu2_ctb_no_loop_filter_flag[(row + 1) >> 1] >> col) & 1;
  320|  35.2M|                filter_q = (pu2_ctb_no_loop_filter_flag[(row + 1) >> 1] >> col) & 2;
  321|       |                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
  322|  35.2M|                filter_p = !filter_p;
  323|  35.2M|                filter_q = !filter_q;
  324|       |
  325|  35.2M|                if(filter_p || filter_q)
  ------------------
  |  Branch (325:20): [True: 34.9M, False: 298k]
  |  Branch (325:32): [True: 40.9k, False: 257k]
  ------------------
  326|  36.0M|                {
  327|  36.0M|                    DUMP_DEBLK_LUMA_VERT(pu1_src, src_strd,
  328|  36.0M|                                         u4_bs & 3, qp_p, qp_q,
  329|  36.0M|                                         ps_slice_hdr->i1_beta_offset_div2,
  330|  36.0M|                                         ps_slice_hdr->i1_tc_offset_div2,
  331|  36.0M|                                         filter_p, filter_q);
  332|  36.0M|                    ps_codec->s_func_selector.ihevc_deblk_luma_vert_fptr(pu1_src, src_strd,
  333|  36.0M|                                                                         u4_bs & 3, qp_p, qp_q,
  334|  36.0M|                                                                         i1_beta_offset_div2,
  335|  36.0M|                                                                         i1_tc_offset_div2,
  336|  36.0M|                                                                         filter_p, filter_q);
  337|  36.0M|                }
  338|       |
  339|  35.2M|                pu1_src += 4 * src_strd;
  340|  35.2M|                u4_bs = u4_bs >> 2;
  341|  35.2M|                row++;
  342|  35.2M|            }
  343|       |
  344|  19.6M|            if((64 == ctb_size) ||
  ------------------
  |  Branch (344:16): [True: 8.62M, False: 11.0M]
  ------------------
  345|  19.6M|                            ((32 == ctb_size) && (col & 1)))
  ------------------
  |  Branch (345:30): [True: 1.58M, False: 9.45M]
  |  Branch (345:50): [True: 805k, False: 780k]
  ------------------
  346|  9.40M|            {
  347|  9.40M|                pu4_vert_bs++;
  348|  9.40M|            }
  349|  19.6M|            pu1_src -= (src_strd << log2_ctb_size);
  350|  19.6M|            pu1_src += 8;
  351|  19.6M|        }
  352|  6.23M|        pu4_vert_bs = pu4_ctb_vert_bs;
  353|  6.23M|    }
  354|       |
  355|       |
  356|       |    /* Luma Horizontal Edge */
  357|       |
  358|  6.24M|    if(0 == i4_is_last_ctb_y)
  ------------------
  |  Branch (358:8): [True: 6.22M, False: 14.0k]
  ------------------
  359|  6.22M|    {
  360|       |
  361|       |        /* Left CTB's slice header */
  362|  6.22M|        slice_header_t *ps_slice_hdr_left;
  363|  6.22M|        {
  364|  6.22M|            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
  365|  6.22M|            if(i4_is_last_ctb_x)
  ------------------
  |  Branch (365:16): [True: 10.1k, False: 6.21M]
  ------------------
  366|  10.1k|                cur_ctb_indx += 1;
  367|  6.22M|            ps_slice_hdr_left = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - 1];
  368|  6.22M|        }
  369|  6.22M|        pu1_src = ps_deblk->pu1_cur_pic_luma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd) << log2_ctb_size);
  370|  6.22M|        pu1_src += i4_is_last_ctb_x ? ctb_size : 0;
  ------------------
  |  Branch (370:20): [True: 10.1k, False: 6.21M]
  ------------------
  371|       |
  372|       |        /** Deblocking is done on a shifted CTB -
  373|       |         *  Horizontal edge processing is done by shifting the CTB left by four pixels */
  374|  6.22M|        pu1_src -= 4;
  375|  25.9M|        for(row = 0; row < ctb_size / 8; row++)
  ------------------
  |  Branch (375:22): [True: 19.7M, False: 6.22M]
  ------------------
  376|  19.7M|        {
  377|  19.7M|            WORD32 shift = 0;
  378|       |
  379|       |            /* downshift vert_bs by ctb_size/2 for each column
  380|       |             *  shift = (row & (MAX_CTB_SIZE / ctb_size - 1)) * ctb_size / 2;
  381|       |             *  which will reduce to the following assuming ctb size is one of 16, 32 and 64
  382|       |             *  and deblocking is done on 8x8 grid
  383|       |             */
  384|  19.7M|            if(6 != log2_ctb_size)
  ------------------
  |  Branch (384:16): [True: 11.0M, False: 8.68M]
  ------------------
  385|  11.0M|                shift = (row & 1) << (log2_ctb_size - 1);
  386|       |
  387|       |            /* BS for the row - Last column is excluded and the left column is included*/
  388|  19.7M|            u4_bs = (pu4_horz_bs[0] >> shift) << 2;
  389|       |
  390|  19.7M|            if(ps_deblk->i4_ctb_x || i4_is_last_ctb_x)
  ------------------
  |  Branch (390:16): [True: 19.1M, False: 583k]
  |  Branch (390:38): [True: 5.02k, False: 578k]
  ------------------
  391|  19.1M|            {
  392|       |                /** Picking the last BS of the previous CTB corresponding to the same row
  393|       |                * UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
  394|       |                */
  395|  19.1M|                UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (1 << (2 * log2_ctb_size - 7)));
  396|  19.1M|                UWORD32 u4_left_bs = (*pu4_horz_bs_left) >> (shift + (1 << (log2_ctb_size - 1)) - 2);
  397|  19.1M|                u4_bs |= u4_left_bs & 3;
  398|  19.1M|            }
  399|       |
  400|  78.9M|            for(col = 0; col < ctb_size / 4;)
  ------------------
  |  Branch (400:26): [True: 59.2M, False: 19.7M]
  ------------------
  401|  59.2M|            {
  402|  59.2M|                WORD8 i1_beta_offset_div2 = ps_slice_hdr->i1_beta_offset_div2;
  403|  59.2M|                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
  404|       |
  405|  59.2M|                bs_tz = CTZ(u4_bs) >> 1;
  406|  59.2M|                if(0 != bs_tz)
  ------------------
  |  Branch (406:20): [True: 22.8M, False: 36.3M]
  ------------------
  407|  22.8M|                {
  408|  22.8M|                    u4_bs = u4_bs >> (bs_tz << 1);
  409|       |
  410|  22.8M|                    if((col + bs_tz) >= (ctb_size / 4))
  ------------------
  |  Branch (410:24): [True: 16.7M, False: 6.09M]
  ------------------
  411|  16.7M|                        pu1_src += 4 * (ctb_size / 4 - col);
  412|  6.09M|                    else
  413|  6.09M|                        pu1_src += 4 * bs_tz;
  414|       |
  415|  22.8M|                    col += bs_tz;
  416|  22.8M|                    continue;
  417|  22.8M|                }
  418|       |
  419|  36.3M|                if(0 == col)
  ------------------
  |  Branch (419:20): [True: 3.04M, False: 33.3M]
  ------------------
  420|  3.04M|                {
  421|  3.04M|                    i1_beta_offset_div2 = ps_slice_hdr_left->i1_beta_offset_div2;
  422|  3.04M|                    i1_tc_offset_div2 = ps_slice_hdr_left->i1_tc_offset_div2;
  423|       |
  424|  3.04M|                    if(0 == row)
  ------------------
  |  Branch (424:24): [True: 645k, False: 2.40M]
  ------------------
  425|   645k|                    {
  426|   645k|                        qp_p = u4_qp_const_in_ctb[0] ?
  ------------------
  |  Branch (426:32): [True: 639k, False: 6.50k]
  ------------------
  427|   639k|                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
  428|   645k|                                        pu1_qp[-qp_strd - 1];
  429|   645k|                    }
  430|  2.40M|                    else
  431|  2.40M|                    {
  432|  2.40M|                        qp_p = u4_qp_const_in_ctb[2] ?
  ------------------
  |  Branch (432:32): [True: 2.38M, False: 18.8k]
  ------------------
  433|  2.38M|                                        pu1_qp[-ctb_size / 8] :
  434|  2.40M|                                        pu1_qp[(row - 1) * qp_strd - 1];
  435|  2.40M|                    }
  436|       |
  437|  3.04M|                    qp_q = u4_qp_const_in_ctb[2] ?
  ------------------
  |  Branch (437:28): [True: 3.00M, False: 40.0k]
  ------------------
  438|  3.00M|                                    pu1_qp[-ctb_size / 8] :
  439|  3.04M|                                    pu1_qp[row * qp_strd - 1];
  440|  3.04M|                }
  441|  33.3M|                else
  442|  33.3M|                {
  443|  33.3M|                    if(0 == row)
  ------------------
  |  Branch (443:24): [True: 8.42M, False: 24.9M]
  ------------------
  444|  8.42M|                    {
  445|  8.42M|                        qp_p = u4_qp_const_in_ctb[1] ?
  ------------------
  |  Branch (445:32): [True: 8.33M, False: 96.9k]
  ------------------
  446|  8.33M|                                        pu1_qp[-ctb_size / 8 * qp_strd] :
  447|  8.42M|                                        pu1_qp[((col - 1) >> 1) - qp_strd];
  448|  8.42M|                    }
  449|  24.9M|                    else
  450|  24.9M|                    {
  451|  24.9M|                        qp_p = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (451:32): [True: 28.0M, False: 18.4E]
  ------------------
  452|  28.0M|                                        pu1_qp[0] :
  453|  18.4E|                                        pu1_qp[((col - 1) >> 1) + (row - 1) * qp_strd];
  454|  24.9M|                    }
  455|       |
  456|  33.3M|                    qp_q = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (456:28): [True: 34.4M, False: 18.4E]
  ------------------
  457|  34.4M|                                    pu1_qp[0] :
  458|  18.4E|                                    pu1_qp[((col - 1) >> 1) + row * qp_strd];
  459|  33.3M|                }
  460|       |
  461|  36.3M|                filter_p = (pu2_ctb_no_loop_filter_flag[row] >> ((col + 1) >> 1)) & 1;
  462|  36.3M|                filter_q = (pu2_ctb_no_loop_filter_flag[row + 1] >> ((col + 1) >> 1)) & 1;
  463|       |                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
  464|  36.3M|                filter_p = !filter_p;
  465|  36.3M|                filter_q = !filter_q;
  466|       |
  467|  36.3M|                if(filter_p || filter_q)
  ------------------
  |  Branch (467:20): [True: 36.1M, False: 287k]
  |  Branch (467:32): [True: 50.6k, False: 237k]
  ------------------
  468|  36.8M|                {
  469|  36.8M|                    DUMP_DEBLK_LUMA_HORZ(pu1_src, src_strd,
  470|  36.8M|                                         u4_bs & 3, qp_p, qp_q,
  471|  36.8M|                                         ps_slice_hdr->i1_beta_offset_div2,
  472|  36.8M|                                         ps_slice_hdr->i1_tc_offset_div2,
  473|  36.8M|                                         filter_p, filter_q);
  474|  36.8M|                    ps_codec->s_func_selector.ihevc_deblk_luma_horz_fptr(pu1_src, src_strd,
  475|  36.8M|                                                                         u4_bs & 3, qp_p, qp_q,
  476|  36.8M|                                                                         i1_beta_offset_div2,
  477|  36.8M|                                                                         i1_tc_offset_div2, filter_p, filter_q);
  478|  36.8M|                }
  479|       |
  480|  36.3M|                pu1_src += 4;
  481|  36.3M|                u4_bs = u4_bs >> 2;
  482|  36.3M|                col++;
  483|  36.3M|            }
  484|       |
  485|  19.7M|            if((64 == ctb_size) ||
  ------------------
  |  Branch (485:16): [True: 8.68M, False: 11.0M]
  ------------------
  486|  19.7M|                            ((32 == ctb_size) && (row & 1)))
  ------------------
  |  Branch (486:30): [True: 1.60M, False: 9.44M]
  |  Branch (486:50): [True: 807k, False: 802k]
  ------------------
  487|  9.49M|            {
  488|  9.49M|                pu4_horz_bs++;
  489|  9.49M|            }
  490|  19.7M|            pu1_src -= ctb_size;
  491|  19.7M|            pu1_src += (src_strd << 3);
  492|  19.7M|        }
  493|  6.22M|        pu4_horz_bs = pu4_ctb_horz_bs;
  494|  6.22M|    }
  495|       |
  496|       |
  497|       |    /* Chroma Veritcal Edge */
  498|       |
  499|  6.24M|    if(0 == i4_is_last_ctb_x)
  ------------------
  |  Branch (499:8): [True: 6.22M, False: 13.5k]
  ------------------
  500|  6.22M|    {
  501|       |
  502|       |        /* Top CTB's slice header */
  503|  6.22M|        slice_header_t *ps_slice_hdr_top;
  504|  6.22M|        {
  505|  6.22M|            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
  506|  6.22M|            if(i4_is_last_ctb_y)
  ------------------
  |  Branch (506:16): [True: 8.64k, False: 6.21M]
  ------------------
  507|  8.64k|                cur_ctb_indx += ps_sps->i2_pic_wd_in_ctb;
  508|  6.22M|            ps_slice_hdr_top = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - ps_sps->i2_pic_wd_in_ctb];
  509|  6.22M|        }
  510|       |
  511|  6.22M|        pu1_src = ps_deblk->pu1_cur_pic_chroma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd / 2) << log2_ctb_size);
  512|  6.22M|        pu1_src += i4_is_last_ctb_y ? (ps_deblk->ps_codec->i4_strd / 2) << log2_ctb_size : 0;
  ------------------
  |  Branch (512:20): [True: 8.64k, False: 6.21M]
  ------------------
  513|       |
  514|       |        /** Deblocking is done on a shifted CTB -
  515|       |         *  Vertical edge processing is done by shifting the CTB up by four pixels */
  516|  6.22M|        pu1_src -= 4 * src_strd;
  517|       |
  518|  16.0M|        for(col = 0; col < ctb_size / 16; col++)
  ------------------
  |  Branch (518:22): [True: 9.87M, False: 6.22M]
  ------------------
  519|  9.87M|        {
  520|       |
  521|       |            /* BS for the column - Last row is excluded and the top row is included*/
  522|  9.87M|            u4_bs = pu4_vert_bs[0] << 2;
  523|       |
  524|  9.87M|            if(ps_deblk->i4_ctb_y || i4_is_last_ctb_y)
  ------------------
  |  Branch (524:16): [True: 9.32M, False: 548k]
  |  Branch (524:38): [True: 530, False: 547k]
  ------------------
  525|  9.32M|            {
  526|       |                /* Picking the last BS of the previous CTB corresponding to the same column */
  527|  9.32M|                UWORD32 *pu4_vert_bs_top = (UWORD32 *)((UWORD8 *)pu4_vert_bs - bs_strd);
  528|  9.32M|                UWORD32 u4_top_bs = (*pu4_vert_bs_top) >> ((1 << (log2_ctb_size - 1)) - 2);
  529|  9.32M|                u4_bs |= u4_top_bs & 3;
  530|  9.32M|            }
  531|       |
  532|       |            /* Every alternate boundary strength value is used for chroma */
  533|  9.87M|            u4_bs &= 0x22222222;
  534|       |
  535|  35.0M|            for(row = 0; row < ctb_size / 8;)
  ------------------
  |  Branch (535:26): [True: 25.2M, False: 9.87M]
  ------------------
  536|  25.2M|            {
  537|  25.2M|                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
  538|       |
  539|  25.2M|                bs_tz = CTZ(u4_bs) >> 2;
  540|  25.2M|                if(0 != bs_tz)
  ------------------
  |  Branch (540:20): [True: 10.5M, False: 14.6M]
  ------------------
  541|  10.5M|                {
  542|  10.5M|                    if((row + bs_tz) >= (ctb_size / 8))
  ------------------
  |  Branch (542:24): [True: 7.94M, False: 2.60M]
  ------------------
  543|  7.94M|                        pu1_src += 4 * (ctb_size / 8 - row) * src_strd;
  544|  2.60M|                    else
  545|  2.60M|                        pu1_src += 4 * bs_tz  * src_strd;
  546|  10.5M|                    row += bs_tz;
  547|  10.5M|                    u4_bs = u4_bs >> (bs_tz << 2);
  548|  10.5M|                    continue;
  549|  10.5M|                }
  550|       |
  551|  14.6M|                if(0 == row)
  ------------------
  |  Branch (551:20): [True: 1.90M, False: 12.7M]
  ------------------
  552|  1.90M|                {
  553|  1.90M|                    i1_tc_offset_div2 = ps_slice_hdr_top->i1_tc_offset_div2;
  554|       |
  555|  1.90M|                    if(0 == col)
  ------------------
  |  Branch (555:24): [True: 653k, False: 1.25M]
  ------------------
  556|   653k|                    {
  557|   653k|                        qp_p = u4_qp_const_in_ctb[0] ?
  ------------------
  |  Branch (557:32): [True: 647k, False: 5.26k]
  ------------------
  558|   647k|                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
  559|   653k|                                        pu1_qp[-qp_strd - 1];
  560|   653k|                    }
  561|  1.25M|                    else
  562|  1.25M|                    {
  563|  1.25M|                        qp_p = u4_qp_const_in_ctb[1] ?
  ------------------
  |  Branch (563:32): [True: 1.25M, False: 1.46k]
  ------------------
  564|  1.25M|                                        pu1_qp[-ctb_size / 8 * qp_strd] :
  565|  1.25M|                                        pu1_qp[2 * col - 1 - qp_strd];
  566|  1.25M|                    }
  567|       |
  568|  1.90M|                    qp_q = u4_qp_const_in_ctb[1] ?
  ------------------
  |  Branch (568:28): [True: 1.88M, False: 20.0k]
  ------------------
  569|  1.88M|                                    pu1_qp[-ctb_size / 8 * qp_strd] :
  570|  1.90M|                                    pu1_qp[2 * col - qp_strd];
  571|  1.90M|                }
  572|  12.7M|                else
  573|  12.7M|                {
  574|  12.7M|                    if(0 == col)
  ------------------
  |  Branch (574:24): [True: 4.41M, False: 8.35M]
  ------------------
  575|  4.41M|                    {
  576|  4.41M|                        qp_p = u4_qp_const_in_ctb[2] ?
  ------------------
  |  Branch (576:32): [True: 4.37M, False: 40.6k]
  ------------------
  577|  4.37M|                                        pu1_qp[-ctb_size / 8] :
  578|  4.41M|                                        pu1_qp[(row - 1) * qp_strd - 1];
  579|  4.41M|                    }
  580|  8.35M|                    else
  581|  8.35M|                    {
  582|  8.35M|                        qp_p = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (582:32): [True: 8.77M, False: 18.4E]
  ------------------
  583|  8.77M|                                        pu1_qp[0] :
  584|  18.4E|                                        pu1_qp[(row - 1) * qp_strd + 2 * col - 1];
  585|  8.35M|                    }
  586|       |
  587|  12.7M|                    qp_q = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (587:28): [True: 12.8M, False: 18.4E]
  ------------------
  588|  12.8M|                                    pu1_qp[0] :
  589|  18.4E|                                    pu1_qp[(row - 1) * qp_strd + 2 * col];
  590|  12.7M|                }
  591|       |
  592|  14.6M|                filter_p = (pu2_ctb_no_loop_filter_flag[row] >> (col << 1)) & 1;
  593|  14.6M|                filter_q = (pu2_ctb_no_loop_filter_flag[row] >> (col << 1)) & 2;
  594|       |                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
  595|  14.6M|                filter_p = !filter_p;
  596|  14.6M|                filter_q = !filter_q;
  597|       |
  598|  14.6M|                if(filter_p || filter_q)
  ------------------
  |  Branch (598:20): [True: 14.5M, False: 123k]
  |  Branch (598:32): [True: 17.7k, False: 105k]
  ------------------
  599|  14.6M|                {
  600|  14.6M|                    ASSERT(1 == ((u4_bs & 3) >> 1));
  ------------------
  |  |   55|  14.6M|#define ASSERT(x) assert((x))
  ------------------
  601|  14.6M|                    DUMP_DEBLK_CHROMA_VERT(pu1_src, src_strd,
  602|  14.6M|                                           u4_bs & 3, qp_p, qp_q,
  603|  14.6M|                                           ps_pps->i1_pic_cb_qp_offset,
  604|  14.6M|                                           ps_pps->i1_pic_cr_qp_offset,
  605|  14.6M|                                           ps_slice_hdr->i1_tc_offset_div2,
  606|  14.6M|                                           filter_p, filter_q);
  607|  14.6M|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (607:24): [True: 704k, False: 13.9M]
  ------------------
  608|   704k|                    {
  609|   704k|                        ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr(pu1_src,
  610|   704k|                                                                               src_strd,
  611|   704k|                                                                               qp_q,
  612|   704k|                                                                               qp_p,
  613|   704k|                                                                               ps_pps->i1_pic_cr_qp_offset,
  614|   704k|                                                                               ps_pps->i1_pic_cb_qp_offset,
  615|   704k|                                                                               i1_tc_offset_div2,
  616|   704k|                                                                               filter_q,
  617|   704k|                                                                               filter_p);
  618|   704k|                    }
  619|  13.9M|                    else
  620|  13.9M|                    {
  621|  13.9M|                        ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr(pu1_src,
  622|  13.9M|                                                                               src_strd,
  623|  13.9M|                                                                               qp_p,
  624|  13.9M|                                                                               qp_q,
  625|  13.9M|                                                                               ps_pps->i1_pic_cb_qp_offset,
  626|  13.9M|                                                                               ps_pps->i1_pic_cr_qp_offset,
  627|  13.9M|                                                                               i1_tc_offset_div2,
  628|  13.9M|                                                                               filter_p,
  629|  13.9M|                                                                               filter_q);
  630|  13.9M|                    }
  631|  14.6M|                }
  632|       |
  633|  14.6M|                pu1_src += 4 * src_strd;
  634|  14.6M|                u4_bs = u4_bs >> 4;
  635|  14.6M|                row++;
  636|  14.6M|            }
  637|       |
  638|  9.87M|            pu4_vert_bs += (64 == ctb_size) ? 2 : 1;
  ------------------
  |  Branch (638:28): [True: 4.32M, False: 5.54M]
  ------------------
  639|  9.87M|            pu1_src -= ((src_strd / 2) << log2_ctb_size);
  640|  9.87M|            pu1_src += 16;
  641|  9.87M|        }
  642|  6.22M|    }
  643|       |
  644|       |    /* Chroma Horizontal Edge */
  645|       |
  646|  6.23M|    if(0 == i4_is_last_ctb_y)
  ------------------
  |  Branch (646:8): [True: 6.22M, False: 15.4k]
  ------------------
  647|  6.22M|    {
  648|       |
  649|       |        /* Left CTB's slice header */
  650|  6.22M|        slice_header_t *ps_slice_hdr_left;
  651|  6.22M|        {
  652|  6.22M|            WORD32 cur_ctb_indx = ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
  653|  6.22M|            if(i4_is_last_ctb_x)
  ------------------
  |  Branch (653:16): [True: 10.1k, False: 6.21M]
  ------------------
  654|  10.1k|                cur_ctb_indx += 1;
  655|  6.22M|            ps_slice_hdr_left = ps_codec->ps_slice_hdr_base + ps_deblk->pu1_slice_idx[cur_ctb_indx - 1];
  656|  6.22M|        }
  657|       |
  658|  6.22M|        pu1_src = ps_deblk->pu1_cur_pic_chroma + ((ps_deblk->i4_ctb_x + ps_deblk->i4_ctb_y * ps_deblk->ps_codec->i4_strd / 2) << log2_ctb_size);
  659|  6.22M|        pu1_src += i4_is_last_ctb_x ? ctb_size : 0;
  ------------------
  |  Branch (659:20): [True: 10.1k, False: 6.21M]
  ------------------
  660|       |
  661|       |        /** Deblocking is done on a shifted CTB -
  662|       |         * Vertical edge processing is done by shifting the CTB up by four pixels (8 here beacuse UV are interleaved) */
  663|  6.22M|        pu1_src -= 8;
  664|  16.1M|        for(row = 0; row < ctb_size / 16; row++)
  ------------------
  |  Branch (664:22): [True: 9.88M, False: 6.22M]
  ------------------
  665|  9.88M|        {
  666|       |            /* BS for the row - Last column is excluded and the left column is included*/
  667|  9.88M|            u4_bs = pu4_horz_bs[0] << 2;
  668|       |
  669|  9.88M|            if(ps_deblk->i4_ctb_x || i4_is_last_ctb_x)
  ------------------
  |  Branch (669:16): [True: 9.59M, False: 291k]
  |  Branch (669:38): [True: 2.51k, False: 289k]
  ------------------
  670|  9.60M|            {
  671|       |                /** Picking the last BS of the previous CTB corresponding to the same row
  672|       |                * UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
  673|       |                */
  674|  9.60M|                UWORD32 *pu4_horz_bs_left = (UWORD32 *)((UWORD8 *)pu4_horz_bs - (1 << (2 * log2_ctb_size - 7)));
  675|  9.60M|                UWORD32 u4_left_bs = (*pu4_horz_bs_left) >> ((1 << (log2_ctb_size - 1)) - 2);
  676|  9.60M|                u4_bs |= u4_left_bs & 3;
  677|  9.60M|            }
  678|       |
  679|       |            /* Every alternate boundary strength value is used for chroma */
  680|  9.88M|            u4_bs &= 0x22222222;
  681|       |
  682|  34.4M|            for(col = 0; col < ctb_size / 8;)
  ------------------
  |  Branch (682:26): [True: 24.6M, False: 9.88M]
  ------------------
  683|  24.6M|            {
  684|  24.6M|                WORD8 i1_tc_offset_div2 = ps_slice_hdr->i1_tc_offset_div2;
  685|       |
  686|  24.6M|                bs_tz = CTZ(u4_bs) >> 2;
  687|  24.6M|                if(0 != bs_tz)
  ------------------
  |  Branch (687:20): [True: 10.5M, False: 14.0M]
  ------------------
  688|  10.5M|                {
  689|  10.5M|                    u4_bs = u4_bs >> (bs_tz << 2);
  690|       |
  691|  10.5M|                    if((col + bs_tz) >= (ctb_size / 8))
  ------------------
  |  Branch (691:24): [True: 7.94M, False: 2.58M]
  ------------------
  692|  7.94M|                        pu1_src += 8 * (ctb_size / 8 - col);
  693|  2.58M|                    else
  694|  2.58M|                        pu1_src += 8 * bs_tz;
  695|       |
  696|  10.5M|                    col += bs_tz;
  697|  10.5M|                    continue;
  698|  10.5M|                }
  699|       |
  700|  14.0M|                if(0 == col)
  ------------------
  |  Branch (700:20): [True: 1.94M, False: 12.1M]
  ------------------
  701|  1.94M|                {
  702|  1.94M|                    i1_tc_offset_div2 = ps_slice_hdr_left->i1_tc_offset_div2;
  703|       |
  704|  1.94M|                    if(0 == row)
  ------------------
  |  Branch (704:24): [True: 630k, False: 1.31M]
  ------------------
  705|   630k|                    {
  706|   630k|                        qp_p = u4_qp_const_in_ctb[0] ?
  ------------------
  |  Branch (706:32): [True: 625k, False: 5.20k]
  ------------------
  707|   625k|                                        pu1_qp[-ctb_size / 8 * qp_strd - ctb_size / 8] :
  708|   630k|                                        pu1_qp[-qp_strd - 1];
  709|   630k|                    }
  710|  1.31M|                    else
  711|  1.31M|                    {
  712|  1.31M|                        qp_p = u4_qp_const_in_ctb[2] ?
  ------------------
  |  Branch (712:32): [True: 1.31M, False: 5.14k]
  ------------------
  713|  1.31M|                                        pu1_qp[-ctb_size / 8] :
  714|  1.31M|                                        pu1_qp[(2 * row - 1) * qp_strd - 1];
  715|  1.31M|                    }
  716|       |
  717|  1.94M|                    qp_q = u4_qp_const_in_ctb[2] ?
  ------------------
  |  Branch (717:28): [True: 1.93M, False: 19.0k]
  ------------------
  718|  1.93M|                                    pu1_qp[-ctb_size / 8] :
  719|  1.94M|                                    pu1_qp[(2 * row) * qp_strd - 1];
  720|  1.94M|                }
  721|  12.1M|                else
  722|  12.1M|                {
  723|  12.1M|                    if(0 == row)
  ------------------
  |  Branch (723:24): [True: 3.99M, False: 8.13M]
  ------------------
  724|  3.99M|                    {
  725|  3.99M|                        qp_p = u4_qp_const_in_ctb[1] ?
  ------------------
  |  Branch (725:32): [True: 3.96M, False: 36.5k]
  ------------------
  726|  3.96M|                                        pu1_qp[-ctb_size / 8 * qp_strd] :
  727|  3.99M|                                        pu1_qp[col - 1 - qp_strd];
  728|  3.99M|                    }
  729|  8.13M|                    else
  730|  8.13M|                    {
  731|  8.13M|                        qp_p = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (731:32): [True: 8.60M, False: 18.4E]
  ------------------
  732|  8.60M|                                        pu1_qp[0] :
  733|  18.4E|                                        pu1_qp[(col - 1) +  (2 * row - 1) * qp_strd];
  734|  8.13M|                    }
  735|       |
  736|  12.1M|                    qp_q = u4_qp_const_in_ctb[3] ?
  ------------------
  |  Branch (736:28): [True: 12.2M, False: 18.4E]
  ------------------
  737|  12.2M|                                    pu1_qp[0] :
  738|  18.4E|                                    pu1_qp[(col - 1) + 2 * row * qp_strd];
  739|  12.1M|                }
  740|       |
  741|  14.0M|                filter_p = (pu2_ctb_no_loop_filter_flag[row << 1] >> col) & 1;
  742|  14.0M|                filter_q = (pu2_ctb_no_loop_filter_flag[(row << 1) + 1] >> col) & 1;
  743|       |                /* filter_p and filter_q are inverted as they are calculated using no_loop_filter_flags */
  744|  14.0M|                filter_p = !filter_p;
  745|  14.0M|                filter_q = !filter_q;
  746|       |
  747|  14.0M|                if(filter_p || filter_q)
  ------------------
  |  Branch (747:20): [True: 13.9M, False: 113k]
  |  Branch (747:32): [True: 20.6k, False: 92.8k]
  ------------------
  748|  14.0M|                {
  749|  14.0M|                    ASSERT(1 == ((u4_bs & 3) >> 1));
  ------------------
  |  |   55|  14.0M|#define ASSERT(x) assert((x))
  ------------------
  750|  14.0M|                    DUMP_DEBLK_CHROMA_HORZ(pu1_src, src_strd,
  751|  14.0M|                                           u4_bs & 3, qp_p, qp_q,
  752|  14.0M|                                           ps_pps->i1_pic_cb_qp_offset,
  753|  14.0M|                                           ps_pps->i1_pic_cr_qp_offset,
  754|  14.0M|                                           ps_slice_hdr->i1_tc_offset_div2,
  755|  14.0M|                                           filter_p, filter_q);
  756|  14.0M|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (756:24): [True: 678k, False: 13.4M]
  ------------------
  757|   678k|                    {
  758|   678k|                        ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr(pu1_src,
  759|   678k|                                                                               src_strd,
  760|   678k|                                                                               qp_q,
  761|   678k|                                                                               qp_p,
  762|   678k|                                                                               ps_pps->i1_pic_cr_qp_offset,
  763|   678k|                                                                               ps_pps->i1_pic_cb_qp_offset,
  764|   678k|                                                                               i1_tc_offset_div2,
  765|   678k|                                                                               filter_q,
  766|   678k|                                                                               filter_p);
  767|   678k|                    }
  768|  13.4M|                    else
  769|  13.4M|                    {
  770|  13.4M|                        ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr(pu1_src,
  771|  13.4M|                                                                               src_strd,
  772|  13.4M|                                                                               qp_p,
  773|  13.4M|                                                                               qp_q,
  774|  13.4M|                                                                               ps_pps->i1_pic_cb_qp_offset,
  775|  13.4M|                                                                               ps_pps->i1_pic_cr_qp_offset,
  776|  13.4M|                                                                               i1_tc_offset_div2,
  777|  13.4M|                                                                               filter_p,
  778|  13.4M|                                                                               filter_q);
  779|  13.4M|                    }
  780|  14.0M|                }
  781|       |
  782|  14.0M|                pu1_src += 8;
  783|  14.0M|                u4_bs = u4_bs >> 4;
  784|  14.0M|                col++;
  785|  14.0M|            }
  786|       |
  787|  9.88M|            pu4_horz_bs += (64 == ctb_size) ? 2 : 1;
  ------------------
  |  Branch (787:28): [True: 4.34M, False: 5.53M]
  ------------------
  788|  9.88M|            pu1_src -= ctb_size;
  789|  9.88M|            pu1_src += 8 * src_strd;
  790|       |
  791|  9.88M|        }
  792|  6.22M|    }
  793|  6.23M|}

ihevcd_decode:
  438|  1.12M|{
  439|  1.12M|    WORD32 ret = IV_SUCCESS;
  440|  1.12M|    codec_t *ps_codec = (codec_t *)(ps_codec_obj->pv_codec_handle);
  441|  1.12M|    ihevcd_cxa_video_decode_ip_t s_hevcd_dec_ip = {};
  442|  1.12M|    ihevcd_cxa_video_decode_ip_t *ps_hevcd_dec_ip;
  443|  1.12M|    ihevcd_cxa_video_decode_op_t *ps_hevcd_dec_op;
  444|  1.12M|    ivd_video_decode_ip_t *ps_dec_ip;
  445|  1.12M|    ivd_video_decode_op_t *ps_dec_op;
  446|       |
  447|  1.12M|    WORD32 proc_idx = 0;
  448|  1.12M|    WORD32 prev_proc_idx = 0;
  449|       |
  450|       |    /* Initialize error code */
  451|  1.12M|    ps_codec->i4_error_code = 0;
  452|       |    /* Initialize bytes remaining */
  453|  1.12M|    ps_codec->i4_bytes_remaining = 0;
  454|       |
  455|  1.12M|    ps_dec_ip = (ivd_video_decode_ip_t *)pv_api_ip;
  456|  1.12M|    memcpy(&s_hevcd_dec_ip, ps_dec_ip, ps_dec_ip->u4_size);
  457|  1.12M|    s_hevcd_dec_ip.s_ivd_video_decode_ip_t.u4_size = sizeof(ihevcd_cxa_video_decode_ip_t);
  458|       |
  459|  1.12M|    ps_hevcd_dec_ip = &s_hevcd_dec_ip;
  460|  1.12M|    ps_dec_ip = &ps_hevcd_dec_ip->s_ivd_video_decode_ip_t;
  461|       |
  462|  1.12M|    ps_hevcd_dec_op = (ihevcd_cxa_video_decode_op_t *)pv_api_op;
  463|  1.12M|    ps_dec_op = &ps_hevcd_dec_op->s_ivd_video_decode_op_t;
  464|       |
  465|  1.12M|    {
  466|  1.12M|        UWORD32 u4_size = ps_dec_op->u4_size;
  467|  1.12M|        memset(ps_hevcd_dec_op, 0, u4_size);
  468|  1.12M|        ps_dec_op->u4_size = u4_size; //Restore size field
  469|  1.12M|    }
  470|  1.12M|    if(ps_codec->i4_init_done != 1)
  ------------------
  |  Branch (470:8): [True: 0, False: 1.12M]
  ------------------
  471|      0|    {
  472|      0|        ps_dec_op->u4_error_code |= 1 << IVD_FATALERROR;
  473|      0|        ps_dec_op->u4_error_code |= IHEVCD_INIT_NOT_DONE;
  474|      0|        return IV_FAIL;
  475|      0|    }
  476|       |
  477|  1.12M|    if(ps_codec->u4_pic_cnt >= NUM_FRAMES_LIMIT)
  ------------------
  |  |   82|  1.12M|#define NUM_FRAMES_LIMIT 0x7FFFFFFF
  ------------------
  |  Branch (477:8): [True: 0, False: 1.12M]
  ------------------
  478|      0|    {
  479|      0|        ps_dec_op->u4_error_code |= 1 << IVD_FATALERROR;
  480|      0|        ps_dec_op->u4_error_code |= IHEVCD_NUM_FRAMES_LIMIT_REACHED;
  481|      0|        return IV_FAIL;
  482|      0|    }
  483|       |
  484|  1.12M|    if(ps_codec->u1_enable_cu_info && ps_codec->i4_sps_done)
  ------------------
  |  Branch (484:8): [True: 0, False: 1.12M]
  |  Branch (484:39): [True: 0, False: 0]
  ------------------
  485|      0|    {
  486|      0|        UWORD32 blk_qp_map_size = ps_hevcd_dec_ip->u4_8x8_blk_qp_map_size;
  487|      0|        UWORD32 blk_type_map_size = ps_hevcd_dec_ip->u4_8x8_blk_type_map_size;
  488|      0|        UWORD32 blk_8x8_map_size = (ALIGN8(ps_codec->i4_wd) * ALIGN8(ps_codec->i4_ht)) >> 6;
  ------------------
  |  |   53|      0|#define ALIGN8(x)   ((((x) + 7) >> 3) << 3)
  ------------------
                      UWORD32 blk_8x8_map_size = (ALIGN8(ps_codec->i4_wd) * ALIGN8(ps_codec->i4_ht)) >> 6;
  ------------------
  |  |   53|      0|#define ALIGN8(x)   ((((x) + 7) >> 3) << 3)
  ------------------
  489|       |
  490|      0|        if ((ps_hevcd_dec_ip->pu1_8x8_blk_qp_map && blk_qp_map_size < blk_8x8_map_size) ||
  ------------------
  |  Branch (490:14): [True: 0, False: 0]
  |  Branch (490:53): [True: 0, False: 0]
  ------------------
  491|      0|            (ps_hevcd_dec_ip->pu1_8x8_blk_type_map && blk_type_map_size < blk_8x8_map_size))
  ------------------
  |  Branch (491:14): [True: 0, False: 0]
  |  Branch (491:55): [True: 0, False: 0]
  ------------------
  492|      0|        {
  493|      0|            ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  494|      0|            ps_dec_op->u4_error_code |= IHEVCD_INSUFFICIENT_METADATA_BUFFER;
  495|      0|            return IV_FAIL;
  496|      0|        }
  497|      0|     }
  498|       |
  499|       |    /* If reset flag is set, flush the existing buffers */
  500|  1.12M|    if(ps_codec->i4_reset_flag)
  ------------------
  |  Branch (500:8): [True: 0, False: 1.12M]
  ------------------
  501|      0|    {
  502|      0|        ps_codec->i4_flush_mode = 1;
  503|      0|    }
  504|       |
  505|       |    /*Data memory barries instruction,so that bitstream write by the application is complete*/
  506|       |    //arm_dsb();
  507|       |    /* In case the decoder is not in flush mode check for input buffer validity */
  508|  1.12M|    if(0 == ps_codec->i4_flush_mode)
  ------------------
  |  Branch (508:8): [True: 1.12M, False: 0]
  ------------------
  509|  1.12M|    {
  510|  1.12M|        if(ps_dec_ip->pv_stream_buffer == NULL)
  ------------------
  |  Branch (510:12): [True: 0, False: 1.12M]
  ------------------
  511|      0|        {
  512|      0|            ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  513|      0|            ps_dec_op->u4_error_code |= IVD_DEC_FRM_BS_BUF_NULL;
  514|      0|            return IV_FAIL;
  515|      0|        }
  516|  1.12M|        if(ps_dec_ip->u4_num_Bytes <= MIN_START_CODE_LEN)
  ------------------
  |  |   43|  1.12M|#define MIN_START_CODE_LEN          4
  ------------------
  |  Branch (516:12): [True: 0, False: 1.12M]
  ------------------
  517|      0|        {
  518|      0|            if((WORD32)ps_dec_ip->u4_num_Bytes > 0)
  ------------------
  |  Branch (518:16): [True: 0, False: 0]
  ------------------
  519|      0|                ps_dec_op->u4_num_bytes_consumed = ps_dec_ip->u4_num_Bytes;
  520|      0|            else
  521|      0|                ps_dec_op->u4_num_bytes_consumed = 0;
  522|       |
  523|      0|            ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  524|      0|            ps_dec_op->u4_error_code |= IVD_DEC_NUMBYTES_INV;
  525|      0|            return IV_FAIL;
  526|       |
  527|      0|        }
  528|  1.12M|    }
  529|       |
  530|       |#ifdef APPLY_CONCEALMENT
  531|       |    {
  532|       |        WORD32 num_mbs;
  533|       |
  534|       |        num_mbs = (ps_codec->i4_wd * ps_codec->i4_ht + 255) >> 8;
  535|       |        /* Reset MB Count at the beginning of every process call */
  536|       |        ps_codec->mb_count = 0;
  537|       |        memset(ps_codec->mb_map, 0, ((num_mbs + 7) >> 3));
  538|       |    }
  539|       |#endif
  540|       |
  541|  1.12M|    if(0 == ps_codec->i4_share_disp_buf && ps_codec->i4_header_mode == 0)
  ------------------
  |  Branch (541:8): [True: 1.12M, False: 0]
  |  Branch (541:44): [True: 26.4k, False: 1.10M]
  ------------------
  542|  26.4k|    {
  543|  26.4k|        UWORD32 i;
  544|  26.4k|        if((ps_dec_ip->s_out_buffer.u4_num_bufs <= 0) ||
  ------------------
  |  Branch (544:12): [True: 0, False: 26.4k]
  ------------------
  545|  26.4k|           (ps_dec_ip->s_out_buffer.u4_num_bufs > IVD_VIDDEC_MAX_IO_BUFFERS))
  ------------------
  |  |   43|  26.4k|#define IVD_VIDDEC_MAX_IO_BUFFERS 64
  ------------------
  |  Branch (545:12): [True: 0, False: 26.4k]
  ------------------
  546|      0|        {
  547|      0|            ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  548|      0|            ps_dec_op->u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUFS;
  549|      0|            return IV_FAIL;
  550|      0|        }
  551|       |
  552|  82.8k|        for(i = 0; i < ps_dec_ip->s_out_buffer.u4_num_bufs; i++)
  ------------------
  |  Branch (552:20): [True: 56.4k, False: 26.4k]
  ------------------
  553|  56.4k|        {
  554|  56.4k|            if(ps_dec_ip->s_out_buffer.pu1_bufs[i] == NULL)
  ------------------
  |  Branch (554:16): [True: 0, False: 56.4k]
  ------------------
  555|      0|            {
  556|      0|                ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  557|      0|                ps_dec_op->u4_error_code |= IVD_DISP_FRM_OP_BUF_NULL;
  558|      0|                return IV_FAIL;
  559|      0|            }
  560|       |
  561|  56.4k|            if(ps_dec_ip->s_out_buffer.u4_min_out_buf_size[i] == 0)
  ------------------
  |  Branch (561:16): [True: 0, False: 56.4k]
  ------------------
  562|      0|            {
  563|      0|                ps_dec_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
  564|      0|                ps_dec_op->u4_error_code |= IVD_DISP_FRM_ZERO_OP_BUF_SIZE;
  565|      0|                return IV_FAIL;
  566|      0|            }
  567|  56.4k|        }
  568|  26.4k|    }
  569|       |
  570|  1.12M|    ps_codec->ps_out_buffer = &ps_dec_ip->s_out_buffer;
  571|  1.12M|    ps_codec->u4_ts = ps_dec_ip->u4_ts;
  572|  1.12M|    if(ps_codec->i4_flush_mode)
  ------------------
  |  Branch (572:8): [True: 0, False: 1.12M]
  ------------------
  573|      0|    {
  574|       |
  575|      0|        ps_dec_op->u4_pic_wd = ps_codec->i4_disp_wd;
  576|      0|        ps_dec_op->u4_pic_ht = ps_codec->i4_disp_ht;
  577|       |
  578|      0|        ps_dec_op->u4_new_seq = 0;
  579|       |
  580|      0|        ps_codec->ps_disp_buf = (pic_buf_t *)ihevc_disp_mgr_get(
  581|      0|                        (disp_mgr_t *)ps_codec->pv_disp_buf_mgr, &ps_codec->i4_disp_buf_id);
  582|       |        /* In case of non-shared mode, then convert/copy the frame to output buffer */
  583|       |        /* Only if the codec is in non-shared mode or in shared mode but needs 420P output */
  584|      0|        if((ps_codec->ps_disp_buf)
  ------------------
  |  Branch (584:12): [True: 0, False: 0]
  ------------------
  585|      0|                        && ((0 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (585:29): [True: 0, False: 0]
  ------------------
  586|      0|                                        || (IV_YUV_420P
  ------------------
  |  Branch (586:44): [True: 0, False: 0]
  ------------------
  587|      0|                                                        == ps_codec->e_chroma_fmt)))
  588|      0|        {
  589|       |
  590|      0|            process_ctxt_t *ps_proc = &ps_codec->as_process[prev_proc_idx];
  591|      0|            if(0 == ps_proc->i4_init_done)
  ------------------
  |  Branch (591:16): [True: 0, False: 0]
  ------------------
  592|      0|            {
  593|      0|                ihevcd_init_proc_ctxt(ps_proc, 0);
  594|      0|            }
  595|       |
  596|       |            /* Output buffer check */
  597|      0|            ret = ihevcd_check_out_buf_size(ps_codec);
  598|      0|            RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|      0|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|       |
  600|       |            /* Set remaining number of rows to be processed */
  601|      0|            ret = ihevcd_fmt_conv(ps_codec, &ps_codec->as_process[prev_proc_idx],
  602|      0|                                  ps_dec_ip->s_out_buffer.pu1_bufs[0],
  603|      0|                                  ps_dec_ip->s_out_buffer.pu1_bufs[1],
  604|      0|                                  ps_dec_ip->s_out_buffer.pu1_bufs[2], 0,
  605|      0|                                  ps_codec->i4_disp_ht);
  606|       |
  607|      0|            ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_pic_buf_mgr,
  608|      0|                                  ps_codec->i4_disp_buf_id, BUF_MGR_DISP);
  ------------------
  |  |   41|      0|#define BUF_MGR_DISP        (1 << 2)
  ------------------
  609|      0|        }
  610|       |
  611|      0|        ihevcd_fill_outargs(ps_codec, ps_hevcd_dec_ip, ps_hevcd_dec_op);
  612|       |
  613|      0|        if(1 == ps_dec_op->u4_output_present)
  ------------------
  |  Branch (613:12): [True: 0, False: 0]
  ------------------
  614|      0|        {
  615|      0|            WORD32 xpos = ps_codec->i4_disp_wd - 32 - LOGO_WD;
  ------------------
  |  |   41|      0|#define LOGO_WD 90
  ------------------
  616|      0|            WORD32 ypos = ps_codec->i4_disp_ht - 32 - LOGO_HT;
  ------------------
  |  |   42|      0|#define LOGO_HT 36
  ------------------
  617|       |
  618|      0|            if(ypos < 0)
  ------------------
  |  Branch (618:16): [True: 0, False: 0]
  ------------------
  619|      0|                ypos = 0;
  620|       |
  621|      0|            if(xpos < 0)
  ------------------
  |  Branch (621:16): [True: 0, False: 0]
  ------------------
  622|      0|                xpos = 0;
  623|       |
  624|      0|            INSERT_LOGO(ps_dec_ip->s_out_buffer.pu1_bufs[0],
  625|      0|                        ps_dec_ip->s_out_buffer.pu1_bufs[1],
  626|      0|                        ps_dec_ip->s_out_buffer.pu1_bufs[2], ps_codec->i4_disp_strd,
  627|      0|                        xpos,
  628|      0|                        ypos,
  629|      0|                        ps_codec->e_chroma_fmt,
  630|      0|                        ps_codec->i4_disp_wd,
  631|      0|                        ps_codec->i4_disp_ht);
  632|      0|        }
  633|       |
  634|       |
  635|      0|        if(NULL == ps_codec->ps_disp_buf)
  ------------------
  |  Branch (635:12): [True: 0, False: 0]
  ------------------
  636|      0|        {
  637|       |            /* If in flush mode and there are no more buffers to flush,
  638|       |             * check for the reset flag and reset the decoder */
  639|      0|            if(ps_codec->i4_reset_flag)
  ------------------
  |  Branch (639:16): [True: 0, False: 0]
  ------------------
  640|      0|            {
  641|      0|                ihevcd_init(ps_codec);
  642|      0|            }
  643|      0|            return (IV_FAIL);
  644|      0|        }
  645|       |
  646|      0|        return (IV_SUCCESS);
  647|       |
  648|      0|    }
  649|       |    /* In case of shared mode, check if there is a free buffer for reconstruction */
  650|  1.12M|    if((0 == ps_codec->i4_header_mode) && (1 == ps_codec->i4_share_disp_buf))
  ------------------
  |  Branch (650:8): [True: 26.4k, False: 1.10M]
  |  Branch (650:43): [True: 0, False: 26.4k]
  ------------------
  651|      0|    {
  652|      0|        WORD32 buf_status;
  653|      0|        buf_status = 1;
  654|      0|        if(ps_codec->pv_pic_buf_mgr)
  ------------------
  |  Branch (654:12): [True: 0, False: 0]
  ------------------
  655|      0|            buf_status = ihevc_buf_mgr_check_free((buf_mgr_t *)ps_codec->pv_pic_buf_mgr);
  656|       |
  657|       |        /* If there is no free buffer, then return with an error code */
  658|      0|        if(0 == buf_status)
  ------------------
  |  Branch (658:12): [True: 0, False: 0]
  ------------------
  659|      0|        {
  660|      0|            ps_dec_op->u4_error_code = IVD_DEC_REF_BUF_NULL;
  661|      0|            ps_dec_op->u4_error_code |= (1 << IVD_UNSUPPORTEDPARAM);
  662|      0|            return IV_FAIL;
  663|      0|        }
  664|      0|    }
  665|  1.12M|    ps_codec->i4_bytes_remaining = ps_dec_ip->u4_num_Bytes;
  666|  1.12M|    ps_codec->pu1_inp_bitsbuf = (UWORD8 *)ps_dec_ip->pv_stream_buffer;
  667|  1.12M|    ps_codec->s_parse.i4_end_of_frame = 0;
  668|       |
  669|  1.12M|    ps_codec->i4_pic_present = 0;
  670|  1.12M|    ps_codec->i4_slice_error = 0;
  671|  1.12M|    ps_codec->ps_disp_buf = NULL;
  672|       |
  673|  1.12M|    if(ps_codec->i4_num_cores > 1)
  ------------------
  |  Branch (673:8): [True: 109k, False: 1.02M]
  ------------------
  674|   109k|    {
  675|   109k|        ithread_set_affinity(0);
  676|   109k|    }
  677|  1.15M|    while(MIN_START_CODE_LEN < ps_codec->i4_bytes_remaining)
  ------------------
  |  |   43|  1.15M|#define MIN_START_CODE_LEN          4
  ------------------
  |  Branch (677:11): [True: 1.15M, False: 214]
  ------------------
  678|  1.15M|    {
  679|  1.15M|        WORD32 nal_len;
  680|  1.15M|        WORD32 nal_ofst;
  681|  1.15M|        WORD32 bits_len;
  682|       |
  683|  1.15M|        if(ps_codec->i4_slice_error)
  ------------------
  |  Branch (683:12): [True: 2.51k, False: 1.15M]
  ------------------
  684|  2.51k|        {
  685|  2.51k|            slice_header_t *ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  2.51k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  2.51k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  686|  2.51k|            WORD32 next_slice_addr = ps_slice_hdr_next->i2_ctb_x +
  687|  2.51k|                            ps_slice_hdr_next->i2_ctb_y * ps_codec->s_parse.ps_sps->i2_pic_wd_in_ctb;
  688|  2.51k|            if(ps_codec->s_parse.i4_next_ctb_indx == next_slice_addr)
  ------------------
  |  Branch (688:16): [True: 0, False: 2.51k]
  ------------------
  689|      0|                ps_codec->i4_slice_error = 0;
  690|  2.51k|        }
  691|       |
  692|  1.15M|        if(ps_codec->pu1_bitsbuf_dynamic)
  ------------------
  |  Branch (692:12): [True: 29.5k, False: 1.12M]
  ------------------
  693|  29.5k|        {
  694|  29.5k|            ps_codec->pu1_bitsbuf = ps_codec->pu1_bitsbuf_dynamic;
  695|  29.5k|            ps_codec->u4_bitsbuf_size = ps_codec->u4_bitsbuf_size_dynamic;
  696|  29.5k|        }
  697|  1.12M|        else
  698|  1.12M|        {
  699|  1.12M|            ps_codec->pu1_bitsbuf = ps_codec->pu1_bitsbuf_static;
  700|  1.12M|            ps_codec->u4_bitsbuf_size = ps_codec->u4_bitsbuf_size_static;
  701|  1.12M|        }
  702|       |
  703|  1.15M|        nal_ofst = ihevcd_nal_search_start_code(ps_codec->pu1_inp_bitsbuf,
  704|  1.15M|                                                ps_codec->i4_bytes_remaining);
  705|       |        /* If there is no start code found, consume the data and break */
  706|  1.15M|        if(nal_ofst == ps_codec->i4_bytes_remaining)
  ------------------
  |  Branch (706:12): [True: 63, False: 1.15M]
  ------------------
  707|     63|        {
  708|     63|            ps_codec->pu1_inp_bitsbuf += nal_ofst;
  709|     63|            ps_codec->i4_bytes_remaining -= nal_ofst;
  710|     63|            break;
  711|     63|        }
  712|       |
  713|  1.15M|        ps_codec->i4_nal_ofst = nal_ofst;
  714|  1.15M|        {
  715|  1.15M|            WORD32 bytes_remaining = ps_codec->i4_bytes_remaining - nal_ofst;
  716|       |
  717|  1.15M|            bytes_remaining = MIN((UWORD32)bytes_remaining, ps_codec->u4_bitsbuf_size);
  ------------------
  |  |   43|  1.15M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 1.15M, False: 0]
  |  |  ------------------
  ------------------
  718|  1.15M|            ihevcd_nal_remv_emuln_bytes(ps_codec->pu1_inp_bitsbuf + nal_ofst,
  719|  1.15M|                                        ps_codec->pu1_bitsbuf,
  720|  1.15M|                                        bytes_remaining,
  721|  1.15M|                                        &nal_len, &bits_len);
  722|       |
  723|       |            /* Decoder may read upto 8 extra bytes at the end of frame */
  724|       |            /* These are not used, but still set them to zero to avoid uninitialized reads */
  725|  1.15M|            if(bits_len < (WORD32)(ps_codec->u4_bitsbuf_size - 8))
  ------------------
  |  Branch (725:16): [True: 1.15M, False: 9]
  ------------------
  726|  1.15M|            {
  727|  1.15M|                memset(ps_codec->pu1_bitsbuf + bits_len, 0, 2 * sizeof(UWORD32));
  728|  1.15M|            }
  729|  1.15M|        }
  730|       |        /* This may be used to update the offsets for tiles and entropy sync row offsets */
  731|  1.15M|        ps_codec->i4_num_emln_bytes = nal_len - bits_len;
  732|  1.15M|        ps_codec->i4_nal_len = nal_len;
  733|       |
  734|  1.15M|        ihevcd_bits_init(&ps_codec->s_parse.s_bitstrm, ps_codec->pu1_bitsbuf,
  735|  1.15M|                         bits_len);
  736|       |
  737|  1.15M|        ret = ihevcd_nal_unit(ps_codec);
  738|       |
  739|       |        /* If the frame is incomplete and
  740|       |         * the bytes remaining is zero or a header is received,
  741|       |         * complete the frame treating it to be in error */
  742|  1.15M|        if(ps_codec->i4_pic_present &&
  ------------------
  |  Branch (742:12): [True: 14.8k, False: 1.14M]
  ------------------
  743|  1.15M|                        (ps_codec->s_parse.i4_next_ctb_indx != ps_codec->s_parse.ps_sps->i4_pic_size_in_ctb))
  ------------------
  |  Branch (743:25): [True: 10.6k, False: 4.25k]
  ------------------
  744|  10.6k|        {
  745|  10.6k|            if((ps_codec->i4_bytes_remaining - (nal_len + nal_ofst) <= MIN_START_CODE_LEN) ||
  ------------------
  |  |   43|  10.6k|#define MIN_START_CODE_LEN          4
  ------------------
  |  Branch (745:16): [True: 209, False: 10.4k]
  ------------------
  746|  10.6k|                            (ps_codec->i4_header_in_slice_mode))
  ------------------
  |  Branch (746:29): [True: 2.31k, False: 8.12k]
  ------------------
  747|  2.51k|            {
  748|  2.51k|                slice_header_t *ps_slice_hdr_next;
  749|       |
  750|  2.51k|                ps_codec->s_parse.i4_cur_slice_idx--;
  751|  2.51k|                if(ps_codec->s_parse.i4_cur_slice_idx < 0)
  ------------------
  |  Branch (751:20): [True: 0, False: 2.51k]
  ------------------
  752|      0|                    ps_codec->s_parse.i4_cur_slice_idx = 0;
  753|       |
  754|  2.51k|                ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + ((ps_codec->s_parse.i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  2.51k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  2.51k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  755|  2.51k|                ps_slice_hdr_next->i2_ctb_x = 0;
  756|  2.51k|                ps_slice_hdr_next->i2_ctb_y = ps_codec->s_parse.ps_sps->i2_pic_ht_in_ctb;
  757|  2.51k|                ps_codec->i4_slice_error = 1;
  758|  2.51k|                continue;
  759|  2.51k|            }
  760|  10.6k|        }
  761|       |
  762|  1.15M|        if(IHEVCD_IGNORE_SLICE == ret)
  ------------------
  |  Branch (762:12): [True: 7.65k, False: 1.14M]
  ------------------
  763|  7.65k|        {
  764|  7.65k|            ps_codec->pu1_inp_bitsbuf += (nal_ofst + nal_len);
  765|  7.65k|            ps_codec->i4_bytes_remaining -= (nal_ofst + nal_len);
  766|       |
  767|  7.65k|            continue;
  768|  7.65k|        }
  769|       |
  770|  1.14M|        if(IVD_RES_CHANGED == ret)
  ------------------
  |  Branch (770:12): [True: 321, False: 1.14M]
  ------------------
  771|    321|        {
  772|    321|            break;
  773|    321|        }
  774|       |
  775|       |        /* Update bytes remaining and bytes consumed and input bitstream pointer */
  776|       |        /* Do not consume the NAL in the following cases */
  777|       |        /* Slice header reached during header decode mode */
  778|       |        /* TODO: Next picture's slice reached */
  779|  1.14M|        if(ret != IHEVCD_SLICE_IN_HEADER_MODE)
  ------------------
  |  Branch (779:12): [True: 54.3k, False: 1.09M]
  ------------------
  780|  54.3k|        {
  781|  54.3k|            if((0 == ps_codec->i4_slice_error) ||
  ------------------
  |  Branch (781:16): [True: 54.0k, False: 325]
  ------------------
  782|  54.3k|                            (ps_codec->i4_bytes_remaining - (nal_len + nal_ofst) <= MIN_START_CODE_LEN))
  ------------------
  |  |   43|    325|#define MIN_START_CODE_LEN          4
  ------------------
  |  Branch (782:29): [True: 0, False: 325]
  ------------------
  783|  54.0k|            {
  784|  54.0k|                ps_codec->pu1_inp_bitsbuf += (nal_ofst + nal_len);
  785|  54.0k|                ps_codec->i4_bytes_remaining -= (nal_ofst + nal_len);
  786|  54.0k|            }
  787|  54.3k|            if(ret != IHEVCD_SUCCESS)
  ------------------
  |  Branch (787:16): [True: 31.8k, False: 22.5k]
  ------------------
  788|  31.8k|                break;
  789|       |
  790|  22.5k|            if(ps_codec->s_parse.i4_end_of_frame)
  ------------------
  |  Branch (790:16): [True: 4.25k, False: 18.2k]
  ------------------
  791|  4.25k|                break;
  792|  22.5k|        }
  793|  1.09M|        else
  794|  1.09M|        {
  795|  1.09M|            ret = IHEVCD_SUCCESS;
  796|  1.09M|            break;
  797|  1.09M|        }
  798|       |
  799|       |        /* Allocate dynamic bitstream buffer once SPS is decoded */
  800|  18.2k|        if((ps_codec->u4_allocate_dynamic_done == 0) && ps_codec->i4_sps_done)
  ------------------
  |  Branch (800:12): [True: 3.90k, False: 14.3k]
  |  Branch (800:57): [True: 932, False: 2.97k]
  ------------------
  801|    932|        {
  802|    932|            WORD32 ret;
  803|    932|            ret = ihevcd_allocate_dynamic_bufs(ps_codec);
  804|    932|            if(ret != IV_SUCCESS)
  ------------------
  |  Branch (804:16): [True: 0, False: 932]
  ------------------
  805|      0|            {
  806|       |                /* Free any dynamic buffers that are allocated */
  807|      0|                ihevcd_free_dynamic_bufs(ps_codec);
  808|      0|                ps_codec->i4_error_code = IVD_MEM_ALLOC_FAILED;
  809|      0|                ps_dec_op->u4_error_code = 1 << IVD_FATALERROR;
  810|      0|                ps_dec_op->u4_error_code |= IVD_MEM_ALLOC_FAILED;
  811|       |
  812|      0|                return IV_FAIL;
  813|      0|            }
  814|    932|        }
  815|       |
  816|  18.2k|        BREAK_AFTER_SLICE_NAL();
  ------------------
  |  |   81|  18.2k|#define BREAK_AFTER_SLICE_NAL()     ;
  ------------------
  817|  18.2k|    }
  818|       |
  819|  1.12M|    if(1 == ps_codec->i4_pic_present && 0 == ps_codec->s_parse.i4_end_of_frame)
  ------------------
  |  Branch (819:8): [True: 5.35k, False: 1.12M]
  |  Branch (819:41): [True: 1.10k, False: 4.25k]
  ------------------
  820|  1.10k|    {
  821|  1.10k|        slice_header_t *ps_slice_hdr_next;
  822|  1.10k|        ps_codec->i4_slice_error = 1;
  823|  1.10k|        ps_codec->s_parse.i4_cur_slice_idx--;
  824|  1.10k|        if(ps_codec->s_parse.i4_cur_slice_idx < 0)
  ------------------
  |  Branch (824:12): [True: 0, False: 1.10k]
  ------------------
  825|      0|            ps_codec->s_parse.i4_cur_slice_idx = 0;
  826|       |
  827|  1.10k|        ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + ((ps_codec->s_parse.i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  1.10k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  1.10k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  828|  1.10k|        ps_slice_hdr_next->i2_ctb_x = -1;
  829|  1.10k|        ps_slice_hdr_next->i2_ctb_y = -1;
  830|       |
  831|  1.10k|        ihevcd_parse_slice_data(ps_codec);
  832|  1.10k|        ASSERT(ps_codec->s_parse.i4_end_of_frame != 0);
  ------------------
  |  |   55|  1.10k|#define ASSERT(x) assert((x))
  ------------------
  833|  1.10k|    }
  834|       |
  835|  1.12M|    if(1 == ps_codec->i4_pic_present)
  ------------------
  |  Branch (835:8): [True: 5.35k, False: 1.12M]
  ------------------
  836|  5.35k|    {
  837|  5.35k|        WORD32 i;
  838|  5.35k|        sps_t *ps_sps = ps_codec->s_parse.ps_sps;
  839|  5.35k|        ps_codec->i4_first_pic_done = 1;
  840|       |
  841|       |        /*TODO temporary fix: end_of_frame is checked before adding format conversion to job queue         */
  842|  5.35k|        if(ps_codec->i4_num_cores > 1 && ps_codec->s_parse.i4_end_of_frame)
  ------------------
  |  Branch (842:12): [True: 3.99k, False: 1.36k]
  |  Branch (842:42): [True: 3.99k, False: 0]
  ------------------
  843|  3.99k|        {
  844|       |
  845|       |            /* Add job queue for format conversion / frame copy for each ctb row */
  846|       |            /* Only if the codec is in non-shared mode or in shared mode but needs 420P output */
  847|  3.99k|            process_ctxt_t *ps_proc;
  848|       |
  849|       |            /* i4_num_cores - 1 contexts are currently being used by other threads */
  850|  3.99k|            ps_proc = &ps_codec->as_process[ps_codec->i4_num_cores - 1];
  851|       |
  852|  3.99k|            if((ps_codec->ps_disp_buf) &&
  ------------------
  |  Branch (852:16): [True: 3.57k, False: 412]
  ------------------
  853|  3.99k|               ((0 == ps_codec->i4_share_disp_buf) || (IV_YUV_420P == ps_codec->e_chroma_fmt)))
  ------------------
  |  Branch (853:17): [True: 3.57k, False: 0]
  |  Branch (853:55): [True: 0, False: 0]
  ------------------
  854|  3.57k|            {
  855|       |                /* If format conversion jobs were not issued in pic_init() add them here */
  856|  3.57k|                if((0 == ps_codec->u4_enable_fmt_conv_ahead) ||
  ------------------
  |  Branch (856:20): [True: 3.57k, False: 0]
  ------------------
  857|  3.57k|                                (ps_codec->i4_disp_buf_id == ps_proc->i4_cur_pic_buf_id))
  ------------------
  |  Branch (857:33): [True: 0, False: 0]
  ------------------
  858|  60.5k|                    for(i = 0; i < ps_sps->i2_pic_ht_in_ctb; i++)
  ------------------
  |  Branch (858:32): [True: 56.9k, False: 3.57k]
  ------------------
  859|  56.9k|                    {
  860|  56.9k|                        proc_job_t s_job;
  861|  56.9k|                        IHEVCD_ERROR_T ret;
  862|  56.9k|                        s_job.i4_cmd = CMD_FMTCONV;
  863|  56.9k|                        s_job.i2_ctb_cnt = 0;
  864|  56.9k|                        s_job.i2_ctb_x = 0;
  865|  56.9k|                        s_job.i2_ctb_y = i;
  866|  56.9k|                        s_job.i2_slice_idx = 0;
  867|  56.9k|                        s_job.i4_tu_coeff_data_ofst = 0;
  868|  56.9k|                        ret = ihevcd_jobq_queue((jobq_t *)ps_codec->s_parse.pv_proc_jobq,
  869|  56.9k|                                                &s_job, sizeof(proc_job_t), 1);
  870|  56.9k|                        if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (870:28): [True: 0, False: 56.9k]
  ------------------
  871|      0|                            return (WORD32)ret;
  872|  56.9k|                    }
  873|  3.57k|            }
  874|       |            /* Reached end of frame : Signal terminate */
  875|       |            /* The terminate flag is checked only after all the jobs are dequeued */
  876|  3.99k|            ret = ihevcd_jobq_terminate((jobq_t *)ps_codec->s_parse.pv_proc_jobq);
  877|       |
  878|  40.8k|            while(1)
  ------------------
  |  Branch (878:19): [Folded - Ignored]
  ------------------
  879|  40.8k|            {
  880|  40.8k|                IHEVCD_ERROR_T ret;
  881|  40.8k|                proc_job_t s_job;
  882|  40.8k|                process_ctxt_t *ps_proc;
  883|       |
  884|       |                /* i4_num_cores - 1 contexts are currently being used by other threads */
  885|  40.8k|                ps_proc = &ps_codec->as_process[ps_codec->i4_num_cores - 1];
  886|       |
  887|  40.8k|                ret = ihevcd_jobq_dequeue((jobq_t *)ps_proc->pv_proc_jobq, &s_job,
  888|  40.8k|                                          sizeof(proc_job_t), 1);
  889|  40.8k|                if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
  ------------------
  |  Branch (889:20): [True: 3.99k, False: 36.8k]
  ------------------
  890|  3.99k|                    break;
  891|       |
  892|  36.8k|                ps_proc->i4_ctb_cnt = s_job.i2_ctb_cnt;
  893|  36.8k|                ps_proc->i4_ctb_x = s_job.i2_ctb_x;
  894|  36.8k|                ps_proc->i4_ctb_y = s_job.i2_ctb_y;
  895|  36.8k|                ps_proc->i4_cur_slice_idx = s_job.i2_slice_idx;
  896|       |
  897|  36.8k|                if(CMD_PROCESS == s_job.i4_cmd)
  ------------------
  |  Branch (897:20): [True: 18.4k, False: 18.4k]
  ------------------
  898|  18.4k|                {
  899|  18.4k|                    ihevcd_init_proc_ctxt(ps_proc, s_job.i4_tu_coeff_data_ofst);
  900|       |
  901|  18.4k|                    ihevcd_process(ps_proc);
  902|  18.4k|                }
  903|  18.4k|                else if(CMD_FMTCONV == s_job.i4_cmd)
  ------------------
  |  Branch (903:25): [True: 18.4k, False: 0]
  ------------------
  904|  18.4k|                {
  905|  18.4k|                    sps_t *ps_sps = ps_codec->s_parse.ps_sps;
  906|  18.4k|                    WORD32 num_rows = 1 << ps_sps->i1_log2_ctb_size;
  907|  18.4k|                    if(0 == ps_proc->i4_init_done)
  ------------------
  |  Branch (907:24): [True: 154, False: 18.2k]
  ------------------
  908|    154|                    {
  909|    154|                        ihevcd_init_proc_ctxt(ps_proc, 0);
  910|    154|                    }
  911|       |
  912|  18.4k|                    num_rows = MIN(num_rows, (ps_codec->i4_disp_ht - (s_job.i2_ctb_y << ps_sps->i1_log2_ctb_size)));
  ------------------
  |  |   43|  18.4k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 16.5k, False: 1.86k]
  |  |  ------------------
  ------------------
  913|  18.4k|                    if(num_rows < 0)
  ------------------
  |  Branch (913:24): [True: 0, False: 18.4k]
  ------------------
  914|      0|                        num_rows = 0;
  915|       |
  916|  18.4k|                    ihevcd_fmt_conv(ps_codec, ps_proc,
  917|  18.4k|                                    ps_dec_ip->s_out_buffer.pu1_bufs[0],
  918|  18.4k|                                    ps_dec_ip->s_out_buffer.pu1_bufs[1],
  919|  18.4k|                                    ps_dec_ip->s_out_buffer.pu1_bufs[2],
  920|  18.4k|                                    s_job.i2_ctb_y << ps_sps->i1_log2_ctb_size,
  921|  18.4k|                                    num_rows);
  922|  18.4k|                }
  923|  36.8k|            }
  924|  3.99k|        }
  925|       |        /* In case of non-shared mode and while running in single core mode, then convert/copy the frame to output buffer */
  926|       |        /* Only if the codec is in non-shared mode or in shared mode but needs 420P output */
  927|  1.36k|        else if((ps_codec->ps_disp_buf) && ((0 == ps_codec->i4_share_disp_buf) ||
  ------------------
  |  Branch (927:17): [True: 1.27k, False: 91]
  |  Branch (927:45): [True: 1.27k, False: 0]
  ------------------
  928|  1.27k|                                            (IV_YUV_420P == ps_codec->e_chroma_fmt)) &&
  ------------------
  |  Branch (928:45): [True: 0, False: 0]
  ------------------
  929|  1.36k|                        (ps_codec->s_parse.i4_end_of_frame))
  ------------------
  |  Branch (929:25): [True: 1.27k, False: 0]
  ------------------
  930|  1.27k|        {
  931|  1.27k|            process_ctxt_t *ps_proc = &ps_codec->as_process[proc_idx];
  932|       |            /* Set remaining number of rows to be processed */
  933|  1.27k|            ps_codec->s_fmt_conv.i4_num_rows = ps_codec->i4_disp_ht
  934|  1.27k|                            - ps_codec->s_fmt_conv.i4_cur_row;
  935|  1.27k|            if(0 == ps_proc->i4_init_done)
  ------------------
  |  Branch (935:16): [True: 0, False: 1.27k]
  ------------------
  936|      0|            {
  937|      0|                ihevcd_init_proc_ctxt(ps_proc, 0);
  938|      0|            }
  939|       |
  940|  1.27k|            if(ps_codec->s_fmt_conv.i4_num_rows < 0)
  ------------------
  |  Branch (940:16): [True: 0, False: 1.27k]
  ------------------
  941|      0|                ps_codec->s_fmt_conv.i4_num_rows = 0;
  942|       |
  943|  1.27k|            ret = ihevcd_fmt_conv(ps_codec, ps_proc,
  944|  1.27k|                                  ps_dec_ip->s_out_buffer.pu1_bufs[0],
  945|  1.27k|                                  ps_dec_ip->s_out_buffer.pu1_bufs[1],
  946|  1.27k|                                  ps_dec_ip->s_out_buffer.pu1_bufs[2],
  947|  1.27k|                                  ps_codec->s_fmt_conv.i4_cur_row,
  948|  1.27k|                                  ps_codec->s_fmt_conv.i4_num_rows);
  949|  1.27k|            ps_codec->s_fmt_conv.i4_cur_row += ps_codec->s_fmt_conv.i4_num_rows;
  950|       |
  951|  1.27k|        }
  952|       |
  953|       |
  954|  5.35k|        DEBUG_DUMP_MV_MAP(ps_codec);
  955|       |
  956|       |        /* Mark MV Buf as needed for reference */
  957|  5.35k|        ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_mv_buf_mgr,
  958|  5.35k|                                 ps_codec->as_process[proc_idx].i4_cur_mv_bank_buf_id,
  959|  5.35k|                                 BUF_MGR_REF);
  ------------------
  |  |   40|  5.35k|#define BUF_MGR_REF         (1 << 1)
  ------------------
  960|       |
  961|       |        /* Mark pic buf as needed for reference */
  962|  5.35k|        ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_pic_buf_mgr,
  963|  5.35k|                                 ps_codec->as_process[proc_idx].i4_cur_pic_buf_id,
  964|  5.35k|                                 BUF_MGR_REF);
  ------------------
  |  |   40|  5.35k|#define BUF_MGR_REF         (1 << 1)
  ------------------
  965|       |
  966|       |        /* Mark pic buf as needed for display */
  967|  5.35k|        ihevc_buf_mgr_set_status((buf_mgr_t *)ps_codec->pv_pic_buf_mgr,
  968|  5.35k|                                 ps_codec->as_process[proc_idx].i4_cur_pic_buf_id,
  969|  5.35k|                                 BUF_MGR_DISP);
  ------------------
  |  |   41|  5.35k|#define BUF_MGR_DISP        (1 << 2)
  ------------------
  970|       |
  971|       |        /* Insert the current picture as short term reference */
  972|  5.35k|        ihevc_dpb_mgr_insert_ref((dpb_mgr_t *)ps_codec->pv_dpb_mgr,
  973|  5.35k|                                 ps_codec->as_process[proc_idx].ps_cur_pic,
  974|  5.35k|                                 ps_codec->as_process[proc_idx].i4_cur_pic_buf_id);
  975|       |
  976|       |        /* If a frame was displayed (in non-shared mode), then release it from display manager */
  977|  5.35k|        if((0 == ps_codec->i4_share_disp_buf) && (ps_codec->ps_disp_buf))
  ------------------
  |  Branch (977:12): [True: 5.35k, False: 0]
  |  Branch (977:50): [True: 4.85k, False: 503]
  ------------------
  978|  4.85k|            ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_pic_buf_mgr,
  979|  4.85k|                                  ps_codec->i4_disp_buf_id, BUF_MGR_DISP);
  ------------------
  |  |   41|  4.85k|#define BUF_MGR_DISP        (1 << 2)
  ------------------
  980|       |
  981|       |        /* Wait for threads */
  982|  12.0k|        for(i = 0; i < (ps_codec->i4_num_cores - 1); i++)
  ------------------
  |  Branch (982:20): [True: 6.69k, False: 5.35k]
  ------------------
  983|  6.69k|        {
  984|  6.69k|            if(ps_codec->ai4_process_thread_created[i])
  ------------------
  |  Branch (984:16): [True: 6.69k, False: 0]
  ------------------
  985|  6.69k|            {
  986|       |#ifdef KEEP_THREADS_ACTIVE
  987|       |                ret = ithread_mutex_lock(ps_codec->apv_proc_done_mutex[i]);
  988|       |                RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  989|       |
  990|       |                while(!ps_codec->ai4_process_done[i])
  991|       |                {
  992|       |                    ithread_cond_wait(ps_codec->apv_proc_done_condition[i],
  993|       |                                      ps_codec->apv_proc_done_mutex[i]);
  994|       |                }
  995|       |                ps_codec->ai4_process_done[i] = 0;
  996|       |                ret = ithread_mutex_unlock(ps_codec->apv_proc_done_mutex[i]);
  997|       |                RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  998|       |#else
  999|  6.69k|                ithread_join(ps_codec->apv_process_thread_handle[i], NULL);
 1000|  6.69k|                ps_codec->ai4_process_thread_created[i] = 0;
 1001|  6.69k|#endif
 1002|  6.69k|            }
 1003|  6.69k|        }
 1004|       |
 1005|  5.35k|        DEBUG_VALIDATE_PADDED_REGION(&ps_codec->as_process[proc_idx]);
 1006|  5.35k|        if(ps_codec->u4_pic_cnt > 0)
  ------------------
  |  Branch (1006:12): [True: 4.47k, False: 885]
  ------------------
 1007|  4.47k|        {
 1008|  4.47k|            DEBUG_DUMP_PIC_PU(ps_codec);
 1009|  4.47k|        }
 1010|  5.35k|        DEBUG_DUMP_PIC_BUFFERS(ps_codec);
 1011|       |
 1012|       |        /* Increment the number of pictures decoded */
 1013|  5.35k|        ps_codec->u4_pic_cnt++;
 1014|  5.35k|    }
 1015|  1.12M|    ihevcd_fill_outargs(ps_codec, ps_hevcd_dec_ip, ps_hevcd_dec_op);
 1016|       |
 1017|  1.12M|    if(1 == ps_dec_op->u4_output_present)
  ------------------
  |  Branch (1017:8): [True: 4.85k, False: 1.12M]
  ------------------
 1018|  4.85k|    {
 1019|  4.85k|        WORD32 xpos = ps_codec->i4_disp_wd - 32 - LOGO_WD;
  ------------------
  |  |   41|  4.85k|#define LOGO_WD 90
  ------------------
 1020|  4.85k|        WORD32 ypos = ps_codec->i4_disp_ht - 32 - LOGO_HT;
  ------------------
  |  |   42|  4.85k|#define LOGO_HT 36
  ------------------
 1021|       |
 1022|  4.85k|        if(ypos < 0)
  ------------------
  |  Branch (1022:12): [True: 696, False: 4.15k]
  ------------------
 1023|    696|            ypos = 0;
 1024|       |
 1025|  4.85k|        if(xpos < 0)
  ------------------
  |  Branch (1025:12): [True: 1.10k, False: 3.74k]
  ------------------
 1026|  1.10k|            xpos = 0;
 1027|       |
 1028|  4.85k|        INSERT_LOGO(ps_dec_ip->s_out_buffer.pu1_bufs[0],
 1029|  4.85k|                    ps_dec_ip->s_out_buffer.pu1_bufs[1],
 1030|  4.85k|                    ps_dec_ip->s_out_buffer.pu1_bufs[2], ps_codec->i4_disp_strd,
 1031|  4.85k|                    xpos,
 1032|  4.85k|                    ypos,
 1033|  4.85k|                    ps_codec->e_chroma_fmt,
 1034|  4.85k|                    ps_codec->i4_disp_wd,
 1035|  4.85k|                    ps_codec->i4_disp_ht);
 1036|  4.85k|    }
 1037|       |
 1038|       |
 1039|  1.12M|    return ret;
 1040|  1.12M|}
ihevcd_decode.c:ihevcd_fill_outargs:
  188|  1.12M|{
  189|       |
  190|  1.12M|    ihevcd_cxa_video_decode_ip_t *ps_hevcd_dec_ip;
  191|  1.12M|    ihevcd_cxa_video_decode_op_t *ps_hevcd_dec_op;
  192|  1.12M|    ivd_video_decode_ip_t *ps_dec_ip;
  193|  1.12M|    ivd_video_decode_op_t *ps_dec_op;
  194|       |
  195|  1.12M|    ps_hevcd_dec_ip = (ihevcd_cxa_video_decode_ip_t *)pv_api_ip;
  196|  1.12M|    ps_hevcd_dec_op = (ihevcd_cxa_video_decode_op_t *)pv_api_op;
  197|  1.12M|    ps_dec_ip = &ps_hevcd_dec_ip->s_ivd_video_decode_ip_t;
  198|  1.12M|    ps_dec_op = &ps_hevcd_dec_op->s_ivd_video_decode_op_t;
  199|       |
  200|  1.12M|    ps_dec_op->u4_error_code = ihevcd_map_error((IHEVCD_ERROR_T)ps_codec->i4_error_code);
  201|  1.12M|    ps_dec_op->u4_num_bytes_consumed = ps_dec_ip->u4_num_Bytes
  202|  1.12M|                    - ps_codec->i4_bytes_remaining;
  203|  1.12M|    if(ps_codec->i4_sps_done)
  ------------------
  |  Branch (203:8): [True: 26.1k, False: 1.10M]
  ------------------
  204|  26.1k|    {
  205|  26.1k|        ps_dec_op->u4_pic_wd = ps_codec->i4_disp_wd;
  206|  26.1k|        ps_dec_op->u4_pic_ht = ps_codec->i4_disp_ht;
  207|  26.1k|    }
  208|  1.10M|    else
  209|  1.10M|    {
  210|  1.10M|        ps_dec_op->u4_pic_wd = 0;
  211|  1.10M|        ps_dec_op->u4_pic_ht = 0;
  212|  1.10M|    }
  213|       |
  214|  1.12M|    ps_dec_op->e_pic_type = ps_codec->e_dec_pic_type;
  215|  1.12M|    ps_dec_op->u4_frame_decoded_flag = ps_codec->i4_pic_present;
  216|  1.12M|    ps_dec_op->u4_new_seq = 0;
  217|       |
  218|  1.12M|    ps_dec_op->u4_output_present = 0;
  219|  1.12M|    ps_dec_op->u4_progressive_frame_flag = 1;
  220|  1.12M|    ps_dec_op->i4_display_index = -1;
  221|  1.12M|    ps_dec_op->i4_reorder_depth = -1;
  222|  1.12M|    if(ps_codec->i4_sps_done)
  ------------------
  |  Branch (222:8): [True: 26.1k, False: 1.10M]
  ------------------
  223|  26.1k|    {
  224|  26.1k|        sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
  225|  26.1k|        profile_tier_lvl_info_t *ps_ptl;
  226|  26.1k|        ps_ptl = &ps_sps->s_ptl;
  227|  26.1k|        if((0 == ps_ptl->s_ptl_gen.i1_general_progressive_source_flag) &&
  ------------------
  |  Branch (227:12): [True: 8.25k, False: 17.9k]
  ------------------
  228|  26.1k|           (1 == ps_ptl->s_ptl_gen.i1_general_interlaced_source_flag))
  ------------------
  |  Branch (228:12): [True: 648, False: 7.60k]
  ------------------
  229|    648|        {
  230|    648|            ps_dec_op->u4_progressive_frame_flag = 0;
  231|    648|        }
  232|  26.1k|        ps_dec_op->i4_reorder_depth =
  233|  26.1k|                        ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1];
  234|  26.1k|    }
  235|       |
  236|  1.12M|    ps_dec_op->u4_is_ref_flag = 1;
  237|  1.12M|    ps_dec_op->e_output_format = ps_codec->e_chroma_fmt;
  238|  1.12M|    ps_dec_op->u4_is_ref_flag = 1;
  239|       |
  240|  1.12M|    ps_dec_op->e4_fld_type = IV_FLD_TYPE_DEFAULT;
  241|  1.12M|    ps_dec_op->u4_ts = (UWORD32)(-1);
  242|  1.12M|    ps_dec_op->u4_disp_buf_id = ps_codec->i4_disp_buf_id;
  243|  1.12M|    if(ps_codec->i4_flush_mode)
  ------------------
  |  Branch (243:8): [True: 0, False: 1.12M]
  ------------------
  244|      0|    {
  245|      0|        ps_dec_op->u4_num_bytes_consumed = 0;
  246|       |        /*In the case of flush ,since no frame is decoded set pic type as invalid*/
  247|      0|        ps_dec_op->u4_is_ref_flag = 0;
  248|      0|        ps_dec_op->e_pic_type = IV_NA_FRAME;
  249|      0|        ps_dec_op->u4_frame_decoded_flag = 0;
  250|       |
  251|      0|    }
  252|       |    /* If there is a display buffer */
  253|  1.12M|    if(ps_codec->ps_disp_buf)
  ------------------
  |  Branch (253:8): [True: 4.85k, False: 1.12M]
  ------------------
  254|  4.85k|    {
  255|  4.85k|        pic_buf_t *ps_disp_buf = ps_codec->ps_disp_buf;
  256|  4.85k|        sei_params_t *ps_sei = &ps_disp_buf->s_sei_params;
  257|       |
  258|  4.85k|        if(ps_sei->i1_sei_parameters_present_flag &&
  ------------------
  |  Branch (258:12): [True: 46, False: 4.80k]
  ------------------
  259|  4.85k|           ps_sei->i1_pic_timing_params_present_flag)
  ------------------
  |  Branch (259:12): [True: 10, False: 36]
  ------------------
  260|     10|        {
  261|     10|            UWORD32 u4_pic_struct;
  262|     10|            u4_pic_struct = ps_sei->s_pic_timing_sei_params.u4_pic_struct;
  263|     10|            switch(u4_pic_struct)
  264|     10|            {
  265|      0|                case 1:
  ------------------
  |  Branch (265:17): [True: 0, False: 10]
  ------------------
  266|      0|                    ps_dec_op->e4_fld_type = IV_TOP_FLD;
  267|      0|                    ps_dec_op->u4_progressive_frame_flag = 0;
  268|      0|                    break;
  269|      0|                case 2:
  ------------------
  |  Branch (269:17): [True: 0, False: 10]
  ------------------
  270|      0|                    ps_dec_op->e4_fld_type = IV_BOT_FLD;
  271|      0|                    ps_dec_op->u4_progressive_frame_flag = 0;
  272|      0|                    break;
  273|     10|                case 0:
  ------------------
  |  Branch (273:17): [True: 10, False: 0]
  ------------------
  274|     10|                default:
  ------------------
  |  Branch (274:17): [True: 0, False: 10]
  ------------------
  275|     10|                    ps_dec_op->e4_fld_type = IV_FLD_TYPE_DEFAULT;
  276|     10|                    ps_dec_op->u4_progressive_frame_flag = 1;
  277|     10|                    break;
  278|     10|            }
  279|     10|        }
  280|  4.85k|        ps_dec_op->i4_display_index = ps_disp_buf->i4_abs_poc;
  281|  4.85k|        ps_dec_op->u4_output_present = 1;
  282|  4.85k|        ps_dec_op->u4_ts = ps_disp_buf->u4_ts;
  283|  4.85k|        if((ps_codec->i4_flush_mode == 0) && (ps_codec->s_parse.i4_end_of_frame == 0))
  ------------------
  |  Branch (283:12): [True: 4.85k, False: 0]
  |  Branch (283:46): [True: 0, False: 4.85k]
  ------------------
  284|      0|            ps_dec_op->u4_output_present = 0;
  285|  4.85k|        ps_dec_op->s_disp_frm_buf.u4_y_wd = ps_codec->i4_disp_wd;
  286|  4.85k|        ps_dec_op->s_disp_frm_buf.u4_y_ht = ps_codec->i4_disp_ht;
  287|       |
  288|  4.85k|        if(ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (288:12): [True: 0, False: 4.85k]
  ------------------
  289|      0|        {
  290|      0|            ps_dec_op->s_disp_frm_buf.pv_y_buf = ps_disp_buf->pu1_luma;
  291|      0|            if(ps_codec->e_chroma_fmt != IV_YUV_420P)
  ------------------
  |  Branch (291:16): [True: 0, False: 0]
  ------------------
  292|      0|            {
  293|      0|                ps_dec_op->s_disp_frm_buf.pv_u_buf = ps_disp_buf->pu1_chroma;
  294|      0|                ps_dec_op->s_disp_frm_buf.pv_v_buf = NULL;
  295|      0|            }
  296|      0|            else
  297|      0|            {
  298|      0|                WORD32 i;
  299|      0|                UWORD8 *pu1_u_dst = NULL, *pu1_v_dst = NULL;
  300|      0|                for(i = 0; i < ps_codec->i4_share_disp_buf_cnt; i++)
  ------------------
  |  Branch (300:28): [True: 0, False: 0]
  ------------------
  301|      0|                {
  302|      0|                    WORD32 diff = ps_disp_buf->pu1_luma - ps_codec->s_disp_buffer[i].pu1_bufs[0];
  303|      0|                    if(diff == (ps_codec->i4_strd * PAD_TOP + PAD_LEFT))
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                                  if(diff == (ps_codec->i4_strd * PAD_TOP + PAD_LEFT))
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  |  Branch (303:24): [True: 0, False: 0]
  ------------------
  304|      0|                    {
  305|      0|                        pu1_u_dst = ps_codec->s_disp_buffer[i].pu1_bufs[1];
  306|      0|                        pu1_u_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                                      pu1_u_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  307|       |
  308|      0|                        pu1_v_dst = ps_codec->s_disp_buffer[i].pu1_bufs[2];
  309|      0|                        pu1_v_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                                      pu1_v_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  310|      0|                        break;
  311|      0|                    }
  312|      0|                }
  313|      0|                ps_dec_op->s_disp_frm_buf.pv_u_buf = pu1_u_dst;
  314|      0|                ps_dec_op->s_disp_frm_buf.pv_v_buf = pu1_v_dst;
  315|      0|            }
  316|      0|            ps_dec_op->s_disp_frm_buf.u4_y_strd = ps_codec->i4_strd;
  317|      0|        }
  318|  4.85k|        else
  319|  4.85k|        {
  320|  4.85k|            ps_dec_op->s_disp_frm_buf.pv_y_buf =
  321|  4.85k|                            ps_dec_ip->s_out_buffer.pu1_bufs[0];
  322|  4.85k|            ps_dec_op->s_disp_frm_buf.pv_u_buf =
  323|  4.85k|                            ps_dec_ip->s_out_buffer.pu1_bufs[1];
  324|  4.85k|            ps_dec_op->s_disp_frm_buf.pv_v_buf =
  325|  4.85k|                            ps_dec_ip->s_out_buffer.pu1_bufs[2];
  326|  4.85k|            ps_dec_op->s_disp_frm_buf.u4_y_strd = ps_codec->i4_disp_strd;
  327|  4.85k|        }
  328|       |
  329|  4.85k|        if((IV_YUV_420SP_VU == ps_codec->e_chroma_fmt)
  ------------------
  |  Branch (329:12): [True: 498, False: 4.35k]
  ------------------
  330|  4.85k|                        || (IV_YUV_420SP_UV == ps_codec->e_chroma_fmt))
  ------------------
  |  Branch (330:28): [True: 1.51k, False: 2.84k]
  ------------------
  331|  2.00k|        {
  332|  2.00k|            ps_dec_op->s_disp_frm_buf.u4_u_strd =
  333|  2.00k|                            ps_dec_op->s_disp_frm_buf.u4_y_strd;
  334|  2.00k|            ps_dec_op->s_disp_frm_buf.u4_v_strd = 0;
  335|  2.00k|            ps_dec_op->s_disp_frm_buf.u4_u_wd =
  336|  2.00k|                            ps_dec_op->s_disp_frm_buf.u4_y_wd;
  337|  2.00k|            ps_dec_op->s_disp_frm_buf.u4_v_wd = 0;
  338|  2.00k|            ps_dec_op->s_disp_frm_buf.u4_u_ht =
  339|  2.00k|                            ps_dec_op->s_disp_frm_buf.u4_y_ht / 2;
  340|  2.00k|            ps_dec_op->s_disp_frm_buf.u4_v_ht = 0;
  341|  2.00k|        }
  342|  2.84k|        else if(IV_YUV_420P == ps_codec->e_chroma_fmt)
  ------------------
  |  Branch (342:17): [True: 1.67k, False: 1.17k]
  ------------------
  343|  1.67k|        {
  344|  1.67k|            ps_dec_op->s_disp_frm_buf.u4_u_strd =
  345|  1.67k|                            ps_dec_op->s_disp_frm_buf.u4_y_strd / 2;
  346|  1.67k|            ps_dec_op->s_disp_frm_buf.u4_v_strd =
  347|  1.67k|                            ps_dec_op->s_disp_frm_buf.u4_y_strd / 2;
  348|  1.67k|            ps_dec_op->s_disp_frm_buf.u4_u_wd =
  349|  1.67k|                            ps_dec_op->s_disp_frm_buf.u4_y_wd / 2;
  350|  1.67k|            ps_dec_op->s_disp_frm_buf.u4_v_wd =
  351|  1.67k|                            ps_dec_op->s_disp_frm_buf.u4_y_wd / 2;
  352|  1.67k|            ps_dec_op->s_disp_frm_buf.u4_u_ht =
  353|  1.67k|                            ps_dec_op->s_disp_frm_buf.u4_y_ht / 2;
  354|  1.67k|            ps_dec_op->s_disp_frm_buf.u4_v_ht =
  355|  1.67k|                            ps_dec_op->s_disp_frm_buf.u4_y_ht / 2;
  356|  1.67k|        }
  357|       |
  358|  4.85k|    }
  359|  1.12M|    else if(ps_codec->i4_flush_mode)
  ------------------
  |  Branch (359:13): [True: 0, False: 1.12M]
  ------------------
  360|      0|    {
  361|      0|        ps_dec_op->u4_error_code = IHEVCD_END_OF_SEQUENCE;
  362|       |        /* Come out of flush mode */
  363|      0|        ps_codec->i4_flush_mode = 0;
  364|      0|    }
  365|       |
  366|  1.12M|    if(ps_codec->u1_enable_cu_info && ps_dec_op->u4_output_present)
  ------------------
  |  Branch (366:8): [True: 0, False: 1.12M]
  |  Branch (366:39): [True: 0, False: 0]
  ------------------
  367|      0|    {
  368|      0|        WORD32 info_map_dst_strd = ALIGN8(ps_codec->i4_wd) >> 3;
  ------------------
  |  |   53|      0|#define ALIGN8(x)   ((((x) + 7) >> 3) << 3)
  ------------------
  369|      0|        WORD32 info_map_src_strd = ALIGN64(ps_codec->i4_wd) >> 3;
  ------------------
  |  |   50|      0|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  370|      0|        WORD32 info_map_ht = ALIGN8(ps_codec->i4_ht);
  ------------------
  |  |   53|      0|#define ALIGN8(x)   ((((x) + 7) >> 3) << 3)
  ------------------
  371|      0|        UWORD32 info_map_size = (ALIGN8(ps_codec->i4_wd) * info_map_ht) >> 6;
  ------------------
  |  |   53|      0|#define ALIGN8(x)   ((((x) + 7) >> 3) << 3)
  ------------------
  372|      0|        WORD32 vert_8x8;
  373|      0|        UWORD8 *pu1_out_qp_map, *pu1_qp_map;
  374|      0|        UWORD8 *pu1_out_blk_type_map, *pu1_type_map;
  375|       |
  376|      0|        if(ps_hevcd_dec_ip->pu1_8x8_blk_qp_map)
  ------------------
  |  Branch (376:12): [True: 0, False: 0]
  ------------------
  377|      0|        {
  378|      0|            ps_hevcd_dec_op->pu1_8x8_blk_qp_map = ps_hevcd_dec_ip->pu1_8x8_blk_qp_map;
  379|      0|            ps_hevcd_dec_op->u4_8x8_blk_qp_map_size = info_map_size;
  380|       |
  381|      0|            pu1_out_qp_map = ps_hevcd_dec_op->pu1_8x8_blk_qp_map;
  382|      0|            pu1_qp_map = ps_codec->as_buf_id_info_map[ps_codec->i4_disp_buf_id].pu1_qp_map;
  383|      0|            for(vert_8x8 = 0; vert_8x8 < info_map_ht; vert_8x8++)
  ------------------
  |  Branch (383:31): [True: 0, False: 0]
  ------------------
  384|      0|            {
  385|      0|                memcpy(pu1_out_qp_map, pu1_qp_map, info_map_dst_strd);
  386|      0|                pu1_out_qp_map += info_map_dst_strd;
  387|      0|                pu1_qp_map += info_map_src_strd;
  388|      0|            }
  389|      0|        }
  390|       |
  391|      0|        if(ps_hevcd_dec_ip->pu1_8x8_blk_type_map)
  ------------------
  |  Branch (391:12): [True: 0, False: 0]
  ------------------
  392|      0|        {
  393|      0|            ps_hevcd_dec_op->pu1_8x8_blk_type_map = ps_hevcd_dec_ip->pu1_8x8_blk_type_map;
  394|      0|            ps_hevcd_dec_op->u4_8x8_blk_type_map_size = info_map_size;
  395|       |
  396|      0|            pu1_out_blk_type_map = ps_hevcd_dec_op->pu1_8x8_blk_type_map;
  397|      0|            pu1_type_map =
  398|      0|                ps_codec->as_buf_id_info_map[ps_codec->i4_disp_buf_id].pu1_cu_type_map;
  399|      0|            for(vert_8x8 = 0; vert_8x8 < info_map_ht; vert_8x8++)
  ------------------
  |  Branch (399:31): [True: 0, False: 0]
  ------------------
  400|      0|            {
  401|      0|                memcpy(pu1_out_blk_type_map, pu1_type_map, info_map_dst_strd);
  402|      0|                pu1_out_blk_type_map += info_map_dst_strd;
  403|      0|                pu1_type_map += info_map_src_strd;
  404|      0|            }
  405|      0|        }
  406|      0|    }
  407|  1.12M|}
ihevcd_decode.c:ihevcd_map_error:
  126|  1.12M|{
  127|  1.12M|    UWORD32 error_code = 0;
  128|  1.12M|    error_code = e_error;
  129|  1.12M|    switch(error_code)
  130|  1.12M|    {
  131|  1.10M|        case IHEVCD_SUCCESS :
  ------------------
  |  Branch (131:9): [True: 1.10M, False: 24.4k]
  ------------------
  132|  1.10M|            break;
  133|      0|        case IHEVCD_INIT_NOT_DONE:
  ------------------
  |  Branch (133:9): [True: 0, False: 1.12M]
  ------------------
  134|      0|        case IHEVCD_LEVEL_UNSUPPORTED:
  ------------------
  |  Branch (134:9): [True: 0, False: 1.12M]
  ------------------
  135|      0|        case IHEVCD_NUM_REF_UNSUPPORTED:
  ------------------
  |  Branch (135:9): [True: 0, False: 1.12M]
  ------------------
  136|      0|        case IHEVCD_NUM_REORDER_UNSUPPORTED:
  ------------------
  |  Branch (136:9): [True: 0, False: 1.12M]
  ------------------
  137|      0|        case IHEVCD_NUM_EXTRA_DISP_UNSUPPORTED:
  ------------------
  |  Branch (137:9): [True: 0, False: 1.12M]
  ------------------
  138|      0|        case IHEVCD_INSUFFICIENT_MEM_MVBANK:
  ------------------
  |  Branch (138:9): [True: 0, False: 1.12M]
  ------------------
  139|      0|        case IHEVCD_INSUFFICIENT_MEM_PICBUF:
  ------------------
  |  Branch (139:9): [True: 0, False: 1.12M]
  ------------------
  140|    953|        case IHEVCD_UNSUPPORTED_CHROMA_FMT_IDC:
  ------------------
  |  Branch (140:9): [True: 953, False: 1.12M]
  ------------------
  141|  2.04k|        case IHEVCD_UNSUPPORTED_BIT_DEPTH:
  ------------------
  |  Branch (141:9): [True: 1.09k, False: 1.12M]
  ------------------
  142|  2.04k|        case IVD_MEM_ALLOC_FAILED:
  ------------------
  |  Branch (142:9): [True: 0, False: 1.12M]
  ------------------
  143|  4.31k|        case IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED:
  ------------------
  |  Branch (143:9): [True: 2.26k, False: 1.12M]
  ------------------
  144|  4.31k|            error_code |= 1 << IVD_FATALERROR;
  145|  4.31k|            break;
  146|      0|        case IHEVCD_INVALID_DISP_STRD:
  ------------------
  |  Branch (146:9): [True: 0, False: 1.12M]
  ------------------
  147|      0|        case IHEVCD_CXA_VERS_BUF_INSUFFICIENT:
  ------------------
  |  Branch (147:9): [True: 0, False: 1.12M]
  ------------------
  148|      0|        case IHEVCD_UNSUPPORTED_VPS_ID:
  ------------------
  |  Branch (148:9): [True: 0, False: 1.12M]
  ------------------
  149|  10.0k|        case IHEVCD_UNSUPPORTED_SPS_ID:
  ------------------
  |  Branch (149:9): [True: 10.0k, False: 1.11M]
  ------------------
  150|  10.2k|        case IHEVCD_UNSUPPORTED_PPS_ID:
  ------------------
  |  Branch (150:9): [True: 237, False: 1.12M]
  ------------------
  151|  10.2k|        case IHEVCD_BUF_MGR_ERROR:
  ------------------
  |  Branch (151:9): [True: 0, False: 1.12M]
  ------------------
  152|  10.2k|        case IHEVCD_NO_FREE_MVBANK:
  ------------------
  |  Branch (152:9): [True: 13, False: 1.12M]
  ------------------
  153|  10.3k|        case IHEVCD_NO_FREE_PICBUF:
  ------------------
  |  Branch (153:9): [True: 22, False: 1.12M]
  ------------------
  154|  10.3k|        case IHEVCD_SLICE_IN_HEADER_MODE:
  ------------------
  |  Branch (154:9): [True: 0, False: 1.12M]
  ------------------
  155|  10.3k|        case IHEVCD_END_OF_SEQUENCE:
  ------------------
  |  Branch (155:9): [True: 0, False: 1.12M]
  ------------------
  156|  10.3k|            break;
  157|  9.80k|        default:
  ------------------
  |  Branch (157:9): [True: 9.80k, False: 1.11M]
  ------------------
  158|  9.80k|            break;
  159|  1.12M|    }
  160|  1.12M|    return error_code;
  161|  1.12M|}

ihevcd_fmt_conv_420sp_to_rgb565:
  125|  1.13k|{
  126|       |
  127|       |
  128|  1.13k|    WORD16  i2_r, i2_g, i2_b;
  129|  1.13k|    UWORD32  u4_r, u4_g, u4_b;
  130|  1.13k|    WORD16  i2_i, i2_j;
  131|  1.13k|    UWORD8  *pu1_y_src_nxt;
  132|  1.13k|    UWORD16 *pu2_rgb_dst_NextRow;
  133|       |
  134|  1.13k|    UWORD8 *pu1_u_src, *pu1_v_src;
  135|       |
  136|  1.13k|    if(is_u_first)
  ------------------
  |  Branch (136:8): [True: 1.13k, False: 0]
  ------------------
  137|  1.13k|    {
  138|  1.13k|        pu1_u_src = (UWORD8 *)pu1_uv_src;
  139|  1.13k|        pu1_v_src = (UWORD8 *)pu1_uv_src + 1;
  140|  1.13k|    }
  141|      0|    else
  142|      0|    {
  143|      0|        pu1_u_src = (UWORD8 *)pu1_uv_src + 1;
  144|      0|        pu1_v_src = (UWORD8 *)pu1_uv_src;
  145|      0|    }
  146|       |
  147|  1.13k|    pu1_y_src_nxt   = pu1_y_src + src_y_strd;
  148|  1.13k|    pu2_rgb_dst_NextRow = pu2_rgb_dst + dst_strd;
  149|       |
  150|  46.2k|    for(i2_i = 0; i2_i < (ht >> 1); i2_i++)
  ------------------
  |  Branch (150:19): [True: 45.1k, False: 1.13k]
  ------------------
  151|  45.1k|    {
  152|  14.3M|        for(i2_j = (wd >> 1); i2_j > 0; i2_j--)
  ------------------
  |  Branch (152:31): [True: 14.3M, False: 45.1k]
  ------------------
  153|  14.3M|        {
  154|  14.3M|            i2_b = ((*pu1_u_src - 128) * COEFF4 >> 13);
  ------------------
  |  |   44|  14.3M|#define COEFF4          16530
  ------------------
  155|  14.3M|            i2_g = ((*pu1_u_src - 128) * COEFF2 + (*pu1_v_src - 128) * COEFF3) >> 13;
  ------------------
  |  |   42|  14.3M|#define COEFF2          -3207
  ------------------
                          i2_g = ((*pu1_u_src - 128) * COEFF2 + (*pu1_v_src - 128) * COEFF3) >> 13;
  ------------------
  |  |   43|  14.3M|#define COEFF3          -6664
  ------------------
  156|  14.3M|            i2_r = ((*pu1_v_src - 128) * COEFF1) >> 13;
  ------------------
  |  |   41|  14.3M|#define COEFF1          13073
  ------------------
  157|       |
  158|  14.3M|            pu1_u_src += 2;
  159|  14.3M|            pu1_v_src += 2;
  160|       |            /* pixel 0 */
  161|       |            /* B */
  162|  14.3M|            u4_b = CLIP_U8(*pu1_y_src + i2_b);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 899k, False: 13.4M]
  |  |  |  |  |  Branch (40:53): [True: 4.66M, False: 8.78M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|  14.3M|            u4_b >>= 3;
  164|       |            /* G */
  165|  14.3M|            u4_g = CLIP_U8(*pu1_y_src + i2_g);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 212k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 189k, False: 13.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  14.3M|            u4_g >>= 2;
  167|       |            /* R */
  168|  14.3M|            u4_r = CLIP_U8(*pu1_y_src + i2_r);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 229k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 4.76M, False: 9.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|  14.3M|            u4_r >>= 3;
  170|       |
  171|  14.3M|            pu1_y_src++;
  172|  14.3M|            *pu2_rgb_dst++ = ((u4_r << 11) | (u4_g << 5) | u4_b);
  173|       |
  174|       |            /* pixel 1 */
  175|       |            /* B */
  176|  14.3M|            u4_b = CLIP_U8(*pu1_y_src + i2_b);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 903k, False: 13.4M]
  |  |  |  |  |  Branch (40:53): [True: 4.66M, False: 8.78M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  177|  14.3M|            u4_b >>= 3;
  178|       |            /* G */
  179|  14.3M|            u4_g = CLIP_U8(*pu1_y_src + i2_g);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 212k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 189k, False: 13.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|  14.3M|            u4_g >>= 2;
  181|       |            /* R */
  182|  14.3M|            u4_r = CLIP_U8(*pu1_y_src + i2_r);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 229k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 4.76M, False: 9.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|  14.3M|            u4_r >>= 3;
  184|       |
  185|  14.3M|            pu1_y_src++;
  186|  14.3M|            *pu2_rgb_dst++ = ((u4_r << 11) | (u4_g << 5) | u4_b);
  187|       |
  188|       |            /* pixel 2 */
  189|       |            /* B */
  190|  14.3M|            u4_b = CLIP_U8(*pu1_y_src_nxt + i2_b);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 902k, False: 13.4M]
  |  |  |  |  |  Branch (40:53): [True: 4.66M, False: 8.78M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|  14.3M|            u4_b >>= 3;
  192|       |            /* G */
  193|  14.3M|            u4_g = CLIP_U8(*pu1_y_src_nxt + i2_g);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 209k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 188k, False: 13.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|  14.3M|            u4_g >>= 2;
  195|       |            /* R */
  196|  14.3M|            u4_r = CLIP_U8(*pu1_y_src_nxt + i2_r);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 230k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 4.76M, False: 9.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|  14.3M|            u4_r >>= 3;
  198|       |
  199|  14.3M|            pu1_y_src_nxt++;
  200|  14.3M|            *pu2_rgb_dst_NextRow++ = ((u4_r << 11) | (u4_g << 5) | u4_b);
  201|       |
  202|       |            /* pixel 3 */
  203|       |            /* B */
  204|  14.3M|            u4_b = CLIP_U8(*pu1_y_src_nxt + i2_b);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 903k, False: 13.4M]
  |  |  |  |  |  Branch (40:53): [True: 4.66M, False: 8.78M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|  14.3M|            u4_b >>= 3;
  206|       |            /* G */
  207|  14.3M|            u4_g = CLIP_U8(*pu1_y_src_nxt + i2_g);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 209k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 187k, False: 13.9M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|  14.3M|            u4_g >>= 2;
  209|       |            /* R */
  210|  14.3M|            u4_r = CLIP_U8(*pu1_y_src_nxt + i2_r);
  ------------------
  |  |   40|  14.3M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  14.3M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 230k, False: 14.1M]
  |  |  |  |  |  Branch (40:53): [True: 4.76M, False: 9.35M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|  14.3M|            u4_r >>= 3;
  212|       |
  213|  14.3M|            pu1_y_src_nxt++;
  214|  14.3M|            *pu2_rgb_dst_NextRow++ = ((u4_r << 11) | (u4_g << 5) | u4_b);
  215|       |
  216|  14.3M|        }
  217|       |
  218|  45.1k|        pu1_u_src = pu1_u_src + src_uv_strd - wd;
  219|  45.1k|        pu1_v_src = pu1_v_src + src_uv_strd - wd;
  220|       |
  221|  45.1k|        pu1_y_src = pu1_y_src + (src_y_strd << 1) - wd;
  222|  45.1k|        pu1_y_src_nxt = pu1_y_src_nxt + (src_y_strd << 1) - wd;
  223|       |
  224|  45.1k|        pu2_rgb_dst = pu2_rgb_dst_NextRow - wd + dst_strd;
  225|  45.1k|        pu2_rgb_dst_NextRow = pu2_rgb_dst_NextRow + (dst_strd << 1) - wd;
  226|  45.1k|    }
  227|       |
  228|       |
  229|  1.13k|}
ihevcd_fmt_conv_420sp_to_420sp:
  391|  40.4k|{
  392|  40.4k|    UWORD8 *pu1_src, *pu1_dst;
  393|  40.4k|    WORD32 num_rows, num_cols, src_strd, dst_strd;
  394|  40.4k|    WORD32 i;
  395|       |
  396|       |    /* copy luma */
  397|  40.4k|    pu1_src = (UWORD8 *)pu1_y_src;
  398|  40.4k|    pu1_dst = (UWORD8 *)pu1_y_dst;
  399|       |
  400|  40.4k|    num_rows = ht;
  401|  40.4k|    num_cols = wd;
  402|       |
  403|  40.4k|    src_strd = src_y_strd;
  404|  40.4k|    dst_strd = dst_y_strd;
  405|       |
  406|  1.46M|    for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (406:16): [True: 1.42M, False: 40.4k]
  ------------------
  407|  1.42M|    {
  408|  1.42M|        memcpy(pu1_dst, pu1_src, num_cols);
  409|  1.42M|        pu1_dst += dst_strd;
  410|  1.42M|        pu1_src += src_strd;
  411|  1.42M|    }
  412|       |
  413|       |    /* copy U and V */
  414|  40.4k|    pu1_src = (UWORD8 *)pu1_uv_src;
  415|  40.4k|    pu1_dst = (UWORD8 *)pu1_uv_dst;
  416|       |
  417|  40.4k|    num_rows = ht >> 1;
  418|  40.4k|    num_cols = wd;
  419|       |
  420|  40.4k|    src_strd = src_uv_strd;
  421|  40.4k|    dst_strd = dst_uv_strd;
  422|       |
  423|   818k|    for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (423:16): [True: 778k, False: 40.4k]
  ------------------
  424|   778k|    {
  425|   778k|        memcpy(pu1_dst, pu1_src, num_cols);
  426|   778k|        pu1_dst += dst_strd;
  427|   778k|        pu1_src += src_strd;
  428|   778k|    }
  429|  40.4k|    return;
  430|  40.4k|}
ihevcd_fmt_conv_420sp_to_420p:
  602|  9.56k|{
  603|  9.56k|    UWORD8 *pu1_src, *pu1_dst;
  604|  9.56k|    UWORD8 *pu1_u_src, *pu1_v_src;
  605|  9.56k|    WORD32 num_rows, num_cols, src_strd, dst_strd;
  606|  9.56k|    WORD32 i, j;
  607|       |
  608|  9.56k|    if(0 == disable_luma_copy)
  ------------------
  |  Branch (608:8): [True: 0, False: 9.56k]
  ------------------
  609|      0|    {
  610|       |        /* copy luma */
  611|      0|        pu1_src = (UWORD8 *)pu1_y_src;
  612|      0|        pu1_dst = (UWORD8 *)pu1_y_dst;
  613|       |
  614|      0|        num_rows = ht;
  615|      0|        num_cols = wd;
  616|       |
  617|      0|        src_strd = src_y_strd;
  618|      0|        dst_strd = dst_y_strd;
  619|       |
  620|      0|        for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (620:20): [True: 0, False: 0]
  ------------------
  621|      0|        {
  622|      0|            memcpy(pu1_dst, pu1_src, num_cols);
  623|      0|            pu1_dst += dst_strd;
  624|      0|            pu1_src += src_strd;
  625|      0|        }
  626|      0|    }
  627|       |    /* de-interleave U and V and copy to destination */
  628|  9.56k|    if(is_u_first)
  ------------------
  |  Branch (628:8): [True: 9.56k, False: 18.4E]
  ------------------
  629|  9.56k|    {
  630|  9.56k|        pu1_u_src = (UWORD8 *)pu1_uv_src;
  631|  9.56k|        pu1_v_src = (UWORD8 *)pu1_uv_src + 1;
  632|  9.56k|    }
  633|  18.4E|    else
  634|  18.4E|    {
  635|  18.4E|        pu1_u_src = (UWORD8 *)pu1_uv_src + 1;
  636|  18.4E|        pu1_v_src = (UWORD8 *)pu1_uv_src;
  637|  18.4E|    }
  638|       |
  639|       |
  640|  9.56k|    num_rows = ht >> 1;
  641|  9.56k|    num_cols = wd >> 1;
  642|       |
  643|  9.56k|    src_strd = src_uv_strd;
  644|  9.56k|    dst_strd = dst_uv_strd;
  645|       |
  646|   721k|    for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (646:16): [True: 711k, False: 9.56k]
  ------------------
  647|   711k|    {
  648|   261M|        for(j = 0; j < num_cols; j++)
  ------------------
  |  Branch (648:20): [True: 260M, False: 711k]
  ------------------
  649|   260M|        {
  650|   260M|            pu1_u_dst[j] = pu1_u_src[j * 2];
  651|   260M|            pu1_v_dst[j] = pu1_v_src[j * 2];
  652|   260M|        }
  653|       |
  654|   711k|        pu1_u_dst += dst_strd;
  655|   711k|        pu1_v_dst += dst_strd;
  656|   711k|        pu1_u_src += src_strd;
  657|   711k|        pu1_v_src += src_strd;
  658|   711k|    }
  659|  9.56k|    return;
  660|  9.56k|}
ihevcd_fmt_conv:
  699|  57.9k|{
  700|  57.9k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  701|  57.9k|    pic_buf_t *ps_disp_pic;
  702|  57.9k|    UWORD8 *pu1_y_src, *pu1_uv_src;
  703|  57.9k|    UWORD8 *pu1_y_dst_tmp, *pu1_uv_dst_tmp;
  704|  57.9k|    UWORD8 *pu1_u_dst_tmp, *pu1_v_dst_tmp;
  705|  57.9k|    UWORD16 *pu2_rgb_dst_tmp;
  706|  57.9k|    UWORD32 *pu4_rgb_dst_tmp;
  707|  57.9k|    WORD32 is_u_first;
  708|  57.9k|    UWORD8 *pu1_luma;
  709|  57.9k|    UWORD8 *pu1_chroma;
  710|  57.9k|    sps_t *ps_sps;
  711|  57.9k|    WORD32 disable_luma_copy;
  712|  57.9k|    WORD32 crop_unit_x, crop_unit_y;
  713|       |
  714|  57.9k|    if(0 == num_rows)
  ------------------
  |  Branch (714:8): [True: 0, False: 57.9k]
  ------------------
  715|      0|        return ret;
  716|       |
  717|       |    /* In case processing is disabled, then no need to format convert/copy */
  718|  57.9k|    PROFILE_DISABLE_FMT_CONV();
  ------------------
  |  |   78|  57.9k|#define PROFILE_DISABLE_FMT_CONV();
  ------------------
  719|  57.9k|    ps_sps = ps_proc->ps_sps;
  720|       |
  721|  57.9k|    crop_unit_x = 1;
  722|  57.9k|    crop_unit_y = 1;
  723|       |
  724|  57.9k|    if(CHROMA_FMT_IDC_YUV420 == ps_sps->i1_chroma_format_idc)
  ------------------
  |  Branch (724:8): [True: 57.9k, False: 61]
  ------------------
  725|  57.9k|    {
  726|  57.9k|        crop_unit_x = 2;
  727|  57.9k|        crop_unit_y = 2;
  728|  57.9k|    }
  729|       |
  730|  57.9k|    ps_disp_pic = ps_codec->ps_disp_buf;
  731|  57.9k|    pu1_luma = ps_disp_pic->pu1_luma;
  732|  57.9k|    pu1_chroma = ps_disp_pic->pu1_chroma;
  733|       |
  734|       |
  735|       |    /* Take care of cropping */
  736|  57.9k|    pu1_luma    += ps_codec->i4_strd * ps_sps->i2_pic_crop_top_offset * crop_unit_y + ps_sps->i2_pic_crop_left_offset * crop_unit_x;
  737|       |
  738|       |    /* Left offset is multiplied by 2 because buffer is UV interleaved */
  739|  57.9k|    pu1_chroma  += ps_codec->i4_strd * ps_sps->i2_pic_crop_top_offset + ps_sps->i2_pic_crop_left_offset * 2;
  740|       |
  741|       |
  742|  57.9k|    is_u_first = (IV_YUV_420SP_UV == ps_codec->e_ref_chroma_fmt) ? 1 : 0;
  ------------------
  |  Branch (742:18): [True: 54.1k, False: 3.87k]
  ------------------
  743|       |
  744|       |    /* In case of 420P output luma copy is disabled for shared mode */
  745|  57.9k|    disable_luma_copy = 0;
  746|  57.9k|    if(1 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (746:8): [True: 0, False: 57.9k]
  ------------------
  747|      0|    {
  748|      0|        disable_luma_copy = 1;
  749|      0|    }
  750|       |
  751|       |
  752|       |
  753|  57.9k|    {
  754|  57.9k|        pu1_y_src   = pu1_luma + cur_row * ps_codec->i4_strd;
  755|  57.9k|        pu1_uv_src  = pu1_chroma + (cur_row / 2) * ps_codec->i4_strd;
  756|       |
  757|       |        /* In case of shared mode, with 420P output, get chroma destination */
  758|  57.9k|        if((1 == ps_codec->i4_share_disp_buf) && (IV_YUV_420P == ps_codec->e_chroma_fmt))
  ------------------
  |  Branch (758:12): [True: 0, False: 57.9k]
  |  Branch (758:50): [True: 0, False: 0]
  ------------------
  759|      0|        {
  760|      0|            WORD32 i;
  761|      0|            for(i = 0; i < ps_codec->i4_share_disp_buf_cnt; i++)
  ------------------
  |  Branch (761:24): [True: 0, False: 0]
  ------------------
  762|      0|            {
  763|      0|                WORD32 diff = ps_disp_pic->pu1_luma - ps_codec->s_disp_buffer[i].pu1_bufs[0];
  764|      0|                if(diff == (ps_codec->i4_strd * PAD_TOP + PAD_LEFT))
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                              if(diff == (ps_codec->i4_strd * PAD_TOP + PAD_LEFT))
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  |  Branch (764:20): [True: 0, False: 0]
  ------------------
  765|      0|                {
  766|      0|                    pu1_u_dst = ps_codec->s_disp_buffer[i].pu1_bufs[1];
  767|      0|                    pu1_u_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                                  pu1_u_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  768|       |
  769|      0|                    pu1_v_dst = ps_codec->s_disp_buffer[i].pu1_bufs[2];
  770|      0|                    pu1_v_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                                  pu1_v_dst += (ps_codec->i4_strd * PAD_TOP) / 4 + (PAD_LEFT / 2);
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  771|      0|                    break;
  772|      0|                }
  773|      0|            }
  774|      0|        }
  775|  57.9k|        pu2_rgb_dst_tmp  = (UWORD16 *)pu1_y_dst;
  776|  57.9k|        pu2_rgb_dst_tmp  += cur_row * ps_codec->i4_disp_strd;
  777|  57.9k|        pu4_rgb_dst_tmp  = (UWORD32 *)pu1_y_dst;
  778|  57.9k|        pu4_rgb_dst_tmp  += cur_row * ps_codec->i4_disp_strd;
  779|  57.9k|        pu1_y_dst_tmp  = pu1_y_dst  + cur_row * ps_codec->i4_disp_strd;
  780|  57.9k|        pu1_uv_dst_tmp = pu1_u_dst  + (cur_row / 2) * ps_codec->i4_disp_strd;
  781|  57.9k|        pu1_u_dst_tmp = pu1_u_dst  + (cur_row / 2) * ps_codec->i4_disp_strd / 2;
  782|  57.9k|        pu1_v_dst_tmp = pu1_v_dst  + (cur_row / 2) * ps_codec->i4_disp_strd / 2;
  783|       |
  784|       |        /* In case of multi threaded implementation, format conversion might be called
  785|       |         * before reconstruction is completed. If the frame being converted/copied
  786|       |         * is same as the frame being reconstructed,
  787|       |         * Check how many rows can be format converted
  788|       |         * Convert those many rows and then check for remaining rows and so on
  789|       |         */
  790|       |
  791|  57.9k|        if((0 == ps_codec->i4_flush_mode) && (ps_codec->i4_disp_buf_id == ps_proc->i4_cur_pic_buf_id) && (1 < ps_codec->i4_num_cores))
  ------------------
  |  Branch (791:12): [True: 57.8k, False: 76]
  |  Branch (791:46): [True: 54.7k, False: 3.11k]
  |  Branch (791:106): [True: 53.6k, False: 1.14k]
  ------------------
  792|  53.6k|        {
  793|  53.6k|            WORD32 idx;
  794|  53.6k|            UWORD8 *pu1_buf;
  795|  53.6k|            WORD32 status;
  796|  53.6k|            WORD32 last_row = cur_row + num_rows;
  797|  53.6k|            WORD32 last_ctb_y;
  798|  53.6k|            UWORD32 ctb_in_row;
  799|       |
  800|  3.42M|            while(1)
  ------------------
  |  Branch (800:19): [Folded - Ignored]
  ------------------
  801|  3.42M|            {
  802|  3.42M|                last_row = cur_row + MAX(num_rows, (1 << ps_sps->i1_log2_ctb_size)) +
  ------------------
  |  |   42|  3.42M|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 0, False: 3.42M]
  |  |  ------------------
  ------------------
  803|  3.42M|                                ps_sps->i2_pic_crop_top_offset * crop_unit_y;
  804|  3.42M|                last_ctb_y = (last_row >> ps_sps->i1_log2_ctb_size) - 1;
  805|       |                /* Since deblocking works with a shift of -4, -4 ,wait till next CTB row is processed */
  806|  3.42M|                last_ctb_y++;
  807|       |                /* In case of a  conformance window, an extra wait of one row might be needed */
  808|  3.42M|                last_ctb_y++;
  809|  3.42M|                last_ctb_y = MIN(last_ctb_y, (ps_sps->i2_pic_ht_in_ctb - 1));
  ------------------
  |  |   43|  3.42M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 2.15M, False: 1.27M]
  |  |  ------------------
  ------------------
  810|       |
  811|  3.42M|                idx = (last_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  812|       |
  813|       |                /*Check if the row below is completely processed before proceeding with format conversion*/
  814|  3.42M|                status = 1;
  815|   205M|                for(ctb_in_row = 0; (WORD32)ctb_in_row < ps_sps->i2_pic_wd_in_ctb; ctb_in_row++)
  ------------------
  |  Branch (815:37): [True: 202M, False: 3.42M]
  ------------------
  816|   202M|                {
  817|   202M|                    pu1_buf = (ps_codec->pu1_proc_map + idx + ctb_in_row);
  818|   202M|                    status &= *pu1_buf;
  819|   202M|                }
  820|       |
  821|  3.42M|                if(status)
  ------------------
  |  Branch (821:20): [True: 53.5k, False: 3.37M]
  ------------------
  822|  53.5k|                {
  823|  53.5k|                    break;
  824|  53.5k|                }
  825|  3.37M|                else
  826|  3.37M|                {
  827|  3.37M|                    ithread_yield();
  828|  3.37M|                }
  829|  3.42M|            }
  830|  53.6k|        }
  831|       |
  832|       |
  833|  57.9k|        if((IV_YUV_420SP_UV == ps_codec->e_chroma_fmt) || (IV_YUV_420SP_VU == ps_codec->e_chroma_fmt))
  ------------------
  |  Branch (833:12): [True: 37.5k, False: 20.3k]
  |  Branch (833:59): [True: 3.79k, False: 16.5k]
  ------------------
  834|  41.1k|        {
  835|  41.1k|            ihevcd_fmt_conv_420sp_to_420sp_ft *fmt_conv_fptr;
  836|  41.1k|            if(ps_codec->i4_disp_wd >= MIN_FMT_CONV_SIMD_WIDTH)
  ------------------
  |  |   69|  41.1k|#define MIN_FMT_CONV_SIMD_WIDTH 32
  ------------------
  |  Branch (836:16): [True: 40.9k, False: 175]
  ------------------
  837|  40.9k|            {
  838|  40.9k|                fmt_conv_fptr = ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420sp_fptr;
  839|  40.9k|            }
  840|    175|            else
  841|    175|            {
  842|    175|                fmt_conv_fptr = ihevcd_fmt_conv_420sp_to_420sp;
  843|    175|            }
  844|  41.1k|            fmt_conv_fptr(pu1_y_src, pu1_uv_src,
  845|  41.1k|                          pu1_y_dst_tmp, pu1_uv_dst_tmp,
  846|  41.1k|                          ps_codec->i4_disp_wd,
  847|  41.1k|                          num_rows,
  848|  41.1k|                          ps_codec->i4_strd,
  849|  41.1k|                          ps_codec->i4_strd,
  850|  41.1k|                          ps_codec->i4_disp_strd,
  851|  41.1k|                          ps_codec->i4_disp_strd);
  852|  41.1k|        }
  853|  16.8k|        else if(IV_YUV_420P == ps_codec->e_chroma_fmt)
  ------------------
  |  Branch (853:17): [True: 9.76k, False: 7.04k]
  ------------------
  854|  9.76k|        {
  855|  9.76k|            ihevcd_fmt_conv_420sp_to_420p_ft *fmt_conv_fptr;
  856|  9.76k|            if(ps_codec->i4_disp_wd >= MIN_FMT_CONV_SIMD_WIDTH)
  ------------------
  |  |   69|  9.76k|#define MIN_FMT_CONV_SIMD_WIDTH 32
  ------------------
  |  Branch (856:16): [True: 7.30k, False: 2.46k]
  ------------------
  857|  7.30k|            {
  858|  7.30k|                fmt_conv_fptr = ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420p_fptr;
  859|  7.30k|            }
  860|  2.46k|            else
  861|  2.46k|            {
  862|  2.46k|                fmt_conv_fptr = ihevcd_fmt_conv_420sp_to_420p;
  863|  2.46k|            }
  864|       |
  865|  9.76k|            if(0 == disable_luma_copy)
  ------------------
  |  Branch (865:16): [True: 9.73k, False: 28]
  ------------------
  866|  9.73k|            {
  867|       |                // copy luma
  868|  9.73k|                WORD32 i;
  869|  9.73k|                WORD32 num_cols = ps_codec->i4_disp_wd;
  870|       |
  871|  1.65M|                for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (871:28): [True: 1.64M, False: 9.73k]
  ------------------
  872|  1.64M|                {
  873|  1.64M|                    memcpy(pu1_y_dst_tmp, pu1_y_src, num_cols);
  874|  1.64M|                    pu1_y_dst_tmp += ps_codec->i4_disp_strd;
  875|  1.64M|                    pu1_y_src += ps_codec->i4_strd;
  876|  1.64M|                }
  877|       |
  878|  9.73k|                disable_luma_copy = 1;
  879|  9.73k|            }
  880|  9.76k|            fmt_conv_fptr(pu1_y_src, pu1_uv_src,
  881|  9.76k|                          pu1_y_dst_tmp, pu1_u_dst_tmp, pu1_v_dst_tmp,
  882|  9.76k|                          ps_codec->i4_disp_wd,
  883|  9.76k|                          num_rows,
  884|  9.76k|                          ps_codec->i4_strd,
  885|  9.76k|                          ps_codec->i4_strd,
  886|  9.76k|                          ps_codec->i4_disp_strd,
  887|  9.76k|                          (ps_codec->i4_disp_strd / 2),
  888|  9.76k|                          is_u_first,
  889|  9.76k|                          disable_luma_copy);
  890|  9.76k|        }
  891|  7.04k|        else if(IV_RGB_565 == ps_codec->e_chroma_fmt)
  ------------------
  |  Branch (891:17): [True: 1.13k, False: 5.91k]
  ------------------
  892|  1.13k|        {
  893|  1.13k|            ihevcd_fmt_conv_420sp_to_rgb565_ft *fmt_conv_fptr;
  894|  1.13k|            if(ps_codec->i4_disp_wd >= MIN_FMT_CONV_SIMD_WIDTH)
  ------------------
  |  |   69|  1.13k|#define MIN_FMT_CONV_SIMD_WIDTH 32
  ------------------
  |  Branch (894:16): [True: 1.09k, False: 40]
  ------------------
  895|  1.09k|            {
  896|  1.09k|                fmt_conv_fptr = ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgb565_fptr;
  897|  1.09k|            }
  898|     40|            else
  899|     40|            {
  900|     40|                fmt_conv_fptr = ihevcd_fmt_conv_420sp_to_rgb565;
  901|     40|            }
  902|       |
  903|  1.13k|            fmt_conv_fptr(pu1_y_src, pu1_uv_src,
  904|  1.13k|                          pu2_rgb_dst_tmp,
  905|  1.13k|                          ps_codec->i4_disp_wd,
  906|  1.13k|                          num_rows,
  907|  1.13k|                          ps_codec->i4_strd,
  908|  1.13k|                          ps_codec->i4_strd,
  909|  1.13k|                          ps_codec->i4_disp_strd,
  910|  1.13k|                          is_u_first);
  911|  1.13k|        }
  912|  5.91k|        else if(IV_RGBA_8888 == ps_codec->e_chroma_fmt)
  ------------------
  |  Branch (912:17): [True: 0, False: 5.91k]
  ------------------
  913|      0|        {
  914|      0|            ihevcd_fmt_conv_420sp_to_rgba8888_ft *fmt_conv_fptr;
  915|      0|            if(ps_codec->i4_disp_wd >= MIN_FMT_CONV_SIMD_WIDTH)
  ------------------
  |  |   69|      0|#define MIN_FMT_CONV_SIMD_WIDTH 32
  ------------------
  |  Branch (915:16): [True: 0, False: 0]
  ------------------
  916|      0|            {
  917|      0|                fmt_conv_fptr = ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgba8888_fptr;
  918|      0|            }
  919|      0|            else
  920|      0|            {
  921|      0|                fmt_conv_fptr = ihevcd_fmt_conv_420sp_to_rgba8888;
  922|      0|            }
  923|       |
  924|      0|            ASSERT(is_u_first == 1);
  ------------------
  |  |   55|      0|#define ASSERT(x) assert((x))
  ------------------
  925|      0|            fmt_conv_fptr(pu1_y_src,
  926|      0|                          pu1_uv_src,
  927|      0|                          pu4_rgb_dst_tmp,
  928|      0|                          ps_codec->i4_disp_wd,
  929|      0|                          num_rows,
  930|      0|                          ps_codec->i4_strd,
  931|      0|                          ps_codec->i4_strd,
  932|      0|                          ps_codec->i4_disp_strd,
  933|      0|                          is_u_first);
  934|      0|        }
  935|       |
  936|       |
  937|       |
  938|  57.9k|    }
  939|  57.9k|    return (ret);
  940|  57.9k|}

ihevcd_get_mv_ctb:
  108|   323k|{
  109|       |
  110|   323k|    WORD32 i;
  111|   323k|    sps_t *ps_sps;
  112|   323k|    pps_t *ps_pps;
  113|   323k|    pu_t *ps_pu;
  114|   323k|    tile_t *ps_tile;
  115|   323k|    UWORD8 *pu1_pic_pu_map_ctb;
  116|   323k|    WORD32 num_minpu_in_ctb;
  117|   323k|    WORD32 ctb_start_pu_idx;
  118|   323k|    UWORD32 *pu4_top_pu_idx, *pu4_left_pu_idx, *pu4_top_left_pu_idx;
  119|   323k|    WORD32 pu_x_in_4x4, pu_y_in_4x4;
  120|   323k|    WORD32 pu_x_in_4x4_single_mcl, pu_y_in_4x4_single_mcl;
  121|   323k|    pu_mv_t s_pred_mv;
  122|   323k|    WORD32 ctb_size, ctb_size_in_min_pu;
  123|   323k|    WORD32 num_pu_per_ctb, pu_wd, pu_ht, pu_cnt;
  124|   323k|    WORD32  pu_wd_single_mcl, pu_ht_single_mcl;
  125|   323k|    UWORD32 au4_nbr_avail[MAX_CTB_SIZE / MIN_PU_SIZE
  126|   323k|                    + 2 /* Top nbr + bot nbr */];
  127|   323k|    UWORD32 *pu4_nbr_pu_idx/* (Left + ctb_size + right ) * (top + ctb_size + bottom) */;
  128|   323k|    WORD32 top_avail_bits;
  129|   323k|    UWORD8 u1_lb_avail, u1_l_avail, u1_t_avail, u1_tr_avail, u1_tl_avail;
  130|   323k|    WORD32 nbr_pu_idx_strd;
  131|   323k|    WORD32 cb_size;
  132|   323k|    WORD32 single_mcl_flag;
  133|       |
  134|   323k|    PROFILE_DISABLE_MV_PREDICTION();
  ------------------
  |  |   90|   323k|#define PROFILE_DISABLE_MV_PREDICTION() ;
  ------------------
  135|   323k|    ps_sps = ps_mv_ctxt->ps_sps;
  136|   323k|    ps_pps = ps_mv_ctxt->ps_pps;
  137|   323k|    ps_pu = ps_mv_ctxt->ps_pu;
  138|   323k|    ps_tile = ps_mv_ctxt->ps_tile;
  139|       |
  140|   323k|    pu4_nbr_pu_idx = ps_mv_ctxt->pu4_pic_pu_idx_map;
  141|       |
  142|   323k|    ctb_size = (1 << ps_sps->i1_log2_ctb_size);
  143|       |
  144|   323k|    ctb_size_in_min_pu = (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   323k|#define MIN_PU_SIZE         4
  ------------------
  145|       |
  146|   323k|    num_minpu_in_ctb = ctb_size_in_min_pu * ctb_size_in_min_pu;
  147|   323k|    pu1_pic_pu_map_ctb = ps_mv_ctxt->pu1_pic_pu_map + (ps_mv_ctxt->i4_ctb_x + ps_mv_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb) * num_minpu_in_ctb;
  148|       |
  149|   323k|    num_pu_per_ctb = ps_mv_ctxt->i4_ctb_pu_cnt;
  150|   323k|    ctb_start_pu_idx = ps_mv_ctxt->i4_ctb_start_pu_idx;
  151|   323k|    nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  341|   323k|#define MAX_CTB_SIZE        64
  ------------------
                  nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  357|   323k|#define MIN_PU_SIZE         4
  ------------------
  152|       |
  153|   323k|    {
  154|       |        /* Updating the initial availability map */
  155|   323k|        WORD32 i;
  156|   323k|        UWORD32 u4_left_ctb_avail, u4_top_lt_ctb_avail, u4_top_rt_ctb_avail,
  157|   323k|                        u4_top_ctb_avail;
  158|       |
  159|   323k|        u4_left_ctb_avail = ps_mv_ctxt->u1_left_ctb_avail;
  160|   323k|        u4_top_lt_ctb_avail = ps_mv_ctxt->u1_top_lt_ctb_avail;
  161|   323k|        u4_top_ctb_avail = ps_mv_ctxt->u1_top_ctb_avail;
  162|   323k|        u4_top_rt_ctb_avail = ps_mv_ctxt->u1_top_rt_ctb_avail;
  163|       |
  164|       |        /* Initializing the availability array */
  165|   323k|        memset(au4_nbr_avail, 0,
  166|   323k|               (MAX_CTB_SIZE / MIN_PU_SIZE + 2) * sizeof(UWORD32));
  ------------------
  |  |  341|   323k|#define MAX_CTB_SIZE        64
  ------------------
                             (MAX_CTB_SIZE / MIN_PU_SIZE + 2) * sizeof(UWORD32));
  ------------------
  |  |  357|   323k|#define MIN_PU_SIZE         4
  ------------------
  167|       |        /* Initializing the availability array with CTB level availability flags */
  168|   323k|        {
  169|   323k|            WORD32 rows_remaining = ps_sps->i2_pic_height_in_luma_samples
  170|   323k|                            - (ps_mv_ctxt->i4_ctb_y << ps_sps->i1_log2_ctb_size);
  171|   323k|            WORD32 ctb_size_left = MIN(ctb_size, rows_remaining);
  ------------------
  |  |   43|   323k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 315k, False: 7.96k]
  |  |  ------------------
  ------------------
  172|  3.23M|            for(i = 0; i < ctb_size_left / MIN_PU_SIZE; i++)
  ------------------
  |  |  357|  3.23M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (172:24): [True: 2.90M, False: 323k]
  ------------------
  173|  2.90M|            {
  174|  2.90M|                au4_nbr_avail[i + 1] = (u4_left_ctb_avail << 31);
  175|  2.90M|            }
  176|   323k|        }
  177|   323k|        au4_nbr_avail[0] |= ((u4_top_rt_ctb_avail << 31)
  178|   323k|                        >> (1 + ctb_size_in_min_pu)); /* 1+ctb_size/4 position bit pos from msb */
  179|       |
  180|   323k|        au4_nbr_avail[0] |= (u4_top_lt_ctb_avail << 31);
  181|   323k|        {
  182|   323k|            WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples
  183|   323k|                            - (ps_mv_ctxt->i4_ctb_x << ps_sps->i1_log2_ctb_size);
  184|   323k|            WORD32 ctb_size_top = MIN(ctb_size, cols_remaining);
  ------------------
  |  |   43|   323k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 275k, False: 47.1k]
  |  |  ------------------
  ------------------
  185|   323k|            WORD32 shift = (31 - (ctb_size / MIN_TU_SIZE));
  ------------------
  |  |  348|   323k|#define MIN_TU_SIZE         4
  ------------------
  186|       |
  187|       |            /* ctb_size_top gives number of valid pixels remaining in the current row */
  188|       |            /* Since we need pattern of 1's starting from the MSB, an additional shift */
  189|       |            /* is needed */
  190|   323k|            shift += ((ctb_size - ctb_size_top) / MIN_TU_SIZE);
  ------------------
  |  |  348|   323k|#define MIN_TU_SIZE         4
  ------------------
  191|       |
  192|   323k|            top_avail_bits = ((1 << (ctb_size_top / MIN_PU_SIZE)) - 1) << shift;
  ------------------
  |  |  357|   323k|#define MIN_PU_SIZE         4
  ------------------
  193|   323k|        }
  194|       |
  195|   323k|        au4_nbr_avail[0] |= ((u4_top_ctb_avail == 1) ? top_avail_bits : 0x0);
  ------------------
  |  Branch (195:30): [True: 315k, False: 7.19k]
  ------------------
  196|       |        /* Starting from msb 2nd bit to (1+ctb_size/4) bit, set 1 if top avail,or 0 */
  197|       |
  198|   323k|    }
  199|       |
  200|   323k|    {
  201|       |        /* In case of a  tile boundary, left and top arrays must change*/
  202|       |        /*Left*/
  203|       |        /* If start of tile row*/
  204|   323k|        if(((ps_tile->u1_pos_x) == (ps_mv_ctxt->i4_ctb_x)) && (ps_mv_ctxt->i4_ctb_x != 0))
  ------------------
  |  Branch (204:12): [True: 53.4k, False: 269k]
  |  Branch (204:63): [True: 681, False: 52.7k]
  ------------------
  205|    681|        {
  206|    681|            WORD32 index_pic_map;
  207|    681|            WORD32 ctb_pu_idx;
  208|    681|            UWORD8 *pu1_pic_pu_map;
  209|       |
  210|       |            /* Goto the left ctb which belongs to another tile */
  211|    681|            index_pic_map = ((ps_mv_ctxt->i4_ctb_x - 1) + ps_mv_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  212|    681|            ctb_pu_idx = ps_mv_ctxt->pu4_pic_pu_idx[index_pic_map];
  213|    681|            index_pic_map *= num_minpu_in_ctb;
  214|       |
  215|       |            /*Replicate the PUs of the last column of the left ctb*/
  216|    681|            pu1_pic_pu_map = ps_mv_ctxt->pu1_pic_pu_map + index_pic_map + ctb_size_in_min_pu - 1;
  217|  7.29k|            for(i = 0; i < ctb_size_in_min_pu; i++)
  ------------------
  |  Branch (217:24): [True: 6.61k, False: 681]
  ------------------
  218|  6.61k|            {
  219|       |                /* Left neighbors change*/
  220|  6.61k|                pu4_ctb_left_pu_idx[i] = ctb_pu_idx + (WORD32)*pu1_pic_pu_map;
  221|  6.61k|                pu1_pic_pu_map = pu1_pic_pu_map + ctb_size_in_min_pu;
  222|  6.61k|            }
  223|       |
  224|       |
  225|    681|            index_pic_map = ((ps_mv_ctxt->i4_ctb_x - 1) + (ps_mv_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb);
  226|    681|            ctb_pu_idx = ps_mv_ctxt->pu4_pic_pu_idx[index_pic_map];
  227|    681|            index_pic_map *= num_minpu_in_ctb;
  228|    681|            index_pic_map += (num_minpu_in_ctb - 1);
  229|    681|            pu4_ctb_top_left_pu_idx[0] = ctb_pu_idx + pu1_pic_pu_map[index_pic_map];
  230|    681|        }
  231|       |        /*Top*/
  232|       |        /* If start of tile column*/
  233|   323k|        if(((ps_tile->u1_pos_y) == (ps_mv_ctxt->i4_ctb_y)) && (ps_mv_ctxt->i4_ctb_y != 0))
  ------------------
  |  Branch (233:12): [True: 11.2k, False: 311k]
  |  Branch (233:63): [True: 1.32k, False: 9.97k]
  ------------------
  234|  1.32k|        {
  235|  1.32k|            WORD32 index_pic_map;
  236|  1.32k|            WORD32 ctb_pu_idx;
  237|  1.32k|            UWORD8 *pu1_pic_pu_map;
  238|       |
  239|       |            /* Goto the top ctb which belongs to another tile */
  240|  1.32k|            index_pic_map =  (ps_mv_ctxt->i4_ctb_x) + ((ps_mv_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb);
  241|  1.32k|            ctb_pu_idx = ps_mv_ctxt->pu4_pic_pu_idx[index_pic_map];
  242|  1.32k|            index_pic_map *= num_minpu_in_ctb;
  243|       |
  244|       |            /*Replicate the PUs of the last row of the top ctb*/
  245|  1.32k|            pu1_pic_pu_map = ps_mv_ctxt->pu1_pic_pu_map + index_pic_map + (ctb_size_in_min_pu * (ctb_size_in_min_pu - 1));
  246|  11.4k|            for(i = 0; i < ctb_size_in_min_pu; i++)
  ------------------
  |  Branch (246:24): [True: 10.1k, False: 1.32k]
  ------------------
  247|  10.1k|            {
  248|       |                /* Top neighbors change*/
  249|  10.1k|                pu4_ctb_top_pu_idx[i] = ctb_pu_idx + (WORD32)*pu1_pic_pu_map;
  250|  10.1k|                pu1_pic_pu_map++;
  251|  10.1k|            }
  252|  1.32k|        }
  253|       |
  254|       |        /* Updating the initial neighbor pu idx map */
  255|       |        /* Initializing the availability array with CTB level availability flags */
  256|       |        /* 16x16 array for holding pu info of the ctb, wrt the frame pu count*/
  257|  3.28M|        for(i = 0; i < ctb_size_in_min_pu; i++)
  ------------------
  |  Branch (257:20): [True: 2.96M, False: 323k]
  ------------------
  258|  2.96M|        {
  259|       |            /* Left */
  260|  2.96M|            pu4_nbr_pu_idx[(i + 1) * nbr_pu_idx_strd] = pu4_ctb_left_pu_idx[i];
  261|       |            /* Top */
  262|  2.96M|            pu4_nbr_pu_idx[i + 1] = pu4_ctb_top_pu_idx[i];
  263|  2.96M|        }
  264|       |        /* Top right */
  265|   323k|        pu4_nbr_pu_idx[1 + ctb_size_in_min_pu] = pu4_ctb_top_pu_idx[ctb_size_in_min_pu];
  266|       |
  267|       |        /* Top left */
  268|   323k|        pu4_nbr_pu_idx[0] = pu4_ctb_top_left_pu_idx[0];
  269|       |
  270|   323k|    }
  271|       |
  272|       |    /* CTB level MV pred */
  273|  5.58M|    for(pu_cnt = 0; pu_cnt < num_pu_per_ctb; pu_cnt++, ps_pu++)
  ------------------
  |  Branch (273:21): [True: 5.25M, False: 323k]
  ------------------
  274|  5.25M|    {
  275|  5.25M|        pu_ht = (ps_pu->b4_ht + 1) << 2;
  276|  5.25M|        pu_wd = (ps_pu->b4_wd + 1) << 2;
  277|       |
  278|  5.25M|        pu_ht_single_mcl = pu_ht;
  279|  5.25M|        pu_wd_single_mcl = pu_wd;
  280|       |
  281|  5.25M|        pu_x_in_4x4 = ps_pu->b4_pos_x;
  282|  5.25M|        pu_y_in_4x4 = ps_pu->b4_pos_y;
  283|       |
  284|  5.25M|        pu_x_in_4x4_single_mcl = pu_x_in_4x4;
  285|  5.25M|        pu_y_in_4x4_single_mcl = pu_y_in_4x4;
  286|       |
  287|       |        /*******************************************/
  288|       |        /* Neighbor location: Graphical indication */
  289|       |        /*                                         */
  290|       |        /*          B2 _____________B1 B0          */
  291|       |        /*            |               |            */
  292|       |        /*            |               |            */
  293|       |        /*            |               |            */
  294|       |        /*            |      PU     ht|            */
  295|       |        /*            |               |            */
  296|       |        /*            |               |            */
  297|       |        /*          A1|______wd_______|            */
  298|       |        /*          A0                             */
  299|       |        /*                                         */
  300|       |        /*******************************************/
  301|       |        /* Below code is for merge mode, where if single_mcl_flag == 1,
  302|       |         * all the prediction units of the current coding unit share a
  303|       |         * single merge candidate list, which is identical to the
  304|       |         * merge candidate list of the 2Nx2N prediction unit.
  305|       |         */
  306|  5.25M|        single_mcl_flag = 0;
  307|  5.25M|        if(1 == ps_pu->b1_merge_flag)
  ------------------
  |  Branch (307:12): [True: 5.12M, False: 128k]
  ------------------
  308|  5.12M|        {
  309|  5.12M|            cb_size = MAX(pu_wd_single_mcl, pu_ht_single_mcl);
  ------------------
  |  |   42|  5.12M|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 43.9k, False: 5.08M]
  |  |  ------------------
  ------------------
  310|  5.12M|            cb_size = MAX(cb_size,
  ------------------
  |  |   42|  5.12M|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 85.4k, False: 5.04M]
  |  |  ------------------
  ------------------
  311|  5.12M|                          (1 << ps_sps->i1_log2_min_coding_block_size));
  312|  5.12M|            if((ps_pps->i1_log2_parallel_merge_level > 2) && cb_size == 8 && (pu_wd_single_mcl != pu_ht_single_mcl))
  ------------------
  |  Branch (312:16): [True: 1.48M, False: 3.64M]
  |  Branch (312:62): [True: 1.47M, False: 12.8k]
  |  Branch (312:78): [True: 6.86k, False: 1.46M]
  ------------------
  313|  6.86k|            {
  314|  6.86k|                single_mcl_flag = 1;
  315|  6.86k|                if((PART_Nx2N == ps_pu->b3_part_mode) && (1 == ps_pu->b2_part_idx))
  ------------------
  |  Branch (315:20): [True: 1.83k, False: 5.03k]
  |  Branch (315:58): [True: 897, False: 934]
  ------------------
  316|    897|                {
  317|    897|                    pu_x_in_4x4_single_mcl = pu_x_in_4x4_single_mcl - 1;
  318|    897|                }
  319|  5.96k|                else if((PART_2NxN == ps_pu->b3_part_mode) && (1 == ps_pu->b2_part_idx))
  ------------------
  |  Branch (319:25): [True: 5.03k, False: 934]
  |  Branch (319:63): [True: 2.49k, False: 2.54k]
  ------------------
  320|  2.49k|                {
  321|  2.49k|                    pu_y_in_4x4_single_mcl = pu_y_in_4x4_single_mcl - 1;
  322|  2.49k|                }
  323|  6.86k|                pu_ht_single_mcl = 8;
  324|  6.86k|                pu_wd_single_mcl = 8;
  325|  6.86k|            }
  326|  5.12M|        }
  327|  5.25M|        pu4_top_pu_idx = &pu4_nbr_pu_idx[(1 + pu_x_in_4x4_single_mcl)
  328|  5.25M|                        + (1 + pu_y_in_4x4_single_mcl - 1) * nbr_pu_idx_strd];
  329|  5.25M|        pu4_top_left_pu_idx = pu4_top_pu_idx - 1;
  330|  5.25M|        pu4_left_pu_idx = pu4_top_pu_idx - 1 + nbr_pu_idx_strd;
  331|       |
  332|       |        /* Get neibhbor availability */
  333|  5.25M|        {
  334|  5.25M|            u1_lb_avail = (au4_nbr_avail[1 + pu_y_in_4x4_single_mcl + pu_ht_single_mcl / MIN_PU_SIZE]
  ------------------
  |  |  357|  5.25M|#define MIN_PU_SIZE         4
  ------------------
  335|  5.25M|                            >> (31 - (1 + pu_x_in_4x4_single_mcl - 1))) & 1;
  336|  5.25M|            u1_l_avail = (au4_nbr_avail[1 + pu_y_in_4x4_single_mcl]
  337|  5.25M|                            >> (31 - (1 + pu_x_in_4x4_single_mcl - 1))) & 1;
  338|  5.25M|            u1_t_avail = (au4_nbr_avail[1 + pu_y_in_4x4_single_mcl - 1]
  339|  5.25M|                            >> (31 - (1 + pu_x_in_4x4_single_mcl))) & 1;
  340|  5.25M|            u1_tr_avail = (au4_nbr_avail[1 + pu_y_in_4x4_single_mcl - 1]
  341|  5.25M|                            >> (31 - (1 + pu_x_in_4x4_single_mcl + pu_wd_single_mcl / MIN_PU_SIZE)))
  ------------------
  |  |  357|  5.25M|#define MIN_PU_SIZE         4
  ------------------
  342|  5.25M|                            & 1;
  343|  5.25M|            u1_tl_avail = (au4_nbr_avail[1 + pu_y_in_4x4_single_mcl - 1]
  344|  5.25M|                            >> (31 - (1 + pu_x_in_4x4_single_mcl - 1))) & 1;
  345|  5.25M|        }
  346|  5.25M|        if(ps_pu->b1_intra_flag == 0)
  ------------------
  |  Branch (346:12): [True: 5.23M, False: 28.0k]
  ------------------
  347|  5.23M|        {
  348|  5.23M|            if(ps_pu->b1_merge_flag == 0)
  ------------------
  |  Branch (348:16): [True: 130k, False: 5.10M]
  ------------------
  349|   130k|            {
  350|   130k|                WORD32 pred_flag_l0, pred_flag_l1;
  351|   130k|                WORD32 tmp_x, tmp_y, mvd_x, mvd_y, mvp_x, mvp_y;
  352|   130k|                WORD32 two_pow_16, two_pow_15;
  353|       |
  354|   130k|                ihevcd_mv_pred(ps_mv_ctxt, pu4_top_pu_idx, pu4_left_pu_idx,
  355|   130k|                               pu4_top_left_pu_idx, nbr_pu_idx_strd,
  356|   130k|                               ps_pu, u1_lb_avail, u1_l_avail,
  357|   130k|                               u1_tr_avail, u1_t_avail, u1_tl_avail,
  358|   130k|                               &s_pred_mv);
  359|       |
  360|   130k|                pred_flag_l0 = (ps_pu->b2_pred_mode != PRED_L1);
  361|   130k|                pred_flag_l1 = (ps_pu->b2_pred_mode != PRED_L0);
  362|       |
  363|   130k|                two_pow_16 = (1 << 16);
  364|   130k|                two_pow_15 = (1 << 15);
  365|       |
  366|       |                /* L0 MV */
  367|   130k|                if(pred_flag_l0)
  ------------------
  |  Branch (367:20): [True: 97.0k, False: 33.0k]
  ------------------
  368|  97.0k|                {
  369|  97.0k|                    mvp_x = s_pred_mv.s_l0_mv.i2_mvx;
  370|  97.0k|                    mvp_y = s_pred_mv.s_l0_mv.i2_mvy;
  371|  97.0k|                    mvd_x = ps_pu->mv.s_l0_mv.i2_mvx;
  372|  97.0k|                    mvd_y = ps_pu->mv.s_l0_mv.i2_mvy;
  373|       |
  374|  97.0k|                    tmp_x = (mvp_x + mvd_x + two_pow_16) & (two_pow_16 - 1);
  375|  97.0k|                    tmp_x = tmp_x >= two_pow_15 ?
  ------------------
  |  Branch (375:29): [True: 35.5k, False: 61.5k]
  ------------------
  376|  61.5k|                                    (tmp_x - two_pow_16) : tmp_x;
  377|  97.0k|                    ps_pu->mv.s_l0_mv.i2_mvx = tmp_x;
  378|  97.0k|                    tmp_y = (mvp_y + mvd_y + two_pow_16) & (two_pow_16 - 1);
  379|  97.0k|                    tmp_y = tmp_y >= two_pow_15 ?
  ------------------
  |  Branch (379:29): [True: 38.3k, False: 58.6k]
  ------------------
  380|  58.6k|                                    (tmp_y - two_pow_16) : tmp_y;
  381|  97.0k|                    ps_pu->mv.s_l0_mv.i2_mvy = tmp_y;
  382|  97.0k|                }
  383|       |                /* L1 MV */
  384|   130k|                if(pred_flag_l1)
  ------------------
  |  Branch (384:20): [True: 50.9k, False: 79.0k]
  ------------------
  385|  50.9k|                {
  386|  50.9k|                    mvp_x = s_pred_mv.s_l1_mv.i2_mvx;
  387|  50.9k|                    mvp_y = s_pred_mv.s_l1_mv.i2_mvy;
  388|  50.9k|                    mvd_x = ps_pu->mv.s_l1_mv.i2_mvx;
  389|  50.9k|                    mvd_y = ps_pu->mv.s_l1_mv.i2_mvy;
  390|       |
  391|  50.9k|                    tmp_x = (mvp_x + mvd_x + two_pow_16) & (two_pow_16 - 1);
  392|  50.9k|                    tmp_x = tmp_x >= two_pow_15 ?
  ------------------
  |  Branch (392:29): [True: 14.9k, False: 36.0k]
  ------------------
  393|  36.0k|                                    (tmp_x - two_pow_16) : tmp_x;
  394|  50.9k|                    ps_pu->mv.s_l1_mv.i2_mvx = tmp_x;
  395|  50.9k|                    tmp_y = (mvp_y + mvd_y + two_pow_16) & (two_pow_16 - 1);
  396|  50.9k|                    tmp_y = tmp_y >= two_pow_15 ?
  ------------------
  |  Branch (396:29): [True: 14.0k, False: 36.9k]
  ------------------
  397|  36.9k|                                    (tmp_y - two_pow_16) : tmp_y;
  398|  50.9k|                    ps_pu->mv.s_l1_mv.i2_mvy = tmp_y;
  399|  50.9k|                }
  400|   130k|            }
  401|  5.10M|            else
  402|  5.10M|            {
  403|  5.10M|                WORD32 part_mode;
  404|  5.10M|                WORD32 part_idx;
  405|  5.10M|                part_mode = ps_pu->b3_part_mode;
  406|       |                //TODO: Get part_idx
  407|  5.10M|                part_idx = ps_pu->b2_part_idx;
  408|       |
  409|  5.10M|                ihevcd_mv_merge(ps_mv_ctxt, pu4_top_pu_idx, pu4_left_pu_idx,
  410|  5.10M|                                nbr_pu_idx_strd, ps_pu, part_mode,
  411|  5.10M|                                part_idx, pu_wd_single_mcl, pu_ht_single_mcl,
  412|  5.10M|                                pu_x_in_4x4_single_mcl << 2, pu_y_in_4x4_single_mcl << 2,
  413|  5.10M|                                single_mcl_flag, u1_lb_avail, u1_l_avail, u1_tr_avail,
  414|  5.10M|                                u1_t_avail, u1_tl_avail);
  415|       |
  416|  5.10M|                if(PRED_BI == ps_pu->b2_pred_mode)
  ------------------
  |  Branch (416:20): [True: 4.36M, False: 738k]
  ------------------
  417|  4.36M|                {
  418|  4.36M|                    if(((ps_pu->b3_part_mode == PART_2NxN) && (pu_wd == 8))
  ------------------
  |  Branch (418:25): [True: 17.9k, False: 4.34M]
  |  Branch (418:63): [True: 13.3k, False: 4.60k]
  ------------------
  419|  4.36M|                                    || ((ps_pu->b3_part_mode == PART_Nx2N)
  ------------------
  |  Branch (419:41): [True: 27.4k, False: 4.32M]
  ------------------
  420|  4.35M|                                                    && (pu_ht == 8)))
  ------------------
  |  Branch (420:56): [True: 19.5k, False: 7.80k]
  ------------------
  421|  32.9k|                    {
  422|  32.9k|                        ps_pu->b2_pred_mode = PRED_L0;
  423|  32.9k|                    }
  424|  4.36M|                }
  425|  5.10M|            }
  426|  5.23M|        }
  427|       |
  428|  5.25M|        {
  429|  5.25M|            slice_header_t *ps_slice_hdr;
  430|  5.25M|            pic_buf_t *ps_pic_buf_l0, *ps_pic_buf_l1;
  431|  5.25M|            ps_slice_hdr = ps_mv_ctxt->ps_slice_hdr;
  432|  5.25M|            ps_pic_buf_l0 = (pic_buf_t *)((ps_slice_hdr->as_ref_pic_list0[ps_pu->mv.i1_l0_ref_idx].pv_pic_buf));
  433|  5.25M|            ps_pic_buf_l1 = (pic_buf_t *)((ps_slice_hdr->as_ref_pic_list1[ps_pu->mv.i1_l1_ref_idx].pv_pic_buf));
  434|  5.25M|            ps_pu->mv.i1_l0_ref_pic_buf_id = ps_pic_buf_l0->u1_buf_id;
  435|  5.25M|            if(BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (435:16): [True: 5.18M, False: 70.5k]
  ------------------
  436|  5.18M|            {
  437|  5.18M|                ps_pu->mv.i1_l1_ref_pic_buf_id = ps_pic_buf_l1->u1_buf_id;
  438|  5.18M|            }
  439|  5.25M|        }
  440|       |
  441|       |        /* Neighbor availability inside CTB */
  442|       |        /* 1bit per 4x4. Indicates whether that 4x4 block has been reconstructed(avialable) */
  443|       |        /* Used for neighbor availability in intra pred */
  444|  5.25M|        {
  445|  5.25M|            WORD32 trans_in_min_tu;
  446|  5.25M|            UWORD32 cur_tu_in_bits;
  447|  5.25M|            UWORD32 cur_tu_avail_flag;
  448|       |
  449|  5.25M|            trans_in_min_tu = pu_wd / MIN_PU_SIZE;
  ------------------
  |  |  357|  5.25M|#define MIN_PU_SIZE         4
  ------------------
  450|  5.25M|            cur_tu_in_bits = (1 << trans_in_min_tu) - 1;
  451|  5.25M|            cur_tu_in_bits = cur_tu_in_bits << (32 - trans_in_min_tu);
  452|       |
  453|  5.25M|            cur_tu_avail_flag = cur_tu_in_bits >> (pu_x_in_4x4 + 1);
  454|       |
  455|  16.2M|            for(i = 0; i < pu_ht / MIN_PU_SIZE; i++)
  ------------------
  |  |  357|  16.2M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (455:24): [True: 10.9M, False: 5.25M]
  ------------------
  456|  10.9M|                au4_nbr_avail[1 + pu_y_in_4x4 + i] |= cur_tu_avail_flag;
  457|  5.25M|        }
  458|       |
  459|       |        /* Neighbor PU idx update inside CTB */
  460|       |        /* 1byte per 4x4. Indicates the PU idx that 4x4 block belongs to */
  461|       |
  462|  5.25M|        {
  463|  5.25M|            WORD32 row, col;
  464|  5.25M|            UWORD32 cur_pu_idx;
  465|  5.25M|            WORD32 offset;
  466|  5.25M|            cur_pu_idx = ctb_start_pu_idx + pu_cnt;
  467|       |
  468|  5.25M|            offset = (1 + pu_x_in_4x4 + 0) + (1 + pu_y_in_4x4 + 0) * nbr_pu_idx_strd;
  469|       |
  470|  16.2M|            for(row = 0; row < pu_ht / MIN_PU_SIZE; row++)
  ------------------
  |  |  357|  16.2M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (470:26): [True: 10.9M, False: 5.25M]
  ------------------
  471|  10.9M|            {
  472|  36.6M|                for(col = 0; col < pu_wd / MIN_PU_SIZE; col++)
  ------------------
  |  |  357|  36.6M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (472:30): [True: 25.7M, False: 10.9M]
  ------------------
  473|  25.7M|                {
  474|  25.7M|                    pu4_nbr_pu_idx[offset + col] = cur_pu_idx;
  475|  25.7M|                }
  476|  10.9M|                offset += nbr_pu_idx_strd;
  477|  10.9M|            }
  478|  5.25M|        }
  479|       |
  480|  5.25M|    }
  481|       |
  482|       |    /* Updating Top and Left pointers */
  483|   323k|    {
  484|   323k|        WORD32 offset_top, offset_left;
  485|       |
  486|   323k|        offset_left = ctb_size_in_min_pu + (0 + 1) * nbr_pu_idx_strd;
  487|   323k|        offset_top = ctb_size_in_min_pu * nbr_pu_idx_strd + 0 + 1;
  488|       |
  489|       |        /* Top Left */
  490|       |        /* saving top left before updating top ptr, as updating top ptr will overwrite the top left for the next ctb */
  491|   323k|        pu4_ctb_top_left_pu_idx[0] = pu4_ctb_top_pu_idx[ctb_size_in_min_pu - 1];
  492|       |
  493|  3.31M|        for(i = 0; i < ctb_size_in_min_pu; i++)
  ------------------
  |  Branch (493:20): [True: 2.98M, False: 323k]
  ------------------
  494|  2.98M|        {
  495|       |            /* Left */
  496|       |            /* Last column of au4_nbr_pu_idx */
  497|  2.98M|            pu4_ctb_left_pu_idx[i] = pu4_nbr_pu_idx[offset_left];
  498|       |            /* Top */
  499|       |            /* Last row of au4_nbr_pu_idx */
  500|  2.98M|            pu4_ctb_top_pu_idx[i] = pu4_nbr_pu_idx[offset_top];
  501|       |
  502|  2.98M|            offset_left += nbr_pu_idx_strd;
  503|  2.98M|            offset_top += 1;
  504|  2.98M|        }
  505|   323k|    }
  506|       |
  507|       |    /* Updating the CTB level PU idx (Used for collocated MV pred)*/
  508|   323k|    {
  509|   323k|        WORD32 ctb_row, ctb_col, index_pic_map, index_nbr_map;
  510|   323k|        WORD32 first_pu_of_ctb;
  511|   323k|        first_pu_of_ctb = pu4_nbr_pu_idx[1 + nbr_pu_idx_strd];
  512|   323k|        UWORD32 cur_ctb_ht_in_min_pu = MIN(((ps_sps->i2_pic_height_in_luma_samples
  ------------------
  |  |   43|   323k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 8.70k, False: 314k]
  |  |  ------------------
  ------------------
  513|   323k|                    - (ps_mv_ctxt->i4_ctb_y << ps_sps->i1_log2_ctb_size)) / MIN_PU_SIZE), ctb_size_in_min_pu);
  514|   323k|        UWORD32 cur_ctb_wd_in_min_pu = MIN(((ps_sps->i2_pic_width_in_luma_samples
  ------------------
  |  |   43|   323k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 49.4k, False: 273k]
  |  |  ------------------
  ------------------
  515|   323k|                    - (ps_mv_ctxt->i4_ctb_x << ps_sps->i1_log2_ctb_size)) / MIN_PU_SIZE), ctb_size_in_min_pu);
  516|       |
  517|   323k|        index_pic_map = 0 * ctb_size_in_min_pu + 0;
  518|   323k|        index_nbr_map = (0 + 1) * nbr_pu_idx_strd + (0 + 1);
  519|       |
  520|  3.18M|        for(ctb_row = 0; ctb_row < cur_ctb_ht_in_min_pu; ctb_row++)
  ------------------
  |  Branch (520:26): [True: 2.86M, False: 323k]
  ------------------
  521|  2.86M|        {
  522|  29.2M|            for(ctb_col = 0; ctb_col < cur_ctb_wd_in_min_pu; ctb_col++)
  ------------------
  |  Branch (522:30): [True: 26.3M, False: 2.86M]
  ------------------
  523|  26.3M|            {
  524|  26.3M|                pu1_pic_pu_map_ctb[index_pic_map + ctb_col] = pu4_nbr_pu_idx[index_nbr_map + ctb_col]
  525|  26.3M|                                - first_pu_of_ctb;
  526|  26.3M|            }
  527|  2.86M|            index_pic_map += ctb_size_in_min_pu;
  528|  2.86M|            index_nbr_map += nbr_pu_idx_strd;
  529|  2.86M|        }
  530|   323k|    }
  531|   323k|    return num_pu_per_ctb;
  532|   323k|}

ihevcd_inter_pred_ctb:
  114|   326k|{
  115|   326k|    UWORD8 *ref_pic_luma_l0, *ref_pic_chroma_l0;
  116|   326k|    UWORD8 *ref_pic_luma_l1, *ref_pic_chroma_l1;
  117|       |
  118|   326k|    UWORD8 *ref_pic_l0 = NULL, *ref_pic_l1 = NULL;
  119|       |
  120|   326k|    slice_header_t *ps_slice_hdr;
  121|   326k|    sps_t *ps_sps;
  122|   326k|    pps_t *ps_pps;
  123|   326k|    pu_t *ps_pu;
  124|   326k|    codec_t *ps_codec;
  125|   326k|    WORD32 pu_indx;
  126|   326k|    WORD32 pu_x, pu_y;
  127|   326k|    WORD32 pu_wd, pu_ht;
  128|   326k|    WORD32 i4_pu_cnt;
  129|   326k|    WORD32 cur_ctb_idx;
  130|       |
  131|   326k|    WORD32 clr_indx;
  132|   326k|    WORD32 ntaps;
  133|       |
  134|       |
  135|       |
  136|   326k|    WORD32 ai2_xint[2] = { 0, 0 }, ai2_yint[2] = { 0, 0 };
  137|   326k|    WORD32 ai2_xfrac[2] = { 0, 0 }, ai2_yfrac[2] = { 0, 0 };
  138|       |
  139|   326k|    WORD32 weighted_pred, bi_pred;
  140|       |
  141|   326k|    WORD32 ref_strd;
  142|   326k|    UWORD8 *pu1_dst_luma, *pu1_dst_chroma;
  143|       |
  144|   326k|    UWORD8 *pu1_dst;
  145|       |
  146|   326k|    WORD16 *pi2_tmp1, *pi2_tmp2;
  147|       |
  148|   326k|    WORD32 luma_weight_l0, luma_weight_l1;
  149|   326k|    WORD32 chroma_weight_l0_cb, chroma_weight_l1_cb, chroma_weight_l0_cr, chroma_weight_l1_cr;
  150|   326k|    WORD32 luma_offset_l0, luma_offset_l1;
  151|   326k|    WORD32 chroma_offset_l0_cb, chroma_offset_l1_cb, chroma_offset_l0_cr, chroma_offset_l1_cr;
  152|   326k|    WORD32 shift, lvl_shift1, lvl_shift2;
  153|       |
  154|   326k|    pf_inter_pred func_ptr1, func_ptr2, func_ptr3, func_ptr4;
  155|   326k|    WORD32 func_indx1, func_indx2, func_indx3, func_indx4;
  156|   326k|    void *func_src;
  157|   326k|    void *func_dst;
  158|   326k|    WORD32 func_src_strd;
  159|   326k|    WORD32 func_dst_strd;
  160|   326k|    WORD8 *func_coeff;
  161|   326k|    WORD32 func_wd;
  162|   326k|    WORD32 func_ht;
  163|   326k|    WORD32 next_ctb_idx;
  164|   326k|    WORD8(*coeff)[8];
  165|   326k|    WORD32  chroma_yuv420sp_vu;
  166|       |
  167|   326k|    PROFILE_DISABLE_INTER_PRED();
  ------------------
  |  |   69|   326k|#define PROFILE_DISABLE_INTER_PRED() ;
  ------------------
  168|   326k|    ps_codec = ps_proc->ps_codec;
  169|   326k|    ps_slice_hdr = ps_proc->ps_slice_hdr;
  170|   326k|    ps_pps = ps_proc->ps_pps;
  171|   326k|    ps_sps = ps_proc->ps_sps;
  172|   326k|    cur_ctb_idx = ps_proc->i4_ctb_x
  173|   326k|                    + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  174|       |    /*
  175|       |     * In case of tiles, the next ctb belonging to the same tile must be used to get the PU index
  176|       |     */
  177|       |
  178|   326k|    next_ctb_idx = ps_proc->i4_next_pu_ctb_cnt;
  179|   326k|    i4_pu_cnt = ps_proc->pu4_pic_pu_idx[next_ctb_idx] - ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
  180|       |
  181|   326k|    ps_pu = ps_proc->ps_pu;
  182|   326k|    ref_strd = ps_codec->i4_strd;
  183|   326k|    pi2_tmp1 = ps_proc->pi2_inter_pred_tmp_buf1;
  184|   326k|    pi2_tmp2 = ps_proc->pi2_inter_pred_tmp_buf2;
  185|   326k|    pu1_dst_luma = ps_proc->pu1_cur_pic_luma;
  186|   326k|    pu1_dst_chroma = ps_proc->pu1_cur_pic_chroma;
  187|       |
  188|   326k|    chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
  189|       |
  190|   326k|    ASSERT(PSLICE == ps_slice_hdr->i1_slice_type || BSLICE == ps_slice_hdr->i1_slice_type);
  ------------------
  |  |   55|   326k|#define ASSERT(x) assert((x))
  ------------------
  191|       |
  192|   327k|    ref_pic_luma_l0 = NULL;
  193|   327k|    ref_pic_chroma_l0 = NULL;
  194|       |
  195|   327k|    luma_weight_l0 = 0;
  196|   327k|    chroma_weight_l0_cb = 0;
  197|   327k|    chroma_weight_l0_cr = 0;
  198|       |
  199|   327k|    luma_offset_l0 = 0;
  200|   327k|    chroma_offset_l0_cb = 0;
  201|   327k|    chroma_offset_l0_cr = 0;
  202|       |
  203|   327k|    ref_pic_luma_l1 = NULL;
  204|   327k|    ref_pic_chroma_l1 = NULL;
  205|       |
  206|   327k|    luma_weight_l1 = 0;
  207|   327k|    chroma_weight_l1_cb = 0;
  208|   327k|    chroma_weight_l1_cr = 0;
  209|       |
  210|   327k|    luma_offset_l1 = 0;
  211|   327k|    chroma_offset_l1_cb = 0;
  212|   327k|    chroma_offset_l1_cr = 0;
  213|       |
  214|  5.90M|    for(pu_indx = 0; pu_indx < i4_pu_cnt; pu_indx++, ps_pu++)
  ------------------
  |  Branch (214:22): [True: 5.58M, False: 327k]
  ------------------
  215|  5.58M|    {
  216|       |        /* If the PU is intra then proceed to the next */
  217|  5.58M|        if(1 == ps_pu->b1_intra_flag)
  ------------------
  |  Branch (217:12): [True: 7.41k, False: 5.57M]
  ------------------
  218|  7.41k|            continue;
  219|  5.57M|        pu_x = (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size) + (ps_pu->b4_pos_x << 2);
  220|  5.57M|        pu_y = (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size) + (ps_pu->b4_pos_y << 2);
  221|       |
  222|  5.57M|        pu_wd = (ps_pu->b4_wd + 1) << 2;
  223|  5.57M|        pu_ht = (ps_pu->b4_ht + 1) << 2;
  224|       |
  225|  5.57M|        weighted_pred = (ps_slice_hdr->i1_slice_type == PSLICE) ? ps_pps->i1_weighted_pred_flag :
  ------------------
  |  Branch (225:25): [True: 77.6k, False: 5.49M]
  ------------------
  226|  5.57M|                        ps_pps->i1_weighted_bipred_flag;
  227|  5.57M|        bi_pred = (ps_pu->b2_pred_mode == PRED_BI);
  228|       |
  229|  5.57M|        if(ps_pu->b2_pred_mode != PRED_L1)
  ------------------
  |  Branch (229:12): [True: 5.47M, False: 100k]
  ------------------
  230|  5.47M|        {
  231|  5.47M|            pic_buf_t *ps_pic_buf_l0;
  232|       |
  233|  5.47M|            ps_pic_buf_l0 = (pic_buf_t *)((ps_slice_hdr->as_ref_pic_list0[ps_pu->mv.i1_l0_ref_idx].pv_pic_buf));
  234|       |
  235|  5.47M|            ref_pic_luma_l0 = ps_pic_buf_l0->pu1_luma;
  236|  5.47M|            ref_pic_chroma_l0 = ps_pic_buf_l0->pu1_chroma;
  237|       |
  238|  5.47M|            luma_weight_l0 = ps_slice_hdr->s_wt_ofst.i2_luma_weight_l0[ps_pu->mv.i1_l0_ref_idx];
  239|  5.47M|            chroma_weight_l0_cb = ps_slice_hdr->s_wt_ofst.i2_chroma_weight_l0_cb[ps_pu->mv.i1_l0_ref_idx];
  240|  5.47M|            chroma_weight_l0_cr = ps_slice_hdr->s_wt_ofst.i2_chroma_weight_l0_cr[ps_pu->mv.i1_l0_ref_idx];
  241|       |
  242|  5.47M|            luma_offset_l0 = ps_slice_hdr->s_wt_ofst.i2_luma_offset_l0[ps_pu->mv.i1_l0_ref_idx];
  243|  5.47M|            chroma_offset_l0_cb = ps_slice_hdr->s_wt_ofst.i2_chroma_offset_l0_cb[ps_pu->mv.i1_l0_ref_idx];
  244|  5.47M|            chroma_offset_l0_cr = ps_slice_hdr->s_wt_ofst.i2_chroma_offset_l0_cr[ps_pu->mv.i1_l0_ref_idx];
  245|  5.47M|        }
  246|       |
  247|  5.57M|        if(ps_pu->b2_pred_mode != PRED_L0)
  ------------------
  |  Branch (247:12): [True: 4.65M, False: 919k]
  ------------------
  248|  4.65M|        {
  249|  4.65M|            pic_buf_t *ps_pic_buf_l1;
  250|  4.65M|            ps_pic_buf_l1 = (pic_buf_t *)((ps_slice_hdr->as_ref_pic_list1[ps_pu->mv.i1_l1_ref_idx].pv_pic_buf));
  251|  4.65M|            ref_pic_luma_l1 = ps_pic_buf_l1->pu1_luma;
  252|  4.65M|            ref_pic_chroma_l1 = ps_pic_buf_l1->pu1_chroma;
  253|       |
  254|  4.65M|            luma_weight_l1 = ps_slice_hdr->s_wt_ofst.i2_luma_weight_l1[ps_pu->mv.i1_l1_ref_idx];
  255|  4.65M|            chroma_weight_l1_cb = ps_slice_hdr->s_wt_ofst.i2_chroma_weight_l1_cb[ps_pu->mv.i1_l1_ref_idx];
  256|  4.65M|            chroma_weight_l1_cr = ps_slice_hdr->s_wt_ofst.i2_chroma_weight_l1_cr[ps_pu->mv.i1_l1_ref_idx];
  257|       |
  258|  4.65M|            luma_offset_l1 = ps_slice_hdr->s_wt_ofst.i2_luma_offset_l1[ps_pu->mv.i1_l1_ref_idx];
  259|  4.65M|            chroma_offset_l1_cb = ps_slice_hdr->s_wt_ofst.i2_chroma_offset_l1_cb[ps_pu->mv.i1_l1_ref_idx];
  260|  4.65M|            chroma_offset_l1_cr = ps_slice_hdr->s_wt_ofst.i2_chroma_offset_l1_cr[ps_pu->mv.i1_l1_ref_idx];
  261|  4.65M|        }
  262|       |
  263|       |        /*luma and chroma components*/
  264|  16.4M|        for(clr_indx = 0; clr_indx < 2; clr_indx++)
  ------------------
  |  Branch (264:27): [True: 10.9M, False: 5.57M]
  ------------------
  265|  10.9M|        {
  266|  10.9M|            PROFILE_DISABLE_INTER_PRED_LUMA(clr_indx);
  ------------------
  |  |   98|  10.9M|#define PROFILE_DISABLE_INTER_PRED_LUMA(clr_indx) ;
  ------------------
  267|  10.9M|            PROFILE_DISABLE_INTER_PRED_CHROMA(clr_indx);
  ------------------
  |  |   99|  10.9M|#define PROFILE_DISABLE_INTER_PRED_CHROMA(clr_indx) ;
  ------------------
  268|       |
  269|  10.9M|            if(clr_indx == 0)
  ------------------
  |  Branch (269:16): [True: 5.58M, False: 5.32M]
  ------------------
  270|  5.58M|            {
  271|  5.58M|                WORD32 mv;
  272|  5.58M|                if(ps_pu->b2_pred_mode != PRED_L1)
  ------------------
  |  Branch (272:20): [True: 5.47M, False: 108k]
  ------------------
  273|  5.47M|                {
  274|  5.47M|                    mv = CLIP3(ps_pu->mv.s_l0_mv.i2_mvx, (-((MAX_CTB_SIZE + pu_x + 7) << 2)), ((ps_sps->i2_pic_width_in_luma_samples - pu_x + 7) << 2));
  ------------------
  |  |   40|  5.47M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 44.8k, False: 5.43M]
  |  |  |  Branch (40:53): [True: 571k, False: 4.86M]
  |  |  ------------------
  ------------------
  275|  5.47M|                    ai2_xint[0] = pu_x + (mv >> 2);
  276|  5.47M|                    ai2_xfrac[0] = mv & 3;
  277|       |
  278|  5.47M|                    mv = CLIP3(ps_pu->mv.s_l0_mv.i2_mvy, (-((MAX_CTB_SIZE + pu_y + 7) << 2)), ((ps_sps->i2_pic_height_in_luma_samples - pu_y + 7) << 2));
  ------------------
  |  |   40|  5.47M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 26.3k, False: 5.45M]
  |  |  |  Branch (40:53): [True: 317k, False: 5.13M]
  |  |  ------------------
  ------------------
  279|  5.47M|                    ai2_yint[0] = pu_y + (mv >> 2);
  280|  5.47M|                    ai2_yfrac[0] = mv & 3;
  281|       |
  282|  5.47M|                    ai2_xfrac[0] &= ps_codec->i4_mv_frac_mask;
  283|  5.47M|                    ai2_yfrac[0] &= ps_codec->i4_mv_frac_mask;
  284|       |
  285|       |
  286|  5.47M|                    ref_pic_l0 = ref_pic_luma_l0 + ai2_yint[0] * ref_strd
  287|  5.47M|                                    + ai2_xint[0];
  288|  5.47M|                }
  289|       |
  290|  5.58M|                if(ps_pu->b2_pred_mode != PRED_L0)
  ------------------
  |  Branch (290:20): [True: 4.65M, False: 931k]
  ------------------
  291|  4.65M|                {
  292|       |
  293|  4.65M|                    mv = CLIP3(ps_pu->mv.s_l1_mv.i2_mvx, (-((MAX_CTB_SIZE + pu_x + 7) << 2)), ((ps_sps->i2_pic_width_in_luma_samples - pu_x + 7) << 2));
  ------------------
  |  |   40|  4.65M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 66.7k, False: 4.58M]
  |  |  |  Branch (40:53): [True: 568k, False: 4.01M]
  |  |  ------------------
  ------------------
  294|  4.65M|                    ai2_xint[1] = pu_x + (mv >> 2);
  295|  4.65M|                    ai2_xfrac[1] = mv & 3;
  296|       |
  297|  4.65M|                    mv = CLIP3(ps_pu->mv.s_l1_mv.i2_mvy, (-((MAX_CTB_SIZE + pu_y + 7) << 2)), ((ps_sps->i2_pic_height_in_luma_samples - pu_y + 7) << 2));
  ------------------
  |  |   40|  4.65M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 57.8k, False: 4.59M]
  |  |  |  Branch (40:53): [True: 1.44k, False: 4.59M]
  |  |  ------------------
  ------------------
  298|  4.65M|                    ai2_yint[1] = pu_y + (mv >> 2);
  299|  4.65M|                    ai2_yfrac[1] = mv & 3;
  300|       |
  301|  4.65M|                    ref_pic_l1 = ref_pic_luma_l1 + ai2_yint[1] * ref_strd
  302|  4.65M|                                    + ai2_xint[1];
  303|  4.65M|                    ai2_xfrac[1] &= ps_codec->i4_mv_frac_mask;
  304|  4.65M|                    ai2_yfrac[1] &= ps_codec->i4_mv_frac_mask;
  305|       |
  306|  4.65M|                }
  307|       |
  308|  5.58M|                pu1_dst = pu1_dst_luma + pu_y * ref_strd + pu_x;
  309|       |
  310|  5.58M|                ntaps = NTAPS_LUMA;
  ------------------
  |  |   39|  5.58M|#define NTAPS_LUMA 8
  ------------------
  311|  5.58M|                coeff = gai1_luma_filter;
  312|  5.58M|            }
  313|       |
  314|  5.32M|            else
  315|  5.32M|            {
  316|  5.32M|                WORD32 mv;
  317|       |                /* xint is upshifted by 1 because the chroma components are  */
  318|       |                /* interleaved which is not the assumption made by standard  */
  319|  5.32M|                if(ps_pu->b2_pred_mode != PRED_L1)
  ------------------
  |  Branch (319:20): [True: 5.46M, False: 18.4E]
  ------------------
  320|  5.46M|                {
  321|  5.46M|                    mv = CLIP3(ps_pu->mv.s_l0_mv.i2_mvx, (-((MAX_CTB_SIZE + pu_x + 7) << 2)), ((ps_sps->i2_pic_width_in_luma_samples - pu_x + 7) << 2));
  ------------------
  |  |   40|  5.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 44.8k, False: 5.41M]
  |  |  |  Branch (40:53): [True: 571k, False: 4.84M]
  |  |  ------------------
  ------------------
  322|  5.46M|                    ai2_xint[0] = (pu_x / 2 + (mv >> 3)) << 1;
  323|  5.46M|                    ai2_xfrac[0] = mv & 7;
  324|       |
  325|  5.46M|                    mv = CLIP3(ps_pu->mv.s_l0_mv.i2_mvy, (-((MAX_CTB_SIZE + pu_y + 7) << 2)), ((ps_sps->i2_pic_height_in_luma_samples - pu_y + 7) << 2));
  ------------------
  |  |   40|  5.46M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 26.3k, False: 5.43M]
  |  |  |  Branch (40:53): [True: 316k, False: 5.11M]
  |  |  ------------------
  ------------------
  326|  5.46M|                    ai2_yint[0] = pu_y / 2 + (mv >> 3);
  327|  5.46M|                    ai2_yfrac[0] = mv & 7;
  328|       |
  329|  5.46M|                    ref_pic_l0 = ref_pic_chroma_l0 + ai2_yint[0] * ref_strd
  330|  5.46M|                                    + ai2_xint[0];
  331|       |
  332|  5.46M|                    ai2_xfrac[0] &= ps_codec->i4_mv_frac_mask;
  333|  5.46M|                    ai2_yfrac[0] &= ps_codec->i4_mv_frac_mask;
  334|       |
  335|  5.46M|                }
  336|       |
  337|  5.32M|                if(ps_pu->b2_pred_mode != PRED_L0)
  ------------------
  |  Branch (337:20): [True: 4.64M, False: 677k]
  ------------------
  338|  4.64M|                {
  339|  4.64M|                    mv = CLIP3(ps_pu->mv.s_l1_mv.i2_mvx, (-((MAX_CTB_SIZE + pu_x + 7) << 2)), ((ps_sps->i2_pic_width_in_luma_samples - pu_x + 7) << 2));
  ------------------
  |  |   40|  4.64M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 66.7k, False: 4.57M]
  |  |  |  Branch (40:53): [True: 568k, False: 4.00M]
  |  |  ------------------
  ------------------
  340|  4.64M|                    ai2_xint[1] = (pu_x / 2 + (mv >> 3)) << 1;
  341|  4.64M|                    ai2_xfrac[1] = mv & 7;
  342|       |
  343|  4.64M|                    mv = CLIP3(ps_pu->mv.s_l1_mv.i2_mvy, (-((MAX_CTB_SIZE + pu_y + 7) << 2)), ((ps_sps->i2_pic_height_in_luma_samples - pu_y + 7) << 2));
  ------------------
  |  |   40|  4.64M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 57.7k, False: 4.58M]
  |  |  |  Branch (40:53): [True: 1.44k, False: 4.58M]
  |  |  ------------------
  ------------------
  344|  4.64M|                    ai2_yint[1] = pu_y / 2 + (mv >> 3);
  345|  4.64M|                    ai2_yfrac[1] = mv & 7;
  346|       |
  347|  4.64M|                    ref_pic_l1 = ref_pic_chroma_l1 + ai2_yint[1] * ref_strd
  348|  4.64M|                                    + ai2_xint[1];
  349|  4.64M|                    ai2_xfrac[1] &= ps_codec->i4_mv_frac_mask;
  350|  4.64M|                    ai2_yfrac[1] &= ps_codec->i4_mv_frac_mask;
  351|       |
  352|  4.64M|                }
  353|       |
  354|  5.32M|                pu1_dst = pu1_dst_chroma + pu_y * ref_strd / 2 + pu_x;
  355|       |
  356|  5.32M|                ntaps = NTAPS_CHROMA;
  ------------------
  |  |   40|  5.32M|#define NTAPS_CHROMA 4
  ------------------
  357|  5.32M|                coeff = gai1_chroma_filter;
  358|  5.32M|            }
  359|       |
  360|  10.9M|            if(ps_pu->b2_pred_mode != PRED_L1)
  ------------------
  |  Branch (360:16): [True: 10.6M, False: 238k]
  ------------------
  361|  10.6M|            {
  362|  10.6M|                func_indx1 = 4 * (weighted_pred || bi_pred) + 1 + 11 * clr_indx;
  ------------------
  |  Branch (362:35): [True: 1.00M, False: 9.66M]
  |  Branch (362:52): [True: 8.13M, False: 1.52M]
  ------------------
  363|  10.6M|                func_indx1 += ai2_xfrac[0] ? 2 : 0;
  ------------------
  |  Branch (363:31): [True: 3.75M, False: 6.90M]
  ------------------
  364|  10.6M|                func_indx1 += ai2_yfrac[0] ? 1 : 0;
  ------------------
  |  Branch (364:31): [True: 3.27M, False: 7.39M]
  ------------------
  365|       |
  366|  10.6M|                func_indx2 = (ai2_xfrac[0] && ai2_yfrac[0])
  ------------------
  |  Branch (366:31): [True: 3.76M, False: 6.90M]
  |  Branch (366:47): [True: 2.21M, False: 1.54M]
  ------------------
  367|  10.6M|                                * (9 + (weighted_pred || bi_pred)) + 11 * clr_indx;
  ------------------
  |  Branch (367:41): [True: 1.00M, False: 9.66M]
  |  Branch (367:58): [True: 8.13M, False: 1.52M]
  ------------------
  368|       |
  369|  10.6M|                func_ptr1 = ps_codec->apf_inter_pred[func_indx1];
  370|  10.6M|                func_ptr2 = ps_codec->apf_inter_pred[func_indx2];
  371|  10.6M|            }
  372|   238k|            else
  373|   238k|            {
  374|   238k|                func_ptr1 = NULL;
  375|   238k|                func_ptr2 = NULL;
  376|   238k|            }
  377|  10.9M|            if(ps_pu->b2_pred_mode != PRED_L0)
  ------------------
  |  Branch (377:16): [True: 9.12M, False: 1.78M]
  ------------------
  378|  9.12M|            {
  379|  9.12M|                func_indx3 = 4 * (weighted_pred || bi_pred) + 1 + 11 * clr_indx;
  ------------------
  |  Branch (379:35): [True: 755k, False: 8.36M]
  |  Branch (379:52): [True: 8.16M, False: 200k]
  ------------------
  380|  9.12M|                func_indx3 += ai2_xfrac[1] ? 2 : 0;
  ------------------
  |  Branch (380:31): [True: 2.89M, False: 6.22M]
  ------------------
  381|  9.12M|                func_indx3 += ai2_yfrac[1] ? 1 : 0;
  ------------------
  |  Branch (381:31): [True: 3.30M, False: 5.81M]
  ------------------
  382|       |
  383|  9.12M|                func_indx4 = (ai2_xfrac[1] && ai2_yfrac[1])
  ------------------
  |  Branch (383:31): [True: 2.89M, False: 6.22M]
  |  Branch (383:47): [True: 2.63M, False: 268k]
  ------------------
  384|  9.12M|                                * (9 + (weighted_pred || bi_pred)) + 11 * clr_indx;
  ------------------
  |  Branch (384:41): [True: 756k, False: 8.36M]
  |  Branch (384:58): [True: 8.16M, False: 200k]
  ------------------
  385|       |
  386|  9.12M|                func_ptr3 = ps_codec->apf_inter_pred[func_indx3];
  387|  9.12M|                func_ptr4 = ps_codec->apf_inter_pred[func_indx4];
  388|  9.12M|            }
  389|  1.78M|            else
  390|  1.78M|            {
  391|  1.78M|                func_ptr3 = NULL;
  392|  1.78M|                func_ptr4 = NULL;
  393|  1.78M|            }
  394|       |
  395|       |            /*Function 1*/
  396|  10.9M|            if(func_ptr1 != NULL)
  ------------------
  |  Branch (396:16): [True: 10.6M, False: 223k]
  ------------------
  397|  10.6M|            {
  398|  10.6M|                func_src_strd = ref_strd;
  399|  10.6M|                func_src = (ai2_xfrac[0] && ai2_yfrac[0]) ?
  ------------------
  |  Branch (399:29): [True: 3.76M, False: 6.91M]
  |  Branch (399:45): [True: 2.21M, False: 1.54M]
  ------------------
  400|  2.21M|                                ref_pic_l0 - (ntaps / 2 - 1) * func_src_strd :
  401|  10.6M|                                ref_pic_l0;
  402|  10.6M|                func_dst = (weighted_pred || bi_pred) ?
  ------------------
  |  Branch (402:29): [True: 1.01M, False: 9.66M]
  |  Branch (402:46): [True: 8.15M, False: 1.51M]
  ------------------
  403|  9.17M|                                (void *)pi2_tmp1 : (void *)pu1_dst;
  404|  10.6M|                if(ai2_xfrac[0] && ai2_yfrac[0])
  ------------------
  |  Branch (404:20): [True: 3.76M, False: 6.91M]
  |  Branch (404:36): [True: 2.21M, False: 1.54M]
  ------------------
  405|  2.21M|                {
  406|  2.21M|                    func_dst = pi2_tmp1;
  407|  2.21M|                }
  408|       |
  409|  10.6M|                func_dst_strd = (weighted_pred || bi_pred
  ------------------
  |  Branch (409:34): [True: 1.01M, False: 9.66M]
  |  Branch (409:51): [True: 8.15M, False: 1.51M]
  ------------------
  410|  10.6M|                                || (ai2_xfrac[0] && ai2_yfrac[0])) ?
  ------------------
  |  Branch (410:37): [True: 646k, False: 870k]
  |  Branch (410:53): [True: 375k, False: 270k]
  ------------------
  411|  9.54M|                                pu_wd : ref_strd;
  412|  10.6M|                func_coeff = ai2_xfrac[0] ?
  ------------------
  |  Branch (412:30): [True: 3.76M, False: 6.91M]
  ------------------
  413|  6.91M|                                coeff[ai2_xfrac[0]] : coeff[ai2_yfrac[0]];
  414|  10.6M|                func_wd = pu_wd >> clr_indx;
  415|  10.6M|                func_ht = pu_ht >> clr_indx;
  416|  10.6M|                func_ht += (ai2_xfrac[0] && ai2_yfrac[0]) ? ntaps - 1 : 0;
  ------------------
  |  Branch (416:29): [True: 3.76M, False: 6.92M]
  |  Branch (416:45): [True: 2.21M, False: 1.54M]
  ------------------
  417|  10.6M|                func_ptr1(func_src, func_dst, func_src_strd, func_dst_strd,
  418|  10.6M|                          func_coeff, func_ht, func_wd);
  419|  10.6M|            }
  420|       |
  421|       |            /*Function 2*/
  422|  10.9M|            if(func_ptr2 != NULL)
  ------------------
  |  Branch (422:16): [True: 2.21M, False: 8.69M]
  ------------------
  423|  2.21M|            {
  424|  2.21M|                func_src_strd = pu_wd;
  425|  2.21M|                func_src = pi2_tmp1 + (ntaps / 2 - 1) * func_src_strd;
  426|  2.21M|                func_dst = (weighted_pred || bi_pred) ?
  ------------------
  |  Branch (426:29): [True: 233k, False: 1.98M]
  |  Branch (426:46): [True: 1.60M, False: 378k]
  ------------------
  427|  1.84M|                                (void *)pi2_tmp1 : (void *)pu1_dst;
  428|       |
  429|  2.21M|                func_dst_strd = (weighted_pred || bi_pred) ?
  ------------------
  |  Branch (429:34): [True: 231k, False: 1.98M]
  |  Branch (429:51): [True: 1.60M, False: 378k]
  ------------------
  430|  1.84M|                                pu_wd : ref_strd;
  431|  2.21M|                func_coeff = coeff[ai2_yfrac[0]];
  432|  2.21M|                func_wd = pu_wd >> clr_indx;
  433|  2.21M|                func_ht = pu_ht >> clr_indx;
  434|  2.21M|                func_ptr2(func_src, func_dst, func_src_strd, func_dst_strd,
  435|  2.21M|                          func_coeff, func_ht, func_wd);
  436|  2.21M|            }
  437|       |
  438|  10.9M|            if(func_ptr3 != NULL)
  ------------------
  |  Branch (438:16): [True: 9.16M, False: 1.73M]
  ------------------
  439|  9.16M|            {
  440|  9.16M|                func_src_strd = ref_strd;
  441|  9.16M|                func_src = (ai2_xfrac[1] && ai2_yfrac[1]) ?
  ------------------
  |  Branch (441:29): [True: 2.89M, False: 6.27M]
  |  Branch (441:45): [True: 2.62M, False: 266k]
  ------------------
  442|  2.62M|                                ref_pic_l1 - (ntaps / 2 - 1) * func_src_strd :
  443|  9.16M|                                ref_pic_l1;
  444|       |
  445|  9.16M|                func_dst = (weighted_pred || bi_pred) ?
  ------------------
  |  Branch (445:29): [True: 744k, False: 8.42M]
  |  Branch (445:46): [True: 8.22M, False: 200k]
  ------------------
  446|  8.97M|                                (void *)pi2_tmp2 : (void *)pu1_dst;
  447|  9.16M|                if(ai2_xfrac[1] && ai2_yfrac[1])
  ------------------
  |  Branch (447:20): [True: 2.89M, False: 6.27M]
  |  Branch (447:36): [True: 2.62M, False: 266k]
  ------------------
  448|  2.62M|                {
  449|  2.62M|                    func_dst = pi2_tmp2;
  450|  2.62M|                }
  451|  9.16M|                func_dst_strd = (weighted_pred || bi_pred
  ------------------
  |  Branch (451:34): [True: 741k, False: 8.42M]
  |  Branch (451:51): [True: 8.22M, False: 200k]
  ------------------
  452|  9.16M|                                || (ai2_xfrac[1] && ai2_yfrac[1])) ?
  ------------------
  |  Branch (452:37): [True: 78.2k, False: 122k]
  |  Branch (452:53): [True: 42.6k, False: 35.5k]
  ------------------
  453|  9.02M|                                pu_wd : ref_strd;
  454|  9.16M|                func_coeff = ai2_xfrac[1] ?
  ------------------
  |  Branch (454:30): [True: 2.89M, False: 6.27M]
  ------------------
  455|  6.27M|                                coeff[ai2_xfrac[1]] : coeff[ai2_yfrac[1]];
  456|  9.16M|                func_wd = pu_wd >> clr_indx;
  457|  9.16M|                func_ht = pu_ht >> clr_indx;
  458|  9.16M|                func_ht += (ai2_xfrac[1] && ai2_yfrac[1]) ? ntaps - 1 : 0;
  ------------------
  |  Branch (458:29): [True: 2.89M, False: 6.27M]
  |  Branch (458:45): [True: 2.62M, False: 266k]
  ------------------
  459|  9.16M|                func_ptr3(func_src, func_dst, func_src_strd, func_dst_strd,
  460|  9.16M|                          func_coeff, func_ht, func_wd);
  461|       |
  462|  9.16M|            }
  463|       |
  464|  10.9M|            if(func_ptr4 != NULL)
  ------------------
  |  Branch (464:16): [True: 2.62M, False: 8.28M]
  ------------------
  465|  2.62M|            {
  466|  2.62M|                func_src_strd = pu_wd;
  467|  2.62M|                func_src = pi2_tmp2 + (ntaps / 2 - 1) * func_src_strd;
  468|       |
  469|  2.62M|                func_dst = (weighted_pred || bi_pred) ?
  ------------------
  |  Branch (469:29): [True: 5.51k, False: 2.61M]
  |  Branch (469:46): [True: 2.57M, False: 42.6k]
  ------------------
  470|  2.58M|                                (void *)pi2_tmp2 : (void *)pu1_dst;
  471|  2.62M|                func_dst_strd = (weighted_pred || bi_pred) ?
  ------------------
  |  Branch (471:34): [True: 3.08k, False: 2.61M]
  |  Branch (471:51): [True: 2.57M, False: 42.6k]
  ------------------
  472|  2.58M|                                pu_wd : ref_strd;
  473|  2.62M|                func_coeff = coeff[ai2_yfrac[1]];
  474|  2.62M|                func_wd = pu_wd >> clr_indx;
  475|  2.62M|                func_ht = pu_ht >> clr_indx;
  476|  2.62M|                func_ptr4(func_src, func_dst, func_src_strd, func_dst_strd,
  477|  2.62M|                          func_coeff, func_ht, func_wd);
  478|       |
  479|  2.62M|            }
  480|       |
  481|  10.9M|            PROFILE_DISABLE_INTER_PRED_LUMA_AVERAGING(clr_indx);
  ------------------
  |  |  100|  10.9M|#define PROFILE_DISABLE_INTER_PRED_LUMA_AVERAGING(clr_indx) ;
  ------------------
  482|  10.9M|            PROFILE_DISABLE_INTER_PRED_CHROMA_AVERAGING(clr_indx);
  ------------------
  |  |  101|  10.9M|#define PROFILE_DISABLE_INTER_PRED_CHROMA_AVERAGING(clr_indx) ;
  ------------------
  483|       |
  484|       |
  485|  10.9M|            if((weighted_pred != 0) && (bi_pred != 0))
  ------------------
  |  Branch (485:16): [True: 999k, False: 9.90M]
  |  Branch (485:40): [True: 736k, False: 262k]
  ------------------
  486|   737k|            {
  487|   737k|                lvl_shift1 = 0;
  488|   737k|                lvl_shift2 = 0;
  489|   737k|                if((0 == clr_indx) && (ai2_xfrac[0] && ai2_yfrac[0]))
  ------------------
  |  Branch (489:20): [True: 383k, False: 353k]
  |  Branch (489:40): [True: 72.1k, False: 311k]
  |  Branch (489:56): [True: 55.4k, False: 16.7k]
  ------------------
  490|  55.4k|                    lvl_shift1 = (1 << 13);
  491|       |
  492|   737k|                if((0 == clr_indx) && (ai2_xfrac[1] && ai2_yfrac[1]))
  ------------------
  |  Branch (492:20): [True: 384k, False: 353k]
  |  Branch (492:40): [True: 1.48k, False: 382k]
  |  Branch (492:56): [True: 1.24k, False: 243]
  ------------------
  493|  1.24k|                    lvl_shift2 = (1 << 13);
  494|       |
  495|       |
  496|   737k|                if(0 == clr_indx)
  ------------------
  |  Branch (496:20): [True: 384k, False: 353k]
  ------------------
  497|   384k|                {
  498|   384k|                    shift = ps_slice_hdr->s_wt_ofst.i1_luma_log2_weight_denom
  499|   384k|                                    + SHIFT_14_MINUS_BIT_DEPTH + 1;
  ------------------
  |  |   41|   384k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   384k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  500|       |
  501|   384k|                    ps_codec->s_func_selector.ihevc_weighted_pred_bi_fptr(pi2_tmp1,
  502|   384k|                                                                          pi2_tmp2,
  503|   384k|                                                                          pu1_dst,
  504|   384k|                                                                          pu_wd,
  505|   384k|                                                                          pu_wd,
  506|   384k|                                                                          ref_strd,
  507|   384k|                                                                          luma_weight_l0,
  508|   384k|                                                                          luma_offset_l0,
  509|   384k|                                                                          luma_weight_l1,
  510|   384k|                                                                          luma_offset_l1,
  511|   384k|                                                                          shift,
  512|   384k|                                                                          lvl_shift1,
  513|   384k|                                                                          lvl_shift2,
  514|   384k|                                                                          pu_ht,
  515|   384k|                                                                          pu_wd);
  516|   384k|                }
  517|   353k|                else
  518|   353k|                {
  519|   353k|                    shift = ps_slice_hdr->s_wt_ofst.i1_chroma_log2_weight_denom
  520|   353k|                                    + SHIFT_14_MINUS_BIT_DEPTH + 1;
  ------------------
  |  |   41|   353k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   353k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  521|       |
  522|   353k|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (522:24): [True: 3.59k, False: 349k]
  ------------------
  523|  3.59k|                    {
  524|  3.59k|                        ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_fptr(pi2_tmp1,
  525|  3.59k|                                                                                     pi2_tmp2,
  526|  3.59k|                                                                                     pu1_dst,
  527|  3.59k|                                                                                     pu_wd,
  528|  3.59k|                                                                                     pu_wd,
  529|  3.59k|                                                                                     ref_strd,
  530|  3.59k|                                                                                     chroma_weight_l0_cr,
  531|  3.59k|                                                                                     chroma_weight_l0_cb,
  532|  3.59k|                                                                                     chroma_offset_l0_cr,
  533|  3.59k|                                                                                     chroma_offset_l0_cb,
  534|  3.59k|                                                                                     chroma_weight_l1_cr,
  535|  3.59k|                                                                                     chroma_weight_l1_cb,
  536|  3.59k|                                                                                     chroma_offset_l1_cr,
  537|  3.59k|                                                                                     chroma_offset_l1_cb,
  538|  3.59k|                                                                                     shift,
  539|  3.59k|                                                                                     lvl_shift1,
  540|  3.59k|                                                                                     lvl_shift2,
  541|  3.59k|                                                                                     pu_ht >> 1,
  542|  3.59k|                                                                                     pu_wd >> 1);
  543|  3.59k|                    }
  544|   349k|                    else
  545|   349k|                    {
  546|   349k|                        ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_fptr(pi2_tmp1,
  547|   349k|                                                                                     pi2_tmp2,
  548|   349k|                                                                                     pu1_dst,
  549|   349k|                                                                                     pu_wd,
  550|   349k|                                                                                     pu_wd,
  551|   349k|                                                                                     ref_strd,
  552|   349k|                                                                                     chroma_weight_l0_cb,
  553|   349k|                                                                                     chroma_weight_l0_cr,
  554|   349k|                                                                                     chroma_offset_l0_cb,
  555|   349k|                                                                                     chroma_offset_l0_cr,
  556|   349k|                                                                                     chroma_weight_l1_cb,
  557|   349k|                                                                                     chroma_weight_l1_cr,
  558|   349k|                                                                                     chroma_offset_l1_cb,
  559|   349k|                                                                                     chroma_offset_l1_cr,
  560|   349k|                                                                                     shift,
  561|   349k|                                                                                     lvl_shift1,
  562|   349k|                                                                                     lvl_shift2,
  563|   349k|                                                                                     pu_ht >> 1,
  564|   349k|                                                                                     pu_wd >> 1);
  565|   349k|                    }
  566|   353k|                }
  567|   737k|            }
  568|       |
  569|  10.1M|            else if((weighted_pred != 0) && (bi_pred == 0))
  ------------------
  |  Branch (569:21): [True: 265k, False: 9.90M]
  |  Branch (569:45): [True: 265k, False: 18.4E]
  ------------------
  570|   265k|            {
  571|   265k|                lvl_shift1 = 0;
  572|   265k|                if(ps_pu->b2_pred_mode == PRED_L0)
  ------------------
  |  Branch (572:20): [True: 256k, False: 8.89k]
  ------------------
  573|   256k|                {
  574|   256k|                    if((0 == clr_indx) && (ai2_xfrac[0] && ai2_yfrac[0]))
  ------------------
  |  Branch (574:24): [True: 128k, False: 127k]
  |  Branch (574:44): [True: 73.2k, False: 55.5k]
  |  Branch (574:60): [True: 54.8k, False: 18.3k]
  ------------------
  575|  54.8k|                        lvl_shift1 = (1 << 13);
  576|   256k|                }
  577|  8.89k|                else
  578|  8.89k|                {
  579|  8.89k|                    if((0 == clr_indx) && (ai2_xfrac[1] && ai2_yfrac[1]))
  ------------------
  |  Branch (579:24): [True: 4.46k, False: 4.43k]
  |  Branch (579:44): [True: 2.88k, False: 1.57k]
  |  Branch (579:60): [True: 1.54k, False: 1.34k]
  ------------------
  580|  1.54k|                        lvl_shift1 = (1 << 13);
  581|  8.89k|                }
  582|       |
  583|   265k|                if(0 == clr_indx)
  ------------------
  |  Branch (583:20): [True: 133k, False: 131k]
  ------------------
  584|   133k|                {
  585|   133k|                    shift = ps_slice_hdr->s_wt_ofst.i1_luma_log2_weight_denom
  586|   133k|                                    + SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|   133k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   133k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  587|       |
  588|   133k|                    ps_codec->s_func_selector.ihevc_weighted_pred_uni_fptr(ps_pu->b2_pred_mode == PRED_L0 ? pi2_tmp1 : pi2_tmp2,
  ------------------
  |  Branch (588:76): [True: 128k, False: 4.46k]
  ------------------
  589|   133k|                                                                           pu1_dst,
  590|   133k|                                                                           pu_wd,
  591|   133k|                                                                           ref_strd,
  592|   133k|                                                                           ps_pu->b2_pred_mode == PRED_L0 ? luma_weight_l0 : luma_weight_l1,
  ------------------
  |  Branch (592:76): [True: 128k, False: 4.45k]
  ------------------
  593|   133k|                                                                           ps_pu->b2_pred_mode == PRED_L0 ? luma_offset_l0 : luma_offset_l1,
  ------------------
  |  Branch (593:76): [True: 128k, False: 4.45k]
  ------------------
  594|   133k|                                                                           shift,
  595|   133k|                                                                           lvl_shift1,
  596|   133k|                                                                           pu_ht,
  597|   133k|                                                                           pu_wd);
  598|   133k|                }
  599|   131k|                else
  600|   131k|                {
  601|   131k|                    shift = ps_slice_hdr->s_wt_ofst.i1_chroma_log2_weight_denom
  602|   131k|                                    + SHIFT_14_MINUS_BIT_DEPTH;
  ------------------
  |  |   41|   131k|#define SHIFT_14_MINUS_BIT_DEPTH (14 - BIT_DEPTH)
  |  |  ------------------
  |  |  |  |  269|   131k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  603|       |
  604|   131k|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (604:24): [True: 5.02k, False: 126k]
  ------------------
  605|  5.02k|                    {
  606|  5.02k|                        ps_codec->s_func_selector.ihevc_weighted_pred_chroma_uni_fptr(ps_pu->b2_pred_mode == PRED_L0 ? pi2_tmp1 : pi2_tmp2,
  ------------------
  |  Branch (606:87): [True: 4.89k, False: 128]
  ------------------
  607|  5.02k|                                                                                      pu1_dst,
  608|  5.02k|                                                                                      pu_wd,
  609|  5.02k|                                                                                      ref_strd,
  610|  5.02k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_weight_l0_cr : chroma_weight_l1_cr,
  ------------------
  |  Branch (610:87): [True: 4.89k, False: 128]
  ------------------
  611|  5.02k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_weight_l0_cb : chroma_weight_l1_cb,
  ------------------
  |  Branch (611:87): [True: 4.89k, False: 128]
  ------------------
  612|  5.02k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_offset_l0_cr : chroma_offset_l1_cr,
  ------------------
  |  Branch (612:87): [True: 4.89k, False: 128]
  ------------------
  613|  5.02k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_offset_l0_cb : chroma_offset_l1_cb,
  ------------------
  |  Branch (613:87): [True: 4.89k, False: 128]
  ------------------
  614|  5.02k|                                                                                      shift,
  615|  5.02k|                                                                                      lvl_shift1,
  616|  5.02k|                                                                                      pu_ht >> 1,
  617|  5.02k|                                                                                      pu_wd >> 1);
  618|  5.02k|                    }
  619|   126k|                    else
  620|   126k|                    {
  621|   126k|                        ps_codec->s_func_selector.ihevc_weighted_pred_chroma_uni_fptr(ps_pu->b2_pred_mode == PRED_L0 ? pi2_tmp1 : pi2_tmp2,
  ------------------
  |  Branch (621:87): [True: 123k, False: 2.98k]
  ------------------
  622|   126k|                                                                                      pu1_dst,
  623|   126k|                                                                                      pu_wd,
  624|   126k|                                                                                      ref_strd,
  625|   126k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_weight_l0_cb : chroma_weight_l1_cb,
  ------------------
  |  Branch (625:87): [True: 123k, False: 2.98k]
  ------------------
  626|   126k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_weight_l0_cr : chroma_weight_l1_cr,
  ------------------
  |  Branch (626:87): [True: 123k, False: 2.98k]
  ------------------
  627|   126k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_offset_l0_cb : chroma_offset_l1_cb,
  ------------------
  |  Branch (627:87): [True: 124k, False: 2.97k]
  ------------------
  628|   126k|                                                                                      ps_pu->b2_pred_mode == PRED_L0 ? chroma_offset_l0_cr : chroma_offset_l1_cr,
  ------------------
  |  Branch (628:87): [True: 124k, False: 2.94k]
  ------------------
  629|   126k|                                                                                      shift,
  630|   126k|                                                                                      lvl_shift1,
  631|   126k|                                                                                      pu_ht >> 1,
  632|   126k|                                                                                      pu_wd >> 1);
  633|   126k|                    }
  634|   131k|                }
  635|   265k|            }
  636|       |
  637|  9.94M|            else if((weighted_pred == 0) && (bi_pred != 0))
  ------------------
  |  Branch (637:21): [True: 9.94M, False: 18.4E]
  |  Branch (637:45): [True: 8.20M, False: 1.73M]
  ------------------
  638|  8.21M|            {
  639|  8.21M|                lvl_shift1 = 0;
  640|  8.21M|                lvl_shift2 = 0;
  641|  8.21M|                if((0 == clr_indx) && (ai2_xfrac[0] && ai2_yfrac[0]))
  ------------------
  |  Branch (641:20): [True: 4.14M, False: 4.06M]
  |  Branch (641:40): [True: 1.10M, False: 3.03M]
  |  Branch (641:56): [True: 491k, False: 614k]
  ------------------
  642|   491k|                    lvl_shift1 = (1 << 13);
  643|       |
  644|  8.21M|                if((0 == clr_indx) && (ai2_xfrac[1] && ai2_yfrac[1]))
  ------------------
  |  Branch (644:20): [True: 4.14M, False: 4.06M]
  |  Branch (644:40): [True: 1.09M, False: 3.05M]
  |  Branch (644:56): [True: 946k, False: 146k]
  ------------------
  645|   946k|                    lvl_shift2 = (1 << 13);
  646|       |
  647|  8.21M|                if(clr_indx != 0)
  ------------------
  |  Branch (647:20): [True: 4.14M, False: 4.06M]
  ------------------
  648|  4.14M|                {
  649|  4.14M|                    pu_ht = (pu_ht >> 1);
  650|  4.14M|                }
  651|  8.21M|                ps_codec->s_func_selector.ihevc_weighted_pred_bi_default_fptr(pi2_tmp1,
  652|  8.21M|                                                                              pi2_tmp2,
  653|  8.21M|                                                                              pu1_dst,
  654|  8.21M|                                                                              pu_wd,
  655|  8.21M|                                                                              pu_wd,
  656|  8.21M|                                                                              ref_strd,
  657|  8.21M|                                                                              lvl_shift1,
  658|  8.21M|                                                                              lvl_shift2,
  659|  8.21M|                                                                              pu_ht,
  660|  8.21M|                                                                              pu_wd);
  661|       |
  662|  8.21M|            }
  663|  10.9M|        }
  664|  5.57M|    }
  665|   327k|}

ihevcd_intra_pred_mode_prediction:
  109|  2.32M|{
  110|  2.32M|    WORD32 i, j, num_pred_blocks;
  111|  2.32M|    WORD32 available_l, available_t;
  112|  2.32M|    WORD32 cand_intra_pred_mode_l, cand_intra_pred_mode_t;
  113|  2.32M|    WORD32 cand_mode_list[3];
  114|  2.32M|    WORD32 cb_size, block_offset_in_min_pu;
  115|  2.32M|    UWORD8 *pu1_luma_intra_pred_mode_top;
  116|  2.32M|    UWORD8 *pu1_luma_intra_pred_mode_left;
  117|       |
  118|  2.32M|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
  119|  2.32M|    parse_cu_t *ps_cu = &ps_codec->s_parse.s_cu;
  120|  2.32M|    sps_t *ps_sps = ps_parse->ps_sps;
  121|       |
  122|       |
  123|  2.32M|    available_t = 1;
  124|  2.32M|    available_l = 1;
  125|       |    /* i4_pos_x and i4_pos_y are in minCu units (8x8), convert them to 4x4 units by multiplying by 2 */
  126|  2.32M|    pu1_luma_intra_pred_mode_top = ps_parse->pu1_luma_intra_pred_mode_top
  127|  2.32M|                    + (ps_cu->i4_pos_x * 2);
  128|       |
  129|  2.32M|    pu1_luma_intra_pred_mode_left = ps_parse->pu1_luma_intra_pred_mode_left
  130|  2.32M|                    + (ps_cu->i4_pos_y * 2);
  131|       |
  132|       |/*
  133|       |    if(0 == ps_cu->i4_pos_y)
  134|       |    {
  135|       |        memset(pu1_luma_intra_pred_mode_top, INTRA_DC, 16);
  136|       |    }
  137|       |
  138|       |    if(0 == ps_cu->i4_pos_x)
  139|       |    {
  140|       |        memset(pu1_luma_intra_pred_mode_left, INTRA_DC, 16);
  141|       |    }
  142|       |*/
  143|  2.32M|    if(ps_cu->i4_pos_y)
  ------------------
  |  Branch (143:8): [True: 1.58M, False: 737k]
  ------------------
  144|  1.58M|    {
  145|  1.58M|        UWORD8 *pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
  146|  1.58M|        WORD32 top_intra_flag;
  147|       |
  148|  1.58M|        WORD32 numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
  149|  1.58M|        pu1_pic_intra_flag += ((y0 - 8) / 8) * numbytes_row;
  150|  1.58M|        pu1_pic_intra_flag += (x0 / 64);
  151|  1.58M|        top_intra_flag = *pu1_pic_intra_flag;
  152|  1.58M|        top_intra_flag &= (1 << ((x0 / 8) % 8));
  153|       |
  154|  1.58M|        if(0 == top_intra_flag)
  ------------------
  |  Branch (154:12): [True: 4.67k, False: 1.58M]
  ------------------
  155|  4.67k|        {
  156|  4.67k|            available_t = 0;
  157|  4.67k|        }
  158|  1.58M|    }
  159|   737k|    else
  160|   737k|        available_t = 0;
  161|       |
  162|       |
  163|  2.32M|    if((0 == ps_cu->i4_pos_x) && (((0 == ps_codec->s_parse.i4_ctb_slice_x) && (0 == ps_codec->s_parse.i4_ctb_slice_y)) ||
  ------------------
  |  Branch (163:8): [True: 747k, False: 1.57M]
  |  Branch (163:36): [True: 20.7k, False: 726k]
  |  Branch (163:79): [True: 9.87k, False: 10.8k]
  ------------------
  164|   747k|                                  (0 == ps_codec->s_parse.i4_ctb_tile_x)))
  ------------------
  |  Branch (164:35): [True: 11.0k, False: 726k]
  ------------------
  165|  20.9k|    {
  166|  20.9k|        available_l = 0;
  167|  20.9k|    }
  168|       |
  169|  2.32M|    if(available_l)
  ------------------
  |  Branch (169:8): [True: 2.30M, False: 20.9k]
  ------------------
  170|  2.30M|    {
  171|  2.30M|        UWORD8 *pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
  172|  2.30M|        WORD32 left_intra_flag;
  173|  2.30M|        WORD32 numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
  174|  2.30M|        pu1_pic_intra_flag += (y0 / 8) * numbytes_row;
  175|  2.30M|        pu1_pic_intra_flag += ((x0 - 8) / 64);
  176|  2.30M|        left_intra_flag = *pu1_pic_intra_flag;
  177|  2.30M|        left_intra_flag &= (1 << (((x0 - 8) / 8) % 8));
  178|       |
  179|  2.30M|        if(0 == left_intra_flag)
  ------------------
  |  Branch (179:12): [True: 5.80k, False: 2.29M]
  ------------------
  180|  5.80k|        {
  181|  5.80k|            available_l = 0;
  182|  5.80k|        }
  183|  2.30M|    }
  184|       |
  185|  2.32M|    cb_size = (1 << log2_cb_size);
  186|       |
  187|  2.32M|    block_offset_in_min_pu = (cb_size / 2) / MIN_PU_SIZE;
  ------------------
  |  |  357|  2.32M|#define MIN_PU_SIZE         4
  ------------------
  188|       |
  189|  2.32M|    num_pred_blocks = (ps_cu->i4_part_mode == PART_NxN) ? 2 : 1;
  ------------------
  |  Branch (189:23): [True: 333k, False: 1.99M]
  ------------------
  190|       |
  191|  4.98M|    for(i = 0; i < num_pred_blocks; i++)
  ------------------
  |  Branch (191:16): [True: 2.65M, False: 2.32M]
  ------------------
  192|  2.65M|    {
  193|  2.65M|        WORD32 available_l_tmp;
  194|  2.65M|        available_l_tmp = available_l;
  195|  5.98M|        for(j = 0; j < num_pred_blocks; j++)
  ------------------
  |  Branch (195:20): [True: 3.32M, False: 2.65M]
  ------------------
  196|  3.32M|        {
  197|       |            /* Computing Candidate intra pred mode left */
  198|  3.32M|            {
  199|  3.32M|                WORD32 block_offset;
  200|       |
  201|  3.32M|                block_offset = i * block_offset_in_min_pu;
  202|  3.32M|                cand_intra_pred_mode_l = INTRA_DC;
  ------------------
  |  |  504|  3.32M|#define INTRA_DC                 1
  ------------------
  203|  3.32M|                if(available_l_tmp)
  ------------------
  |  Branch (203:20): [True: 3.29M, False: 34.3k]
  ------------------
  204|  3.29M|                {
  205|  3.29M|                    cand_intra_pred_mode_l =
  206|  3.29M|                                    pu1_luma_intra_pred_mode_left[block_offset];
  207|  3.29M|                }
  208|       |
  209|  3.32M|            }
  210|       |
  211|  3.32M|            {
  212|  3.32M|                WORD32 block_offset;
  213|  3.32M|                block_offset = j * block_offset_in_min_pu;
  214|  3.32M|                cand_intra_pred_mode_t = INTRA_DC;
  ------------------
  |  |  504|  3.32M|#define INTRA_DC                 1
  ------------------
  215|  3.32M|                if(available_t)
  ------------------
  |  Branch (215:20): [True: 2.51M, False: 811k]
  ------------------
  216|  2.51M|                {
  217|  2.51M|                    cand_intra_pred_mode_t =
  218|  2.51M|                                    pu1_luma_intra_pred_mode_top[block_offset];
  219|  2.51M|                }
  220|  3.32M|            }
  221|       |
  222|       |            /* Computing Candidate mode list */
  223|  3.32M|            if(cand_intra_pred_mode_l == cand_intra_pred_mode_t)
  ------------------
  |  Branch (223:16): [True: 763k, False: 2.56M]
  ------------------
  224|   763k|            {
  225|   763k|                if(cand_intra_pred_mode_l < 2)
  ------------------
  |  Branch (225:20): [True: 476k, False: 287k]
  ------------------
  226|   476k|                {
  227|   476k|                    cand_mode_list[0] = INTRA_PLANAR;
  ------------------
  |  |  501|   476k|#define INTRA_PLANAR             0
  ------------------
  228|   476k|                    cand_mode_list[1] = INTRA_DC;
  ------------------
  |  |  504|   476k|#define INTRA_DC                 1
  ------------------
  229|   476k|                    cand_mode_list[2] = INTRA_ANGULAR(26); /* angular 26 = Vertical */
  ------------------
  |  |  507|   476k|#define INTRA_ANGULAR(x) (x)
  ------------------
  230|   476k|                }
  231|   287k|                else
  232|   287k|                {
  233|   287k|                    cand_mode_list[0] = cand_intra_pred_mode_l;
  234|   287k|                    cand_mode_list[1] = 2
  235|   287k|                                    + ((cand_intra_pred_mode_l + 29) % 32);
  236|   287k|                    cand_mode_list[2] = 2
  237|   287k|                                    + ((cand_intra_pred_mode_l - 2 + 1) % 32);
  238|   287k|                }
  239|   763k|            }
  240|  2.56M|            else
  241|  2.56M|            {
  242|  2.56M|                cand_mode_list[0] = cand_intra_pred_mode_l;
  243|  2.56M|                cand_mode_list[1] = cand_intra_pred_mode_t;
  244|       |
  245|  2.56M|                if((cand_intra_pred_mode_l != INTRA_PLANAR)
  ------------------
  |  |  501|  2.56M|#define INTRA_PLANAR             0
  ------------------
  |  Branch (245:20): [True: 1.96M, False: 601k]
  ------------------
  246|  2.56M|                                && (cand_intra_pred_mode_t != INTRA_PLANAR))
  ------------------
  |  |  501|  1.96M|#define INTRA_PLANAR             0
  ------------------
  |  Branch (246:36): [True: 1.61M, False: 341k]
  ------------------
  247|  1.61M|                {
  248|  1.61M|                    cand_mode_list[2] = INTRA_PLANAR;
  ------------------
  |  |  501|  1.61M|#define INTRA_PLANAR             0
  ------------------
  249|  1.61M|                }
  250|   942k|                else if((cand_intra_pred_mode_l != INTRA_DC)
  ------------------
  |  |  504|   942k|#define INTRA_DC                 1
  ------------------
  |  Branch (250:25): [True: 810k, False: 132k]
  ------------------
  251|   942k|                                && (cand_intra_pred_mode_t != INTRA_DC))
  ------------------
  |  |  504|   810k|#define INTRA_DC                 1
  ------------------
  |  Branch (251:36): [True: 441k, False: 368k]
  ------------------
  252|   441k|                {
  253|   441k|                    cand_mode_list[2] = INTRA_DC;
  ------------------
  |  |  504|   441k|#define INTRA_DC                 1
  ------------------
  254|   441k|                }
  255|   501k|                else
  256|   501k|                {
  257|   501k|                    cand_mode_list[2] = INTRA_ANGULAR(26);
  ------------------
  |  |  507|   501k|#define INTRA_ANGULAR(x) (x)
  ------------------
  258|   501k|                }
  259|  2.56M|            }
  260|       |
  261|       |            /* Computing Intra pred mode */
  262|  3.32M|            if(ps_cu->ai4_prev_intra_luma_pred_flag[2 * i + j] == 1)
  ------------------
  |  Branch (262:16): [True: 1.97M, False: 1.34M]
  ------------------
  263|  1.97M|            {
  264|  1.97M|                ps_cu->ai4_intra_luma_pred_mode[2 * i + j] =
  265|  1.97M|                                cand_mode_list[ps_cu->ai4_mpm_idx[2 * i + j]];
  266|  1.97M|            }
  267|  1.34M|            else
  268|  1.34M|            {
  269|  1.34M|                WORD32 intra_pred_mode;
  270|       |                /* Arranging cand_mode_list in increasing order */
  271|  1.34M|                if(cand_mode_list[0] > cand_mode_list[1])
  ------------------
  |  Branch (271:20): [True: 706k, False: 642k]
  ------------------
  272|   706k|                {
  273|   706k|                    SWAP(cand_mode_list[0], cand_mode_list[1]);
  ------------------
  |  |   87|   706k|#define SWAP(X,Y)                   \
  |  |   88|   706k|{                                   \
  |  |   89|   706k|    (X) = (X) ^ (Y);                \
  |  |   90|   706k|    (Y) = (X) ^ (Y);                \
  |  |   91|   706k|    (X) = (X) ^ (Y);                \
  |  |   92|   706k|}
  ------------------
  274|   706k|                }
  275|  1.34M|                if(cand_mode_list[0] > cand_mode_list[2])
  ------------------
  |  Branch (275:20): [True: 929k, False: 420k]
  ------------------
  276|   929k|                {
  277|   929k|                    SWAP(cand_mode_list[0], cand_mode_list[2]);
  ------------------
  |  |   87|   929k|#define SWAP(X,Y)                   \
  |  |   88|   929k|{                                   \
  |  |   89|   929k|    (X) = (X) ^ (Y);                \
  |  |   90|   929k|    (Y) = (X) ^ (Y);                \
  |  |   91|   929k|    (X) = (X) ^ (Y);                \
  |  |   92|   929k|}
  ------------------
  278|   929k|                }
  279|  1.34M|                if(cand_mode_list[1] > cand_mode_list[2])
  ------------------
  |  Branch (279:20): [True: 1.13M, False: 214k]
  ------------------
  280|  1.13M|                {
  281|  1.13M|                    SWAP(cand_mode_list[1], cand_mode_list[2]);
  ------------------
  |  |   87|  1.13M|#define SWAP(X,Y)                   \
  |  |   88|  1.13M|{                                   \
  |  |   89|  1.13M|    (X) = (X) ^ (Y);                \
  |  |   90|  1.13M|    (Y) = (X) ^ (Y);                \
  |  |   91|  1.13M|    (X) = (X) ^ (Y);                \
  |  |   92|  1.13M|}
  ------------------
  282|  1.13M|                }
  283|       |
  284|  1.34M|                intra_pred_mode = ps_cu->ai4_rem_intra_luma_pred_mode[2 * i + j];
  285|       |
  286|  1.34M|                if(intra_pred_mode >= cand_mode_list[0])
  ------------------
  |  Branch (286:20): [True: 1.22M, False: 124k]
  ------------------
  287|  1.22M|                    intra_pred_mode++;
  288|       |
  289|  1.34M|                if(intra_pred_mode >= cand_mode_list[1])
  ------------------
  |  Branch (289:20): [True: 991k, False: 357k]
  ------------------
  290|   991k|                    intra_pred_mode++;
  291|       |
  292|  1.34M|                if(intra_pred_mode >= cand_mode_list[2])
  ------------------
  |  Branch (292:20): [True: 446k, False: 902k]
  ------------------
  293|   446k|                    intra_pred_mode++;
  294|       |
  295|  1.34M|                ps_cu->ai4_intra_luma_pred_mode[2 * i + j] = intra_pred_mode;
  296|  1.34M|            }
  297|       |            /* Update Top and Left intra pred mode */
  298|  3.32M|            {
  299|  3.32M|                WORD32 intra_pred_mode;
  300|       |
  301|  3.32M|                intra_pred_mode = ps_cu->ai4_intra_luma_pred_mode[2 * i + j];
  302|       |
  303|  3.32M|                ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_left + i * block_offset_in_min_pu, intra_pred_mode, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
  ------------------
  |  |  357|  3.32M|#define MIN_PU_SIZE         4
  ------------------
  304|  3.32M|                ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_top + j * block_offset_in_min_pu, intra_pred_mode, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
  ------------------
  |  |  357|  3.32M|#define MIN_PU_SIZE         4
  ------------------
  305|       |
  306|  3.32M|            }
  307|       |            /* If partition is PART_NxN, then left is available for second column always */
  308|  3.32M|            available_l_tmp = 1;
  309|       |
  310|  3.32M|        }
  311|       |        /* If partition is PART_NxN, then top is available for bottom row always */
  312|  2.65M|        available_t = 1;
  313|  2.65M|    }
  314|       |
  315|       |    /* In case it is PART_2Nx2N partition, replicate intra pred mode in other three entries */
  316|  2.32M|    if(ps_cu->i4_part_mode == PART_2Nx2N)
  ------------------
  |  Branch (316:8): [True: 1.99M, False: 333k]
  ------------------
  317|  1.99M|    {
  318|  1.99M|        ps_cu->ai4_intra_luma_pred_mode[1] = ps_cu->ai4_intra_luma_pred_mode[0];
  319|  1.99M|        ps_cu->ai4_intra_luma_pred_mode[2] = ps_cu->ai4_intra_luma_pred_mode[0];
  320|  1.99M|        ps_cu->ai4_intra_luma_pred_mode[3] = ps_cu->ai4_intra_luma_pred_mode[0];
  321|  1.99M|    }
  322|  2.32M|}

ihevcd_unpack_coeffs:
  151|  3.65M|{
  152|       |    /* Generating coeffs from coeff-map */
  153|  3.65M|    WORD32 i;
  154|  3.65M|    WORD16 *pi2_sblk_ptr;
  155|  3.65M|    WORD32 subblk_pos_x, subblk_pos_y;
  156|  3.65M|    WORD32 sblk_scan_idx, coeff_raster_idx;
  157|  3.65M|    WORD32 sblk_non_zero_coeff_idx;
  158|  3.65M|    tu_sblk_coeff_data_t *ps_tu_sblk_coeff_data;
  159|  3.65M|    UWORD8 u1_num_coded_sblks, u1_scan_type;
  160|  3.65M|    UWORD8 *pu1_new_tu_coeff_data;
  161|  3.65M|    WORD32 trans_size;
  162|  3.65M|    WORD32 xs, ys;
  163|  3.65M|    WORD32 trans_skip;
  164|  3.65M|    WORD16 iquant_out;
  165|  3.65M|    WORD32 shift_iq;
  166|  3.65M|    {
  167|  3.65M|        WORD32 bit_depth;
  168|       |
  169|  3.65M|        bit_depth = 8 + 0;
  170|  3.65M|        shift_iq = bit_depth + log2_trans_size - 5;
  171|  3.65M|    }
  172|  3.65M|    trans_size = (1 << log2_trans_size);
  173|       |
  174|       |    /* First byte points to number of coded blocks */
  175|  3.65M|    u1_num_coded_sblks = *pu1_tu_coeff_data++;
  176|       |
  177|       |    /* Next byte points to scan type */
  178|  3.65M|    u1_scan_type = *pu1_tu_coeff_data++;
  179|       |    /* 0th bit has trans_skip */
  180|  3.65M|    trans_skip = u1_scan_type & 1;
  181|  3.65M|    u1_scan_type >>= 1;
  182|       |
  183|  3.65M|    pi2_sblk_ptr = pi2_tu_coeff;
  184|       |
  185|       |    /* Initially all columns are assumed to be zero */
  186|  3.65M|    *pu4_zero_cols = 0xFFFFFFFF;
  187|       |    /* Initially all rows are assumed to be zero */
  188|  3.65M|    *pu4_zero_rows = 0xFFFFFFFF;
  189|       |
  190|  3.65M|    ps_tu_sblk_coeff_data = (tu_sblk_coeff_data_t *)(pu1_tu_coeff_data);
  191|       |
  192|  3.65M|    if(trans_skip)
  ------------------
  |  Branch (192:8): [True: 250k, False: 3.40M]
  ------------------
  193|   250k|        memset(pi2_tu_coeff, 0, trans_size * trans_size * sizeof(WORD16));
  194|       |
  195|  3.65M|    STATS_INIT_SBLK_AND_COEFF_POS();
  ------------------
  |  |  141|  3.65M|#define STATS_INIT_SBLK_AND_COEFF_POS() ;
  ------------------
  196|       |
  197|       |    /* DC only case */
  198|  3.65M|    if((e_trans_type != DST_4x4) && (1 == u1_num_coded_sblks)
  ------------------
  |  Branch (198:8): [True: 3.33M, False: 317k]
  |  Branch (198:37): [True: 2.20M, False: 1.13M]
  ------------------
  199|  3.65M|                    && (0 == ps_tu_sblk_coeff_data->u2_subblk_pos)
  ------------------
  |  Branch (199:24): [True: 2.16M, False: 40.5k]
  ------------------
  200|  3.65M|                    && (1 == ps_tu_sblk_coeff_data->u2_sig_coeff_map))
  ------------------
  |  Branch (200:24): [True: 1.21M, False: 950k]
  ------------------
  201|  1.21M|    {
  202|  1.21M|        *pu4_coeff_type = 1;
  203|       |
  204|  1.21M|        if(!trans_quant_bypass)
  ------------------
  |  Branch (204:12): [True: 1.19M, False: 19.3k]
  ------------------
  205|  1.19M|        {
  206|  1.19M|            if(4 == trans_size)
  ------------------
  |  Branch (206:16): [True: 145k, False: 1.05M]
  ------------------
  207|   145k|            {
  208|   145k|                IQUANT_4x4(iquant_out,
  ------------------
  |  |  158|   145k|#define IQUANT_4x4(res, coeff /*pi2_src[index*src_strd]*/, dequant_coeff /*pi2_dequant_coeff[index*trans_size] * g_ihevc_iquant_scales[qp_rem] */, shift_iq, qp_div)   \
  |  |  159|   145k|{                                                                                                                                              \
  |  |  160|   145k|    WORD32 clip_coeff, tmp;                                                                                                                    \
  |  |  161|   145k|    WORD32 coeff_min,coeff_max;                                                                                                                \
  |  |  162|   145k|    WORD32 coeff_bit_range;                                                                                                                    \
  |  |  163|   145k|    WORD32 add_iq;                                                                                                                             \
  |  |  164|   145k|    add_iq = SHL_NEG(1 , (shift_iq - qp_div - 1));  /* To be moved outside in neon. To be computed once per transform call */                  \
  |  |  ------------------
  |  |  |  |   60|   145k|#define SHL_NEG(val,shift)  ((shift<0)?(val>>(-shift)):(val<<shift))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:30): [True: 73.5k, False: 72.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|   145k|                                                                                                                                               \
  |  |  166|   145k|    coeff_bit_range = 16;                                                                                                                      \
  |  |  167|   145k|    if(qp_div > shift_iq)                                                                                                                      \
  |  |  ------------------
  |  |  |  Branch (167:8): [True: 63.7k, False: 81.8k]
  |  |  ------------------
  |  |  168|   145k|        coeff_bit_range = 10;                                                                                                                  \
  |  |  169|   145k|                                                                                                                                               \
  |  |  170|   145k|    coeff_min = -(1<<(coeff_bit_range-1));                                                                                                     \
  |  |  171|   145k|    coeff_max = (1<<(coeff_bit_range-1)) - 1;                                                                                                  \
  |  |  172|   145k|                                                                                                                                               \
  |  |  173|   145k|    clip_coeff = CLIP3(coeff,coeff_min,coeff_max);                                                                                             \
  |  |  ------------------
  |  |  |  |   40|   145k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 145k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 145k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  174|   145k|                                                                                                                                               \
  |  |  175|   145k|    tmp = clip_coeff * dequant_coeff ;                                                                                                         \
  |  |  176|   145k|    tmp = tmp + add_iq;                                                                                                                        \
  |  |  177|   145k|    tmp = SHR_NEG(tmp,(shift_iq - qp_div));                                                                                                    \
  |  |  ------------------
  |  |  |  |   59|   145k|#define SHR_NEG(val,shift)  ((shift>0)?(val>>shift):(val<<(-shift)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:30): [True: 72.1k, False: 73.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|   145k|                                                                                                                                               \
  |  |  179|   145k|    res = CLIP_S16(tmp);                                                                                                                       \
  |  |  ------------------
  |  |  |  |   53|   145k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|   145k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (40:29): [True: 2.38k, False: 143k]
  |  |  |  |  |  |  |  Branch (40:53): [True: 564, False: 142k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  180|   145k|}
  ------------------
  209|   145k|                           ps_tu_sblk_coeff_data->ai2_level[0],
  210|   145k|                           pi2_dequant_matrix[0]
  211|   145k|                                           * g_ihevc_iquant_scales[qp_rem],
  212|   145k|                           shift_iq, qp_div);
  213|   145k|            }
  214|  1.05M|            else
  215|  1.05M|            {
  216|  1.05M|                IQUANT(iquant_out, ps_tu_sblk_coeff_data->ai2_level[0],
  ------------------
  |  |  140|  1.05M|#define IQUANT(res, coeff /*pi2_src[index*src_strd]*/, dequant_coeff /*pi2_dequant_coeff[index*trans_size] * g_ihevc_iquant_scales[qp_rem] */, shift_iq, qp_div)       \
  |  |  141|  1.05M|{                                                                                                                                              \
  |  |  142|  1.05M|    WORD32 tmp, add_iq;                                                                                                                        \
  |  |  143|  1.05M|                                                                                                                                               \
  |  |  144|  1.05M|    add_iq = SHL_NEG(1 , (shift_iq - qp_div - 1));  /* To be moved outside in neon. To be computed once per transform call */                  \
  |  |  ------------------
  |  |  |  |   60|  1.05M|#define SHL_NEG(val,shift)  ((shift<0)?(val>>(-shift)):(val<<shift))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:30): [True: 992k, False: 59.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  1.05M|                                                                                                                                               \
  |  |  146|  1.05M|    tmp = coeff * dequant_coeff ;                                                                                                              \
  |  |  147|  1.05M|    tmp = tmp + add_iq;                                                                                                                        \
  |  |  148|  1.05M|    tmp = SHR_NEG(tmp,(shift_iq - qp_div));                                                                                                    \
  |  |  ------------------
  |  |  |  |   59|  1.05M|#define SHR_NEG(val,shift)  ((shift>0)?(val>>shift):(val<<(-shift)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:30): [True: 60.3k, False: 991k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|  1.05M|                                                                                                                                               \
  |  |  150|  1.05M|    res = CLIP_S16(tmp);                                                                                                                       \
  |  |  ------------------
  |  |  |  |   53|  1.05M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  1.05M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (40:29): [True: 325, False: 1.05M]
  |  |  |  |  |  |  |  Branch (40:53): [True: 268, False: 1.05M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|  1.05M|}
  ------------------
  217|  1.05M|                       pi2_dequant_matrix[0] * g_ihevc_iquant_scales[qp_rem],
  218|  1.05M|                       shift_iq, qp_div);
  219|  1.05M|            }
  220|  1.19M|            if(trans_skip)
  ------------------
  |  Branch (220:16): [True: 52.4k, False: 1.14M]
  ------------------
  221|  52.4k|                iquant_out = (iquant_out + 16) >> 5;
  222|  1.19M|        }
  223|  19.3k|        else
  224|  19.3k|        {
  225|       |            /* setting the column to zero */
  226|   251k|            for(i = 0; i < trans_size; i++)
  ------------------
  |  Branch (226:24): [True: 232k, False: 19.3k]
  ------------------
  227|   232k|                *(pi2_tu_coeff + i * trans_size) = 0;
  228|       |
  229|  19.3k|            iquant_out = ps_tu_sblk_coeff_data->ai2_level[0];
  230|  19.3k|        }
  231|  1.21M|        *pi2_coeff_value = iquant_out;
  232|  1.21M|        *pi2_tu_coeff = iquant_out;
  233|  1.21M|        *pu4_zero_cols &= ~0x1;
  234|  1.21M|        *pu4_zero_rows &= ~0x1;
  235|  1.21M|        ps_tu_sblk_coeff_data =
  236|  1.21M|                        (void *)&ps_tu_sblk_coeff_data->ai2_level[1];
  237|       |
  238|  1.21M|        STATS_UPDATE_COEFF_COUNT();
  ------------------
  |  |  144|  1.21M|#define STATS_UPDATE_COEFF_COUNT() ;
  ------------------
  239|  1.21M|        STATS_LAST_SBLK_POS_UPDATE(e_trans_type, (trans_skip || trans_quant_bypass),  0, 0);
  ------------------
  |  |  142|  1.21M|#define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ;
  ------------------
  240|  1.21M|        STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, (trans_quant_bypass || trans_skip));
  ------------------
  |  |  143|  1.21M|#define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ;
  ------------------
  241|  1.21M|        return ((UWORD8 *)ps_tu_sblk_coeff_data);
  242|  1.21M|    }
  243|  2.43M|    else
  244|  2.43M|    {
  245|  2.43M|        *pu4_coeff_type = 0;
  246|       |        /* In case of trans skip, memset has already happened */
  247|  2.43M|        if(!trans_skip)
  ------------------
  |  Branch (247:12): [True: 2.26M, False: 177k]
  ------------------
  248|  2.26M|            memset(pi2_tu_coeff, 0, trans_size * trans_size * sizeof(WORD16));
  249|  2.43M|    }
  250|       |
  251|  8.07M|    for(i = 0; i < u1_num_coded_sblks; i++)
  ------------------
  |  Branch (251:16): [True: 5.63M, False: 2.43M]
  ------------------
  252|  5.63M|    {
  253|  5.63M|        UWORD32 u4_sig_coeff_map;
  254|  5.63M|        subblk_pos_x = ps_tu_sblk_coeff_data->u2_subblk_pos & 0x00FF;
  255|  5.63M|        subblk_pos_y = (ps_tu_sblk_coeff_data->u2_subblk_pos & 0xFF00) >> 8;
  256|       |
  257|  5.63M|        STATS_LAST_SBLK_POS_UPDATE(e_trans_type, (trans_skip || trans_quant_bypass), subblk_pos_x, subblk_pos_y);
  ------------------
  |  |  142|  5.63M|#define STATS_LAST_SBLK_POS_UPDATE(e_trans_type, t_skip_or_tq_bypass, sblk_x, sblk_y) ;
  ------------------
  258|       |
  259|  5.63M|        subblk_pos_x = subblk_pos_x * MIN_TU_SIZE;
  ------------------
  |  |  348|  5.63M|#define MIN_TU_SIZE         4
  ------------------
  260|  5.63M|        subblk_pos_y = subblk_pos_y * MIN_TU_SIZE;
  ------------------
  |  |  348|  5.63M|#define MIN_TU_SIZE         4
  ------------------
  261|       |
  262|  5.63M|        pi2_sblk_ptr = pi2_tu_coeff + subblk_pos_y * trans_size
  263|  5.63M|                        + subblk_pos_x;
  264|       |
  265|       |        //*pu4_zero_cols &= ~(0xF << subblk_pos_x);
  266|       |
  267|  5.63M|        sblk_non_zero_coeff_idx = 0;
  268|  5.63M|        u4_sig_coeff_map = ps_tu_sblk_coeff_data->u2_sig_coeff_map;
  269|       |        //for(sblk_scan_idx = (31 - CLZ(u4_sig_coeff_map)); sblk_scan_idx >= 0; sblk_scan_idx--)
  270|  5.63M|        sblk_scan_idx = 31;
  271|  5.63M|        do
  272|  27.0M|        {
  273|  27.0M|            WORD32 clz = CLZ(u4_sig_coeff_map);
  274|       |
  275|  27.0M|            sblk_scan_idx -= clz;
  276|       |            /* when clz is 31, u4_sig_coeff_map << (clz+1) might result in unknown behaviour in some cases */
  277|       |            /* Hence either use SHL which takes care of handling these issues based on platform or shift in two stages */
  278|  27.0M|            u4_sig_coeff_map = u4_sig_coeff_map << clz;
  279|       |            /* Copying coeffs and storing in reverse order */
  280|  27.0M|            {
  281|  27.0M|                STATS_UPDATE_COEFF_COUNT();
  ------------------
  |  |  144|  27.0M|#define STATS_UPDATE_COEFF_COUNT() ;
  ------------------
  282|  27.0M|                coeff_raster_idx =
  283|  27.0M|                                gau1_ihevc_invscan4x4[u1_scan_type][sblk_scan_idx];
  284|       |
  285|  27.0M|                xs = coeff_raster_idx & 0x3;
  286|  27.0M|                ys = coeff_raster_idx >> 2;
  287|       |
  288|  27.0M|                if(!trans_quant_bypass)
  ------------------
  |  Branch (288:20): [True: 26.3M, False: 654k]
  ------------------
  289|  26.3M|                {
  290|  26.3M|                    if(4 == trans_size)
  ------------------
  |  Branch (290:24): [True: 2.08M, False: 24.2M]
  ------------------
  291|  2.08M|                    {
  292|  2.08M|                        IQUANT_4x4(iquant_out,
  ------------------
  |  |  158|  2.08M|#define IQUANT_4x4(res, coeff /*pi2_src[index*src_strd]*/, dequant_coeff /*pi2_dequant_coeff[index*trans_size] * g_ihevc_iquant_scales[qp_rem] */, shift_iq, qp_div)   \
  |  |  159|  2.08M|{                                                                                                                                              \
  |  |  160|  2.08M|    WORD32 clip_coeff, tmp;                                                                                                                    \
  |  |  161|  2.08M|    WORD32 coeff_min,coeff_max;                                                                                                                \
  |  |  162|  2.08M|    WORD32 coeff_bit_range;                                                                                                                    \
  |  |  163|  2.08M|    WORD32 add_iq;                                                                                                                             \
  |  |  164|  2.08M|    add_iq = SHL_NEG(1 , (shift_iq - qp_div - 1));  /* To be moved outside in neon. To be computed once per transform call */                  \
  |  |  ------------------
  |  |  |  |   60|  2.08M|#define SHL_NEG(val,shift)  ((shift<0)?(val>>(-shift)):(val<<shift))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:30): [True: 644k, False: 1.44M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|  2.08M|                                                                                                                                               \
  |  |  166|  2.08M|    coeff_bit_range = 16;                                                                                                                      \
  |  |  167|  2.08M|    if(qp_div > shift_iq)                                                                                                                      \
  |  |  ------------------
  |  |  |  Branch (167:8): [True: 428k, False: 1.65M]
  |  |  ------------------
  |  |  168|  2.08M|        coeff_bit_range = 10;                                                                                                                  \
  |  |  169|  2.08M|                                                                                                                                               \
  |  |  170|  2.08M|    coeff_min = -(1<<(coeff_bit_range-1));                                                                                                     \
  |  |  171|  2.08M|    coeff_max = (1<<(coeff_bit_range-1)) - 1;                                                                                                  \
  |  |  172|  2.08M|                                                                                                                                               \
  |  |  173|  2.08M|    clip_coeff = CLIP3(coeff,coeff_min,coeff_max);                                                                                             \
  |  |  ------------------
  |  |  |  |   40|  2.08M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 8, False: 2.08M]
  |  |  |  |  |  Branch (40:53): [True: 10, False: 2.08M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  174|  2.08M|                                                                                                                                               \
  |  |  175|  2.08M|    tmp = clip_coeff * dequant_coeff ;                                                                                                         \
  |  |  176|  2.08M|    tmp = tmp + add_iq;                                                                                                                        \
  |  |  177|  2.08M|    tmp = SHR_NEG(tmp,(shift_iq - qp_div));                                                                                                    \
  |  |  ------------------
  |  |  |  |   59|  2.08M|#define SHR_NEG(val,shift)  ((shift>0)?(val>>shift):(val<<(-shift)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:30): [True: 1.44M, False: 643k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  178|  2.08M|                                                                                                                                               \
  |  |  179|  2.08M|    res = CLIP_S16(tmp);                                                                                                                       \
  |  |  ------------------
  |  |  |  |   53|  2.08M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  2.08M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (40:29): [True: 23.3k, False: 2.06M]
  |  |  |  |  |  |  |  Branch (40:53): [True: 24.2k, False: 2.03M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  180|  2.08M|}
  ------------------
  293|  2.08M|                                   ps_tu_sblk_coeff_data->ai2_level[sblk_non_zero_coeff_idx],
  294|  2.08M|                                   pi2_dequant_matrix[(subblk_pos_x + xs)
  295|  2.08M|                                                   + (subblk_pos_y + ys)
  296|  2.08M|                                                   * trans_size]
  297|  2.08M|                                   * g_ihevc_iquant_scales[qp_rem],
  298|  2.08M|                                   shift_iq, qp_div);
  299|  2.08M|                        sblk_non_zero_coeff_idx++;
  300|  2.08M|                    }
  301|  24.2M|                    else
  302|  24.2M|                    {
  303|  24.2M|                        IQUANT(iquant_out,
  ------------------
  |  |  140|  24.2M|#define IQUANT(res, coeff /*pi2_src[index*src_strd]*/, dequant_coeff /*pi2_dequant_coeff[index*trans_size] * g_ihevc_iquant_scales[qp_rem] */, shift_iq, qp_div)       \
  |  |  141|  24.2M|{                                                                                                                                              \
  |  |  142|  24.2M|    WORD32 tmp, add_iq;                                                                                                                        \
  |  |  143|  24.2M|                                                                                                                                               \
  |  |  144|  24.2M|    add_iq = SHL_NEG(1 , (shift_iq - qp_div - 1));  /* To be moved outside in neon. To be computed once per transform call */                  \
  |  |  ------------------
  |  |  |  |   60|  24.2M|#define SHL_NEG(val,shift)  ((shift<0)?(val>>(-shift)):(val<<shift))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (60:30): [True: 21.5M, False: 2.74M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  24.2M|                                                                                                                                               \
  |  |  146|  24.2M|    tmp = coeff * dequant_coeff ;                                                                                                              \
  |  |  147|  24.2M|    tmp = tmp + add_iq;                                                                                                                        \
  |  |  148|  24.2M|    tmp = SHR_NEG(tmp,(shift_iq - qp_div));                                                                                                    \
  |  |  ------------------
  |  |  |  |   59|  24.2M|#define SHR_NEG(val,shift)  ((shift>0)?(val>>shift):(val<<(-shift)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (59:30): [True: 2.76M, False: 21.5M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|  24.2M|                                                                                                                                               \
  |  |  150|  24.2M|    res = CLIP_S16(tmp);                                                                                                                       \
  |  |  ------------------
  |  |  |  |   53|  24.2M|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  24.2M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (40:29): [True: 61.7k, False: 24.2M]
  |  |  |  |  |  |  |  Branch (40:53): [True: 58.2k, False: 24.1M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|  24.2M|}
  ------------------
  304|  24.2M|                               ps_tu_sblk_coeff_data->ai2_level[sblk_non_zero_coeff_idx],
  305|  24.2M|                               pi2_dequant_matrix[(subblk_pos_x + xs)
  306|  24.2M|                                               + (subblk_pos_y + ys)
  307|  24.2M|                                               * trans_size]
  308|  24.2M|                               * g_ihevc_iquant_scales[qp_rem],
  309|  24.2M|                               shift_iq, qp_div);
  310|  24.2M|                        sblk_non_zero_coeff_idx++;
  311|  24.2M|                    }
  312|       |
  313|  26.3M|                    if(trans_skip)
  ------------------
  |  Branch (313:24): [True: 848k, False: 25.5M]
  ------------------
  314|   848k|                        iquant_out = (iquant_out + 16) >> 5;
  315|  26.3M|                }
  316|   654k|                else
  317|   654k|                {
  318|   654k|                    iquant_out = ps_tu_sblk_coeff_data->ai2_level[sblk_non_zero_coeff_idx++];
  319|   654k|                }
  320|  27.0M|                *pu4_zero_cols &= ~(0x1 << (subblk_pos_x + xs));
  321|  27.0M|                *pu4_zero_rows &= ~(0x1 << (subblk_pos_y + ys));
  322|  27.0M|                *(pi2_sblk_ptr + xs + ys * trans_size) = iquant_out;
  323|  27.0M|            }
  324|  27.0M|            sblk_scan_idx--;
  325|  27.0M|            u4_sig_coeff_map <<= 1;
  326|       |
  327|  27.0M|        }while(u4_sig_coeff_map);
  ------------------
  |  Branch (327:16): [True: 21.4M, False: 5.63M]
  ------------------
  328|       |        /* Updating the sblk pointer */
  329|  5.63M|        ps_tu_sblk_coeff_data =
  330|  5.63M|                        (void *)&ps_tu_sblk_coeff_data->ai2_level[sblk_non_zero_coeff_idx];
  331|  5.63M|    }
  332|       |
  333|  2.43M|    STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, (trans_quant_bypass || trans_skip));
  ------------------
  |  |  143|  2.43M|#define STATS_UPDATE_SBLK_AND_COEFF_HISTOGRAM(e_trans_type, t_skip_or_tq_bypass) ;
  ------------------
  334|       |
  335|  2.43M|    pu1_new_tu_coeff_data = (UWORD8 *)ps_tu_sblk_coeff_data;
  336|       |
  337|  2.43M|    return pu1_new_tu_coeff_data;
  338|  3.65M|}
ihevcd_get_intra_nbr_flag:
  347|  3.95M|{
  348|  3.95M|    sps_t *ps_sps;
  349|  3.95M|    UWORD8 u1_bot_lt_avail, u1_left_avail, u1_top_avail, u1_top_rt_avail,
  350|  3.95M|                    u1_top_lt_avail;
  351|  3.95M|    WORD32 x_cur, y_cur, x_nbr, y_nbr;
  352|  3.95M|    UWORD8 *pu1_nbr_intra_flag;
  353|  3.95M|    UWORD8 *pu1_pic_intra_flag;
  354|  3.95M|    UWORD8 top_right, top, top_left, left, bot_left;
  355|  3.95M|    WORD32 intra_pos;
  356|  3.95M|    WORD32 num_8_blks, num_8_blks_in_bits;
  357|  3.95M|    WORD32 numbytes_row = (i2_pic_width_in_luma_samples + 63) / 64;
  358|  3.95M|    WORD32 cur_x, cur_y;
  359|  3.95M|    WORD32 i;
  360|  3.95M|    WORD32 nbr_flags;
  361|       |
  362|  3.95M|    ps_sps = ps_proc->ps_sps;
  363|  3.95M|    cur_x = ps_tu->b4_pos_x;
  364|  3.95M|    cur_y = ps_tu->b4_pos_y;
  365|       |
  366|  3.95M|    u1_bot_lt_avail = (pu4_intra_nbr_avail[1 + cur_y + trans_size / MIN_TU_SIZE]
  ------------------
  |  |  348|  3.95M|#define MIN_TU_SIZE         4
  ------------------
  367|  3.95M|                    >> (31 - (1 + cur_x - 1))) & 1;
  368|  3.95M|    u1_left_avail = (pu4_intra_nbr_avail[1 + cur_y] >> (31 - (1 + cur_x - 1)))
  369|  3.95M|                    & 1;
  370|  3.95M|    u1_top_avail = (pu4_intra_nbr_avail[1 + cur_y - 1] >> (31 - (1 + cur_x)))
  371|  3.95M|                    & 1;
  372|  3.95M|    u1_top_rt_avail = (pu4_intra_nbr_avail[1 + cur_y - 1]
  373|  3.95M|                    >> (31 - (1 + cur_x + trans_size / MIN_TU_SIZE))) & 1;
  ------------------
  |  |  348|  3.95M|#define MIN_TU_SIZE         4
  ------------------
  374|  3.95M|    u1_top_lt_avail = (pu4_intra_nbr_avail[1 + cur_y - 1]
  375|  3.95M|                    >> (31 - (1 + cur_x - 1))) & 1;
  376|       |
  377|  3.95M|    x_cur = ps_proc->i4_ctb_x * ctb_size + cur_x * MIN_TU_SIZE;
  ------------------
  |  |  348|  3.95M|#define MIN_TU_SIZE         4
  ------------------
  378|  3.95M|    y_cur = ps_proc->i4_ctb_y * ctb_size + cur_y * MIN_TU_SIZE;
  ------------------
  |  |  348|  3.95M|#define MIN_TU_SIZE         4
  ------------------
  379|       |
  380|  3.95M|    pu1_pic_intra_flag = ps_proc->pu1_pic_intra_flag;
  381|       |
  382|       |    /* WORD32 nbr_flags as below  MSB --> LSB */
  383|       |    /*    Top-Left | Top-Right | Top | Left | Bottom-Left
  384|       |     *       1         4         4     4         4
  385|       |     */
  386|  3.95M|    bot_left = 0;
  387|  3.95M|    left = 0;
  388|  3.95M|    top_right = 0;
  389|  3.95M|    top = 0;
  390|  3.95M|    top_left = 0;
  391|       |
  392|  3.95M|    num_8_blks = trans_size > 4 ? trans_size / 8 : 1;
  ------------------
  |  Branch (392:18): [True: 3.25M, False: 705k]
  ------------------
  393|  3.95M|    num_8_blks_in_bits = ((1 << num_8_blks) - 1);
  394|       |
  395|  3.95M|    if(i1_constrained_intra_pred_flag)
  ------------------
  |  Branch (395:8): [True: 3.05M, False: 907k]
  ------------------
  396|  3.05M|    {
  397|       |        /* TODO: constrained intra pred not tested */
  398|  3.05M|        if(u1_bot_lt_avail)
  ------------------
  |  Branch (398:12): [True: 913k, False: 2.13M]
  ------------------
  399|   913k|        {
  400|   913k|            x_nbr = x_cur - 1;
  401|   913k|            y_nbr = y_cur + trans_size;
  402|       |
  403|   913k|            pu1_nbr_intra_flag = pu1_pic_intra_flag + y_nbr / 8 * numbytes_row
  404|   913k|                            + x_nbr / 64;
  405|   913k|            intra_pos = ((x_nbr / 8) % 8);
  406|  2.86M|            for(i = 0; i < num_8_blks; i++)
  ------------------
  |  Branch (406:24): [True: 1.95M, False: 913k]
  ------------------
  407|  1.95M|            {
  408|  1.95M|                bot_left |= ((*(pu1_nbr_intra_flag + i * numbytes_row)
  409|  1.95M|                                >> intra_pos) & 1) << i;
  410|  1.95M|            }
  411|   913k|            bot_left &= num_8_blks_in_bits;
  412|   913k|        }
  413|  3.05M|        if(u1_left_avail)
  ------------------
  |  Branch (413:12): [True: 3.03M, False: 20.2k]
  ------------------
  414|  3.03M|        {
  415|  3.03M|            x_nbr = x_cur - 1;
  416|  3.03M|            y_nbr = y_cur;
  417|       |
  418|  3.03M|            pu1_nbr_intra_flag = pu1_pic_intra_flag + y_nbr / 8 * numbytes_row
  419|  3.03M|                            + x_nbr / 64;
  420|  3.03M|            intra_pos = ((x_nbr / 8) % 8);
  421|       |
  422|  9.87M|            for(i = 0; i < num_8_blks; i++)
  ------------------
  |  Branch (422:24): [True: 6.84M, False: 3.03M]
  ------------------
  423|  6.84M|            {
  424|  6.84M|                left |= ((*(pu1_nbr_intra_flag + i * numbytes_row) >> intra_pos)
  425|  6.84M|                                & 1) << i;
  426|  6.84M|            }
  427|  3.03M|            left &= num_8_blks_in_bits;
  428|  3.03M|        }
  429|  3.05M|        if(u1_top_avail)
  ------------------
  |  Branch (429:12): [True: 2.86M, False: 187k]
  ------------------
  430|  2.86M|        {
  431|  2.86M|            x_nbr = x_cur;
  432|  2.86M|            y_nbr = y_cur - 1;
  433|       |
  434|  2.86M|            pu1_nbr_intra_flag = pu1_pic_intra_flag + y_nbr / 8 * numbytes_row
  435|  2.86M|                            + x_nbr / 64;
  436|  2.86M|            intra_pos = ((x_nbr / 8) % 8);
  437|       |
  438|  2.86M|            top = (*pu1_nbr_intra_flag >> intra_pos);
  439|  2.86M|            top &= num_8_blks_in_bits;
  440|       |            /*
  441|       |             for(i=0;i<num_8_blks;i++)
  442|       |             {
  443|       |             top |= ( (*pu1_nbr_intra_flag >> (intra_pos+i)) & 1) << i;
  444|       |             }
  445|       |             */
  446|  2.86M|        }
  447|  3.05M|        if(u1_top_rt_avail)
  ------------------
  |  Branch (447:12): [True: 1.94M, False: 1.10M]
  ------------------
  448|  1.94M|        {
  449|  1.94M|            x_nbr = x_cur + trans_size;
  450|  1.94M|            y_nbr = y_cur - 1;
  451|       |
  452|  1.94M|            pu1_nbr_intra_flag = pu1_pic_intra_flag + y_nbr / 8 * numbytes_row
  453|  1.94M|                            + x_nbr / 64;
  454|  1.94M|            intra_pos = ((x_nbr / 8) % 8);
  455|       |
  456|  1.94M|            top_right = (*pu1_nbr_intra_flag >> intra_pos);
  457|  1.94M|            top_right &= num_8_blks_in_bits;
  458|       |            /*
  459|       |             for(i=0;i<num_8_blks;i++)
  460|       |             {
  461|       |             top_right |= ( (*pu1_nbr_intra_flag >> (intra_pos+i)) & 1) << i;
  462|       |             }
  463|       |             */
  464|  1.94M|        }
  465|  3.05M|        if(u1_top_lt_avail)
  ------------------
  |  Branch (465:12): [True: 2.84M, False: 205k]
  ------------------
  466|  2.84M|        {
  467|  2.84M|            x_nbr = x_cur - 1;
  468|  2.84M|            y_nbr = y_cur - 1;
  469|       |
  470|  2.84M|            pu1_nbr_intra_flag = pu1_pic_intra_flag + y_nbr / 8 * numbytes_row
  471|  2.84M|                            + x_nbr / 64;
  472|  2.84M|            intra_pos = ((x_nbr / 8) % 8);
  473|       |
  474|  2.84M|            top_left = (*pu1_nbr_intra_flag >> intra_pos) & 1;
  475|  2.84M|        }
  476|  3.05M|    }
  477|   907k|    else
  478|   907k|    {
  479|   907k|        if(u1_top_avail)
  ------------------
  |  Branch (479:12): [True: 877k, False: 29.1k]
  ------------------
  480|   877k|            top = 0xF;
  481|   907k|        if(u1_top_rt_avail)
  ------------------
  |  Branch (481:12): [True: 584k, False: 322k]
  ------------------
  482|   584k|            top_right = 0xF;
  483|   907k|        if(u1_bot_lt_avail)
  ------------------
  |  Branch (483:12): [True: 287k, False: 619k]
  ------------------
  484|   287k|            bot_left = 0xF;
  485|   907k|        if(u1_left_avail)
  ------------------
  |  Branch (485:12): [True: 895k, False: 12.0k]
  ------------------
  486|   895k|            left = 0xF;
  487|   907k|        if(u1_top_lt_avail)
  ------------------
  |  Branch (487:12): [True: 865k, False: 41.3k]
  ------------------
  488|   865k|            top_left = 0x1;
  489|   907k|    }
  490|       |
  491|       |    /* Handling incomplete CTBs */
  492|  3.95M|    {
  493|  3.95M|        WORD32 pu_size_limit = MIN(trans_size, 8);
  ------------------
  |  |   43|  3.95M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 709k, False: 3.24M]
  |  |  ------------------
  ------------------
  494|  3.95M|        WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples
  495|  3.95M|                        - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size)
  496|  3.95M|                        - (ps_tu->b4_pos_x * MIN_TU_SIZE)
  ------------------
  |  |  348|  3.95M|#define MIN_TU_SIZE         4
  ------------------
  497|  3.95M|                        - (1 << (ps_tu->b3_size + 2));
  498|       |        /* ctb_size_top gives number of valid pixels remaining in the current row */
  499|  3.95M|        WORD32 ctb_size_top = MIN(ctb_size, cols_remaining);
  ------------------
  |  |   43|  3.95M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 3.74M, False: 211k]
  |  |  ------------------
  ------------------
  500|  3.95M|        WORD32 ctb_size_top_bits = (1 << (ctb_size_top / pu_size_limit)) - 1;
  501|       |
  502|  3.95M|        WORD32 rows_remaining = ps_sps->i2_pic_height_in_luma_samples
  503|  3.95M|                        - (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size)
  504|  3.95M|                        - (ps_tu->b4_pos_y * MIN_TU_SIZE)
  ------------------
  |  |  348|  3.95M|#define MIN_TU_SIZE         4
  ------------------
  505|  3.95M|                        - (1 << (ps_tu->b3_size + 2));
  506|       |        /* ctb_size_bot gives number of valid pixels remaining in the current column */
  507|  3.95M|        WORD32 ctb_size_bot = MIN(ctb_size, rows_remaining);
  ------------------
  |  |   43|  3.95M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 3.74M, False: 217k]
  |  |  ------------------
  ------------------
  508|  3.95M|        WORD32 ctb_size_bot_bits = (1 << (ctb_size_bot / pu_size_limit)) - 1;
  509|       |
  510|  3.95M|        top_right &= ctb_size_top_bits;
  511|  3.95M|        bot_left &= ctb_size_bot_bits;
  512|  3.95M|    }
  513|       |
  514|       |    /*    Top-Left | Top-Right | Top | Left | Bottom-Left
  515|       |     *      1         4         4     4         4
  516|       |     */
  517|       |
  518|       |    /*
  519|       |     nbr_flags = (top_left << 16) | (gau4_ihevcd_4_bit_reverse[top_right] << 12) | (gau4_ihevcd_4_bit_reverse[top] << 8) | (gau4_ihevcd_4_bit_reverse[left] << 4)
  520|       |     | gau4_ihevcd_4_bit_reverse[bot_left];
  521|       |     */
  522|  3.95M|    nbr_flags = (top_left << 16) | (top_right << 12) | (top << 8) | (gau4_ihevcd_4_bit_reverse[left] << 4)
  523|  3.95M|                    | gau4_ihevcd_4_bit_reverse[bot_left];
  524|       |
  525|       |
  526|  3.95M|    return nbr_flags;
  527|       |
  528|  3.95M|}
ihevcd_iquant_itrans_recon_ctb:
  531|  6.23M|{
  532|  6.23M|    WORD16 *pi2_scaling_mat;
  533|  6.23M|    UWORD8 *pu1_y_dst_ctb;
  534|  6.23M|    UWORD8 *pu1_uv_dst_ctb;
  535|  6.23M|    WORD32 ctb_size;
  536|  6.23M|    codec_t *ps_codec;
  537|  6.23M|    slice_header_t *ps_slice_hdr;
  538|  6.23M|    tu_t *ps_tu;
  539|  6.23M|    WORD16 *pi2_ctb_coeff;
  540|  6.23M|    WORD32 tu_cnt;
  541|  6.23M|    WORD16 *pi2_tu_coeff;
  542|  6.23M|    WORD16 *pi2_tmp;
  543|  6.23M|    WORD32 pic_strd;
  544|  6.23M|    WORD32 luma_nbr_flags;
  545|  6.23M|    WORD32 luma_nbr_flags_4x4[4] = { 0 };
  546|  6.23M|    WORD32 chroma_nbr_flags = 0;
  547|  6.23M|    UWORD8 u1_luma_pred_mode_first_tu = 0;
  548|       |    /* Pointers for generating 2d coeffs from coeff-map */
  549|  6.23M|    UWORD8 *pu1_tu_coeff_data;
  550|       |    /* nbr avail map for CTB */
  551|       |    /* 1st bit points to neighbor (left/top_left/bot_left) */
  552|       |    /* 1Tb starts at 2nd bit from msb of 2nd value in array, followed by number of min_tu's in that ctb */
  553|  6.23M|    UWORD32 au4_intra_nbr_avail[MAX_CTB_SIZE / MIN_TU_SIZE
  554|  6.23M|                    + 2 /* Top nbr + bot nbr */]; UWORD32
  555|  6.23M|                    top_avail_bits;
  556|  6.23M|    sps_t *ps_sps;
  557|  6.23M|    pps_t *ps_pps;
  558|  6.23M|    WORD32 intra_flag;
  559|  6.23M|    UWORD8 *pu1_pic_intra_flag;
  560|       |    /*************************************************************************/
  561|       |    /* Contanis scaling matrix offset in the following order in a 1D buffer  */
  562|       |    /* Intra 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
  563|       |    /* Inter 4 x 4 Y, 4 x 4 U, 4 x 4 V                                       */
  564|       |    /* Intra 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
  565|       |    /* Inter 8 x 8 Y, 8 x 8 U, 8 x 8 V                                       */
  566|       |    /* Intra 16x16 Y, 16x16 U, 16x16 V                                       */
  567|       |    /* Inter 16x16 Y, 16x16 U, 16x16 V                                       */
  568|       |    /* Intra 32x32 Y                                                         */
  569|       |    /* Inter 32x32 Y                                                         */
  570|       |    /*************************************************************************/
  571|       |    /* Only first 20 entries are used. Array is extended to avoid out of bound
  572|       |       reads. Skip CUs (64x64) read this table, but don't really use the value */
  573|  6.23M|    static const WORD32 scaling_mat_offset[] =
  574|  6.23M|      { 0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992,
  575|  6.23M|        1248, 1504, 1760, 2016, 3040, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  576|       |
  577|  6.23M|    PROFILE_DISABLE_IQ_IT_RECON_INTRA_PRED();
  ------------------
  |  |   63|  6.23M|#define PROFILE_DISABLE_IQ_IT_RECON_INTRA_PRED() ;
  ------------------
  578|       |
  579|  6.23M|    ps_sps = ps_proc->ps_sps;
  580|  6.23M|    ps_pps = ps_proc->ps_pps;
  581|  6.23M|    ps_slice_hdr = ps_proc->ps_slice_hdr;
  582|  6.23M|    ps_codec = ps_proc->ps_codec;
  583|       |
  584|  6.23M|    pu1_y_dst_ctb = ps_proc->pu1_cur_ctb_luma;
  585|  6.23M|    pu1_uv_dst_ctb = ps_proc->pu1_cur_ctb_chroma;
  586|       |
  587|  6.23M|    pi2_ctb_coeff = ps_proc->pi2_invscan_out;
  588|       |
  589|  6.23M|    ctb_size = (1 << ps_sps->i1_log2_ctb_size);
  590|  6.23M|    pu1_tu_coeff_data = (UWORD8 *)ps_proc->pv_tu_coeff_data;
  591|       |
  592|  6.23M|    pic_strd = ps_codec->i4_strd;
  593|       |
  594|  6.23M|    pi2_tmp = ps_proc->pi2_itrans_intrmd_buf;
  595|       |
  596|  6.23M|    pi2_tu_coeff = pi2_ctb_coeff;
  597|       |
  598|  6.23M|    ps_tu = ps_proc->ps_tu;
  599|       |
  600|  6.23M|    if((1 == ps_sps->i1_scaling_list_enable_flag) && (1 == ps_pps->i1_pps_scaling_list_data_present_flag))
  ------------------
  |  Branch (600:8): [True: 5.86M, False: 364k]
  |  Branch (600:54): [True: 391k, False: 5.47M]
  ------------------
  601|   391k|    {
  602|   391k|        pi2_scaling_mat = ps_pps->pi2_scaling_mat;
  603|   391k|    }
  604|  5.83M|    else
  605|  5.83M|    {
  606|  5.83M|        pi2_scaling_mat = ps_sps->pi2_scaling_mat;
  607|  5.83M|    }
  608|       |
  609|  6.23M|    {
  610|       |        /* Updating the initial availability map */
  611|  6.23M|        WORD32 i;
  612|  6.23M|        UWORD8 u1_left_ctb_avail, u1_top_lt_ctb_avail, u1_top_rt_ctb_avail,
  613|  6.23M|                        u1_top_ctb_avail;
  614|       |
  615|  6.23M|        u1_left_ctb_avail = ps_proc->u1_left_ctb_avail;
  616|  6.23M|        u1_top_lt_ctb_avail = ps_proc->u1_top_lt_ctb_avail;
  617|  6.23M|        u1_top_ctb_avail = ps_proc->u1_top_ctb_avail;
  618|  6.23M|        u1_top_rt_ctb_avail = ps_proc->u1_top_rt_ctb_avail;
  619|       |
  620|       |        /* Initializing the availability array */
  621|  6.23M|        memset(au4_intra_nbr_avail, 0,
  622|  6.23M|               (MAX_CTB_SIZE / MIN_TU_SIZE + 2) * sizeof(UWORD32));
  ------------------
  |  |  341|  6.23M|#define MAX_CTB_SIZE        64
  ------------------
                             (MAX_CTB_SIZE / MIN_TU_SIZE + 2) * sizeof(UWORD32));
  ------------------
  |  |  348|  6.23M|#define MIN_TU_SIZE         4
  ------------------
  623|       |        /* Initializing the availability array with CTB level availability flags */
  624|  6.23M|        {
  625|  6.23M|            WORD32 rows_remaining = ps_sps->i2_pic_height_in_luma_samples - (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size);
  626|  6.23M|            WORD32 ctb_size_left = MIN(ctb_size, rows_remaining);
  ------------------
  |  |   43|  6.23M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 6.07M, False: 159k]
  |  |  ------------------
  ------------------
  627|  44.8M|            for(i = 0; i < ctb_size_left / MIN_TU_SIZE; i++)
  ------------------
  |  |  348|  44.8M|#define MIN_TU_SIZE         4
  ------------------
  |  Branch (627:24): [True: 38.6M, False: 6.23M]
  ------------------
  628|  38.6M|            {
  629|  38.6M|                au4_intra_nbr_avail[i + 1] = ((UWORD32)u1_left_ctb_avail << 31);
  630|  38.6M|            }
  631|  6.23M|        }
  632|  6.23M|        au4_intra_nbr_avail[0] |= (((UWORD32)u1_top_rt_ctb_avail << 31)
  633|  6.23M|                        >> (1 + ctb_size / MIN_TU_SIZE)); /* 1+ctb_size/4 position bit pos from msb */
  ------------------
  |  |  348|  6.23M|#define MIN_TU_SIZE         4
  ------------------
  634|       |
  635|  6.23M|        au4_intra_nbr_avail[0] |= ((UWORD32)u1_top_lt_ctb_avail << 31);
  636|       |
  637|  6.23M|        {
  638|  6.23M|            WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size);
  639|  6.23M|            WORD32 ctb_size_top = MIN(ctb_size, cols_remaining);
  ------------------
  |  |   43|  6.23M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 6.10M, False: 126k]
  |  |  ------------------
  ------------------
  640|  6.23M|            WORD32 shift = (31 - (ctb_size / MIN_TU_SIZE));
  ------------------
  |  |  348|  6.23M|#define MIN_TU_SIZE         4
  ------------------
  641|       |
  642|       |            /* ctb_size_top gives number of valid pixels remaining in the current row */
  643|       |            /* Since we need pattern of 1's starting from the MSB, an additional shift */
  644|       |            /* is needed */
  645|  6.23M|            shift += ((ctb_size - ctb_size_top) / MIN_TU_SIZE);
  ------------------
  |  |  348|  6.23M|#define MIN_TU_SIZE         4
  ------------------
  646|       |
  647|  6.23M|            top_avail_bits = ((1 << (ctb_size_top / MIN_TU_SIZE)) - 1)
  ------------------
  |  |  348|  6.23M|#define MIN_TU_SIZE         4
  ------------------
  648|  6.23M|                            << shift;
  649|  6.23M|        }
  650|  6.23M|        au4_intra_nbr_avail[0] |= (
  651|  6.23M|                        (u1_top_ctb_avail == 1) ? top_avail_bits : 0x0);
  ------------------
  |  Branch (651:25): [True: 6.00M, False: 221k]
  ------------------
  652|       |        /* Starting from msb 2nd bit to (1+ctb_size/4) bit, set 1 if top avail,or 0 */
  653|       |
  654|  6.23M|    }
  655|       |
  656|       |    /* Applying Inverse transform on all the TU's in CTB */
  657|  73.3M|    for(tu_cnt = 0; tu_cnt < ps_proc->i4_ctb_tu_cnt; tu_cnt++, ps_tu++)
  ------------------
  |  Branch (657:21): [True: 67.1M, False: 6.23M]
  ------------------
  658|  67.1M|    {
  659|  67.1M|        WORD32 transform_skip_flag = 0;
  660|  67.1M|        WORD32 transform_skip_flag_v = 0;
  661|  67.1M|        WORD32 num_comp, c_idx, func_idx;
  662|  67.1M|        WORD32 src_strd, pred_strd, dst_strd;
  663|  67.1M|        WORD32 qp_div = 0, qp_rem = 0;
  664|  67.1M|        WORD32 qp_div_v = 0, qp_rem_v = 0;
  665|  67.1M|        UWORD32 zero_cols = 0, zero_cols_v = 0;
  666|  67.1M|        UWORD32 zero_rows = 0, zero_rows_v = 0;
  667|  67.1M|        UWORD32 coeff_type = 0, coeff_type_v = 0;
  668|  67.1M|        WORD16 i2_coeff_value, i2_coeff_value_v;
  669|  67.1M|        WORD32 trans_size = 0;
  670|  67.1M|        TRANSFORM_TYPE e_trans_type;
  671|  67.1M|        WORD32 log2_y_trans_size_minus_2, log2_uv_trans_size_minus_2;
  672|  67.1M|        WORD32 log2_trans_size;
  673|  67.1M|        WORD32 chroma_qp_idx;
  674|  67.1M|        WORD16 *pi2_src = NULL, *pi2_src_v = NULL;
  675|  67.1M|        UWORD8 *pu1_pred = NULL, *pu1_pred_v = NULL;
  676|  67.1M|        UWORD8 *pu1_dst = NULL, *pu1_dst_v = NULL;
  677|  67.1M|        WORD16 *pi2_dequant_matrix = NULL, *pi2_dequant_matrix_v = NULL;
  678|  67.1M|        WORD32 tu_x, tu_y;
  679|  67.1M|        WORD32 tu_y_offset, tu_uv_offset;
  680|  67.1M|        WORD8 i1_chroma_pic_qp_offset, i1_chroma_slice_qp_offset;
  681|  67.1M|        UWORD8 u1_cbf = 0, u1_cbf_v = 0, u1_luma_pred_mode, u1_chroma_pred_mode;
  682|  67.1M|        WORD32 offset;
  683|  67.1M|        WORD32 pcm_flag;
  684|  67.1M|        WORD32  chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
  685|       |        /* If 420SP_VU is chroma format, pred and dst pointer   */
  686|       |        /* will be added +1 to point to U                       */
  687|  67.1M|        WORD32 chroma_yuv420sp_vu_u_offset = 1 * chroma_yuv420sp_vu;
  688|       |        /* If 420SP_VU is chroma format, pred and dst pointer   */
  689|       |        /* will be added U offset of +1 and subtracted 2        */
  690|       |        /* to point to V                                        */
  691|  67.1M|        WORD32 chroma_yuv420sp_vu_v_offset = -2 * chroma_yuv420sp_vu;
  692|       |
  693|  67.1M|        tu_x = ps_tu->b4_pos_x * 4; /* Converting minTU unit to pixel unit */
  694|  67.1M|        tu_y = ps_tu->b4_pos_y * 4; /* Converting minTU unit to pixel unit */
  695|  67.1M|        {
  696|  67.1M|            WORD32 tu_abs_x = (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size) + (tu_x);
  697|  67.1M|            WORD32 tu_abs_y = (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size) + (tu_y);
  698|       |
  699|  67.1M|            WORD32 numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
  700|       |
  701|  67.1M|            pu1_pic_intra_flag = ps_proc->pu1_pic_intra_flag;
  702|  67.1M|            pu1_pic_intra_flag += (tu_abs_y >> 3) * numbytes_row;
  703|  67.1M|            pu1_pic_intra_flag += (tu_abs_x >> 6);
  704|       |
  705|  67.1M|            intra_flag = *pu1_pic_intra_flag;
  706|  67.1M|            intra_flag &= (1 << ((tu_abs_x >> 3) % 8));
  707|  67.1M|        }
  708|       |
  709|  67.1M|        u1_luma_pred_mode = ps_tu->b6_luma_intra_mode;
  710|  67.1M|        u1_chroma_pred_mode = ps_tu->b3_chroma_intra_mode_idx;
  711|       |
  712|  67.1M|        if(u1_chroma_pred_mode != 7)
  ------------------
  |  Branch (712:12): [True: 3.50M, False: 63.6M]
  ------------------
  713|  3.50M|            num_comp = 2; /* Y and UV */
  714|  63.6M|        else
  715|  63.6M|            num_comp = 1; /* Y */
  716|       |
  717|       |
  718|  67.1M|        pcm_flag = 0;
  719|       |
  720|  67.1M|        if((intra_flag) && (u1_luma_pred_mode == INTRA_PRED_NONE))
  ------------------
  |  |  511|  3.96M|#define INTRA_PRED_NONE  63
  ------------------
  |  Branch (720:12): [True: 3.96M, False: 63.1M]
  |  Branch (720:28): [True: 32, False: 3.96M]
  ------------------
  721|     32|        {
  722|     32|            UWORD8 *pu1_buf;
  723|     32|            UWORD8 *pu1_y_dst = pu1_y_dst_ctb;
  724|     32|            UWORD8 *pu1_uv_dst = pu1_uv_dst_ctb;
  725|     32|            WORD32 i, j;
  726|     32|            tu_sblk_coeff_data_t *ps_tu_sblk_coeff_data;
  727|     32|            WORD32 cb_size = 1 << (ps_tu->b3_size + 2);
  728|       |
  729|       |            /* trans_size is used to update availability after reconstruction */
  730|     32|            trans_size = cb_size;
  731|       |
  732|     32|            pcm_flag = 1;
  733|       |
  734|     32|            tu_y_offset = tu_x + tu_y * pic_strd;
  735|     32|            pu1_y_dst += tu_x + tu_y * pic_strd;
  736|     32|            pu1_uv_dst += tu_x + (tu_y >> 1) * pic_strd;
  737|       |
  738|       |            /* First byte points to number of coded blocks */
  739|     32|            pu1_tu_coeff_data++;
  740|       |
  741|       |            /* Next byte points to scan type */
  742|     32|            pu1_tu_coeff_data++;
  743|       |
  744|     32|            ps_tu_sblk_coeff_data = (tu_sblk_coeff_data_t *)pu1_tu_coeff_data;
  745|       |
  746|     32|            pu1_buf = (UWORD8 *)&ps_tu_sblk_coeff_data->ai2_level[0];
  747|     32|            {
  748|       |
  749|    288|                for(i = 0; i < cb_size; i++)
  ------------------
  |  Branch (749:28): [True: 256, False: 32]
  ------------------
  750|    256|                {
  751|       |                    //pu1_y_dst[i * pic_strd + j] = *pu1_buf++;
  752|    256|                    memcpy(&pu1_y_dst[i * pic_strd], pu1_buf, cb_size);
  753|    256|                    pu1_buf += cb_size;
  754|    256|                }
  755|       |
  756|     32|                pu1_uv_dst = pu1_uv_dst + chroma_yuv420sp_vu_u_offset;
  757|       |
  758|       |                /* U */
  759|    160|                for(i = 0; i < cb_size / 2; i++)
  ------------------
  |  Branch (759:28): [True: 128, False: 32]
  ------------------
  760|    128|                {
  761|    640|                    for(j = 0; j < cb_size / 2; j++)
  ------------------
  |  Branch (761:32): [True: 512, False: 128]
  ------------------
  762|    512|                    {
  763|    512|                        pu1_uv_dst[i * pic_strd + 2 * j] = *pu1_buf++;
  764|    512|                    }
  765|    128|                }
  766|       |
  767|     32|                pu1_uv_dst = pu1_uv_dst + 1 + chroma_yuv420sp_vu_v_offset;
  768|       |
  769|       |                /* V */
  770|    160|                for(i = 0; i < cb_size / 2; i++)
  ------------------
  |  Branch (770:28): [True: 128, False: 32]
  ------------------
  771|    128|                {
  772|    640|                    for(j = 0; j < cb_size / 2; j++)
  ------------------
  |  Branch (772:32): [True: 512, False: 128]
  ------------------
  773|    512|                    {
  774|    512|                        pu1_uv_dst[i * pic_strd + 2 * j] = *pu1_buf++;
  775|    512|                    }
  776|    128|                }
  777|     32|            }
  778|       |
  779|     32|            pu1_tu_coeff_data = pu1_buf;
  780|       |
  781|     32|        }
  782|       |
  783|       |
  784|       |
  785|       |
  786|       |
  787|   137M|        for(c_idx = 0; c_idx < num_comp; c_idx++)
  ------------------
  |  Branch (787:24): [True: 70.5M, False: 67.1M]
  ------------------
  788|  70.5M|        {
  789|  70.5M|            if(0 == pcm_flag)
  ------------------
  |  Branch (789:16): [True: 70.5M, False: 18.4E]
  ------------------
  790|  70.5M|            {
  791|       |                /* Initializing variables */
  792|  70.5M|                pred_strd = pic_strd;
  793|  70.5M|                dst_strd = pic_strd;
  794|       |
  795|  70.5M|                if(c_idx == 0) /* Y */
  ------------------
  |  Branch (795:20): [True: 67.1M, False: 3.37M]
  ------------------
  796|  67.1M|                {
  797|  67.1M|                    log2_y_trans_size_minus_2 = ps_tu->b3_size;
  798|  67.1M|                    trans_size = 1 << (log2_y_trans_size_minus_2 + 2);
  799|  67.1M|                    log2_trans_size = log2_y_trans_size_minus_2 + 2;
  800|       |
  801|  67.1M|                    tu_y_offset = tu_x + tu_y * pic_strd;
  802|       |
  803|  67.1M|                    pi2_src = pi2_tu_coeff;
  804|  67.1M|                    pu1_pred = pu1_y_dst_ctb + tu_y_offset;
  805|  67.1M|                    pu1_dst = pu1_y_dst_ctb + tu_y_offset;
  806|       |
  807|       |                    /* Calculating scaling matrix offset */
  808|  67.1M|                    offset = log2_y_trans_size_minus_2 * 6
  809|  67.1M|                                    + (!intra_flag)
  810|  67.1M|                                    * ((log2_y_trans_size_minus_2
  ------------------
  |  Branch (810:40): [True: 895k, False: 66.2M]
  ------------------
  811|  67.1M|                                                    == 3) ? 1 : 3)
  812|  67.1M|                                    + c_idx;
  813|  67.1M|                    pi2_dequant_matrix = pi2_scaling_mat
  814|  67.1M|                                    + scaling_mat_offset[offset];
  815|       |
  816|  67.1M|                    src_strd = trans_size;
  817|       |
  818|       |                    /* 4x4 transform Luma in INTRA mode is DST */
  819|  67.1M|                    if(log2_y_trans_size_minus_2 == 0 && intra_flag)
  ------------------
  |  Branch (819:24): [True: 826k, False: 66.3M]
  |  Branch (819:58): [True: 708k, False: 117k]
  ------------------
  820|   709k|                    {
  821|   709k|                        func_idx = log2_y_trans_size_minus_2;
  822|   709k|                        e_trans_type = DST_4x4;
  823|   709k|                    }
  824|  66.4M|                    else
  825|  66.4M|                    {
  826|  66.4M|                        func_idx = log2_y_trans_size_minus_2 + 1;
  827|  66.4M|                        e_trans_type = (TRANSFORM_TYPE)(log2_y_trans_size_minus_2 + 1);
  828|  66.4M|                    }
  829|       |
  830|  67.1M|                    qp_div = ps_tu->b7_qp / 6;
  831|  67.1M|                    qp_rem = ps_tu->b7_qp % 6;
  832|       |
  833|  67.1M|                    u1_cbf = ps_tu->b1_y_cbf;
  834|       |
  835|  67.1M|                    transform_skip_flag = pu1_tu_coeff_data[1] & 1;
  836|       |                    /* Unpacking coeffs */
  837|  67.1M|                    if(1 == u1_cbf)
  ------------------
  |  Branch (837:24): [True: 2.53M, False: 64.6M]
  ------------------
  838|  2.53M|                    {
  839|  2.53M|                        pu1_tu_coeff_data = ihevcd_unpack_coeffs(
  840|  2.53M|                                        pi2_src, log2_y_trans_size_minus_2 + 2,
  841|  2.53M|                                        pu1_tu_coeff_data, pi2_dequant_matrix,
  842|  2.53M|                                        qp_rem, qp_div, e_trans_type,
  843|  2.53M|                                        ps_tu->b1_transquant_bypass, &zero_cols,
  844|  2.53M|                                        &zero_rows, &coeff_type,
  845|  2.53M|                                        &i2_coeff_value);
  846|  2.53M|                    }
  847|  67.1M|                }
  848|  3.37M|                else /* UV interleaved */
  849|  3.37M|                {
  850|       |                    /* Chroma :If Transform size is 4x4, keep 4x4 else do transform on (trans_size/2 x trans_size/2) */
  851|  3.37M|                    if(ps_tu->b3_size == 0)
  ------------------
  |  Branch (851:24): [True: 208k, False: 3.16M]
  ------------------
  852|   208k|                    {
  853|       |                        /* Chroma 4x4 is present with 4th luma 4x4 block. For this case chroma postion has to be (luma pos x- 4,luma pos y- 4) */
  854|   208k|                        log2_uv_trans_size_minus_2 = ps_tu->b3_size;
  855|   208k|                        tu_uv_offset = (tu_x - 4) + ((tu_y - 4) / 2) * pic_strd;
  856|   208k|                    }
  857|  3.16M|                    else
  858|  3.16M|                    {
  859|  3.16M|                        log2_uv_trans_size_minus_2 = ps_tu->b3_size - 1;
  860|  3.16M|                        tu_uv_offset = tu_x + (tu_y >> 1) * pic_strd;
  861|  3.16M|                    }
  862|  3.37M|                    trans_size = 1 << (log2_uv_trans_size_minus_2 + 2);
  863|  3.37M|                    log2_trans_size = log2_uv_trans_size_minus_2 + 2;
  864|       |
  865|  3.37M|                    pi2_src = pi2_tu_coeff;
  866|  3.37M|                    pi2_src_v = pi2_tu_coeff + trans_size * trans_size;
  867|  3.37M|                    pu1_pred = pu1_uv_dst_ctb + tu_uv_offset + chroma_yuv420sp_vu_u_offset; /* Pointing to start byte of U*/
  868|  3.37M|                    pu1_pred_v = pu1_pred + 1 + chroma_yuv420sp_vu_v_offset; /* Pointing to start byte of V*/
  869|  3.37M|                    pu1_dst = pu1_uv_dst_ctb + tu_uv_offset + chroma_yuv420sp_vu_u_offset; /* Pointing to start byte of U*/
  870|  3.37M|                    pu1_dst_v = pu1_dst + 1 + chroma_yuv420sp_vu_v_offset; /* Pointing to start byte of V*/
  871|       |
  872|       |                    /*TODO: Add support for choosing different tables for U and V,
  873|       |                     * change this to a single array to handle flat/default/custom, intra/inter, luma/chroma and various sizes
  874|       |                     */
  875|       |                    /* Calculating scaling matrix offset */
  876|       |                    /* ((log2_uv_trans_size_minus_2 == 3) ? 1:3) condition check is not needed, since
  877|       |                     * max uv trans size is 16x16
  878|       |                     */
  879|  3.37M|                    offset = log2_uv_trans_size_minus_2 * 6
  880|  3.37M|                                    + (!intra_flag) * 3 + c_idx;
  881|  3.37M|                    pi2_dequant_matrix = pi2_scaling_mat
  882|  3.37M|                                    + scaling_mat_offset[offset];
  883|  3.37M|                    pi2_dequant_matrix_v = pi2_scaling_mat
  884|  3.37M|                                    + scaling_mat_offset[offset + 1];
  885|       |
  886|  3.37M|                    src_strd = trans_size;
  887|       |
  888|  3.37M|                    func_idx = 1 + 4 + log2_uv_trans_size_minus_2; /* DST func + Y funcs + cur func index*/
  889|       |
  890|       |                    /* Handle error cases where 64x64 TU is signalled which results in 32x32 chroma.
  891|       |                     * By limiting func_idx to 7, max of 16x16 chroma is called */
  892|  3.37M|                    func_idx = MIN(func_idx, 7);
  ------------------
  |  |   43|  3.37M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 2.62M, False: 753k]
  |  |  ------------------
  ------------------
  893|       |
  894|  3.37M|                    e_trans_type = (TRANSFORM_TYPE)(log2_uv_trans_size_minus_2 + 1);
  895|       |                    /* QP for U */
  896|  3.37M|                    i1_chroma_pic_qp_offset = ps_pps->i1_pic_cb_qp_offset;
  897|  3.37M|                    i1_chroma_slice_qp_offset = ps_slice_hdr->i1_slice_cb_qp_offset;
  898|  3.37M|                    u1_cbf = ps_tu->b1_cb_cbf;
  899|       |
  900|  3.37M|                    chroma_qp_idx = ps_tu->b7_qp + i1_chroma_pic_qp_offset
  901|  3.37M|                                    + i1_chroma_slice_qp_offset;
  902|  3.37M|                    chroma_qp_idx = CLIP3(chroma_qp_idx, 0, 57);
  ------------------
  |  |   40|  3.37M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 323, False: 3.37M]
  |  |  |  Branch (40:53): [True: 1.57k, False: 3.37M]
  |  |  ------------------
  ------------------
  903|  3.37M|                    qp_div = gai2_ihevcd_chroma_qp[chroma_qp_idx] / 6;
  904|  3.37M|                    qp_rem = gai2_ihevcd_chroma_qp[chroma_qp_idx] % 6;
  905|       |
  906|       |                    /* QP for V */
  907|  3.37M|                    i1_chroma_pic_qp_offset = ps_pps->i1_pic_cr_qp_offset;
  908|  3.37M|                    i1_chroma_slice_qp_offset = ps_slice_hdr->i1_slice_cr_qp_offset;
  909|  3.37M|                    u1_cbf_v = ps_tu->b1_cr_cbf;
  910|       |
  911|  3.37M|                    chroma_qp_idx = ps_tu->b7_qp + i1_chroma_pic_qp_offset
  912|  3.37M|                                    + i1_chroma_slice_qp_offset;
  913|  3.37M|                    chroma_qp_idx = CLIP3(chroma_qp_idx, 0, 57);
  ------------------
  |  |   40|  3.37M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 24, False: 3.37M]
  |  |  |  Branch (40:53): [True: 3.86k, False: 3.37M]
  |  |  ------------------
  ------------------
  914|  3.37M|                    qp_div_v = gai2_ihevcd_chroma_qp[chroma_qp_idx] / 6;
  915|  3.37M|                    qp_rem_v = gai2_ihevcd_chroma_qp[chroma_qp_idx] % 6;
  916|       |
  917|       |                    /* Unpacking coeffs */
  918|  3.37M|                    transform_skip_flag = pu1_tu_coeff_data[1] & 1;
  919|  3.37M|                    if(1 == u1_cbf)
  ------------------
  |  Branch (919:24): [True: 576k, False: 2.80M]
  ------------------
  920|   576k|                    {
  921|   576k|                        pu1_tu_coeff_data = ihevcd_unpack_coeffs(
  922|   576k|                                        pi2_src, log2_uv_trans_size_minus_2 + 2,
  923|   576k|                                        pu1_tu_coeff_data, pi2_dequant_matrix,
  924|   576k|                                        qp_rem, qp_div, e_trans_type,
  925|   576k|                                        ps_tu->b1_transquant_bypass, &zero_cols,
  926|   576k|                                        &zero_rows, &coeff_type,
  927|   576k|                                        &i2_coeff_value);
  928|   576k|                    }
  929|       |
  930|  3.37M|                    transform_skip_flag_v = pu1_tu_coeff_data[1] & 1;
  931|  3.37M|                    if(1 == u1_cbf_v)
  ------------------
  |  Branch (931:24): [True: 571k, False: 2.80M]
  ------------------
  932|   571k|                    {
  933|   571k|                        pu1_tu_coeff_data = ihevcd_unpack_coeffs(
  934|   571k|                                        pi2_src_v, log2_uv_trans_size_minus_2 + 2,
  935|   571k|                                        pu1_tu_coeff_data, pi2_dequant_matrix_v,
  936|   571k|                                        qp_rem_v, qp_div_v, e_trans_type,
  937|   571k|                                        ps_tu->b1_transquant_bypass, &zero_cols_v,
  938|   571k|                                        &zero_rows_v, &coeff_type_v, &i2_coeff_value_v);
  939|   571k|                    }
  940|  3.37M|                }
  941|       |                /***************************************************************/
  942|       |                /******************  Intra Prediction **************************/
  943|       |                /***************************************************************/
  944|  70.5M|                if(intra_flag) /* Intra */
  ------------------
  |  Branch (944:20): [True: 7.25M, False: 63.2M]
  ------------------
  945|  7.25M|                {
  946|       |                    /* While (MAX_TU_SIZE * 2 * 2) + 1 is the actaul size needed,
  947|       |                       au1_ref_sub_out size is kept as multiple of 8,
  948|       |                       so that SIMD functions can load 64 bits. Also some SIMD
  949|       |                       modules read few bytes before the start of the array, so
  950|       |                       allocate 16 extra bytes at the start */
  951|  7.25M|                    UWORD8 au1_ref_sub_out[16 + (MAX_TU_SIZE * 2 * 2) + 8] = {0};
  952|  7.25M|                    UWORD8 *pu1_ref_sub_out = &au1_ref_sub_out[16];
  953|  7.25M|                    UWORD8 *pu1_top_left, *pu1_top, *pu1_left;
  954|  7.25M|                    WORD32 luma_pred_func_idx, chroma_pred_func_idx;
  955|       |
  956|       |                    /* Get the neighbour availability flags */
  957|       |                    /* Done for only Y */
  958|  7.25M|                    if(c_idx == 0)
  ------------------
  |  Branch (958:24): [True: 3.95M, False: 3.30M]
  ------------------
  959|  3.95M|                    {
  960|       |                        /* Get neighbor availability for Y only */
  961|  3.95M|                        luma_nbr_flags = ihevcd_get_intra_nbr_flag(ps_proc,
  962|  3.95M|                                                                   ps_tu,
  963|  3.95M|                                                                   au4_intra_nbr_avail,
  964|  3.95M|                                                                   ps_sps->i2_pic_width_in_luma_samples,
  965|  3.95M|                                                                   ps_pps->i1_constrained_intra_pred_flag,
  966|  3.95M|                                                                   trans_size,
  967|  3.95M|                                                                   ctb_size);
  968|       |
  969|  3.95M|                        if(trans_size == 4)
  ------------------
  |  Branch (969:28): [True: 709k, False: 3.24M]
  ------------------
  970|   709k|                            luma_nbr_flags_4x4[(ps_tu->b4_pos_x % 2) + (ps_tu->b4_pos_y % 2) * 2] = luma_nbr_flags;
  971|       |
  972|  3.95M|                        if((ps_tu->b4_pos_x % 2 == 0) && (ps_tu->b4_pos_y % 2 == 0))
  ------------------
  |  Branch (972:28): [True: 3.61M, False: 340k]
  |  Branch (972:58): [True: 3.43M, False: 176k]
  ------------------
  973|  3.43M|                        {
  974|  3.43M|                            chroma_nbr_flags = luma_nbr_flags;
  975|  3.43M|                        }
  976|       |
  977|       |                        /* Initializing nbr pointers */
  978|  3.95M|                        pu1_top = pu1_pred - pic_strd;
  979|  3.95M|                        pu1_left = pu1_pred - 1;
  980|  3.95M|                        pu1_top_left = pu1_pred - pic_strd - 1;
  981|       |
  982|       |                        /* call reference array substitution */
  983|  3.95M|                        if(luma_nbr_flags == 0x1ffff)
  ------------------
  |  Branch (983:28): [True: 407k, False: 3.54M]
  ------------------
  984|   407k|                            ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_subst_all_avlble_fptr(
  985|   407k|                                            pu1_top_left,
  986|   407k|                                            pu1_top, pu1_left, pred_strd, trans_size, luma_nbr_flags, pu1_ref_sub_out, 1);
  987|  3.54M|                        else
  988|  3.54M|                            ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_substitution_fptr(
  989|  3.54M|                                            pu1_top_left,
  990|  3.54M|                                            pu1_top, pu1_left, pred_strd, trans_size, luma_nbr_flags, pu1_ref_sub_out, 1);
  991|       |
  992|       |                        /* call reference filtering */
  993|  3.95M|                        ps_codec->s_func_selector.ihevc_intra_pred_ref_filtering_fptr(
  994|  3.95M|                                        pu1_ref_sub_out, trans_size,
  995|  3.95M|                                        pu1_ref_sub_out,
  996|  3.95M|                                        u1_luma_pred_mode, ps_sps->i1_strong_intra_smoothing_enable_flag);
  997|       |
  998|       |                        /* use the look up to get the function idx */
  999|  3.95M|                        luma_pred_func_idx = g_i4_ip_funcs[u1_luma_pred_mode];
 1000|       |
 1001|       |                        /* call the intra prediction function */
 1002|  3.95M|                        ps_codec->apf_intra_pred_luma[luma_pred_func_idx](pu1_ref_sub_out, 1, pu1_pred, pred_strd, trans_size, u1_luma_pred_mode);
 1003|  3.95M|                    }
 1004|  3.30M|                    else
 1005|  3.30M|                    {
 1006|       |                        /* In case of yuv420sp_vu, prediction happens as usual.         */
 1007|       |                        /* So point the pu1_pred pointer to original prediction pointer */
 1008|  3.30M|                        UWORD8 *pu1_pred_orig = pu1_pred - chroma_yuv420sp_vu_u_offset;
 1009|       |
 1010|       |                        /*    Top-Left | Top-Right | Top | Left | Bottom-Left
 1011|       |                         *      1         4         4     4         4
 1012|       |                         *
 1013|       |                         * Generating chroma_nbr_flags depending upon the transform size */
 1014|  3.30M|                        if(ps_tu->b3_size == 0)
  ------------------
  |  Branch (1014:28): [True: 178k, False: 3.12M]
  ------------------
 1015|   178k|                        {
 1016|       |                            /* Take TL,T,L flags of First luma 4x4 block */
 1017|   178k|                            chroma_nbr_flags = (luma_nbr_flags_4x4[0] & 0x10FF0);
 1018|       |                            /* Take TR flags of Second luma 4x4 block */
 1019|   178k|                            chroma_nbr_flags |= (luma_nbr_flags_4x4[1] & 0x0F000);
 1020|       |                            /* Take BL flags of Third luma 4x4 block */
 1021|   178k|                            chroma_nbr_flags |= (luma_nbr_flags_4x4[2] & 0x0000F);
 1022|   178k|                        }
 1023|       |
 1024|       |                        /* Initializing nbr pointers */
 1025|  3.30M|                        pu1_top = pu1_pred_orig - pic_strd;
 1026|  3.30M|                        pu1_left = pu1_pred_orig - 2;
 1027|  3.30M|                        pu1_top_left = pu1_pred_orig - pic_strd - 2;
 1028|       |
 1029|       |                        /* Chroma pred  mode derivation from luma pred mode */
 1030|  3.30M|                        {
 1031|  3.30M|                            tu_t *ps_tu_tmp = ps_tu;
 1032|  7.50M|                            while(!ps_tu_tmp->b1_first_tu_in_cu)
  ------------------
  |  Branch (1032:35): [True: 4.19M, False: 3.30M]
  ------------------
 1033|  4.19M|                            {
 1034|  4.19M|                                ps_tu_tmp--;
 1035|  4.19M|                            }
 1036|  3.30M|                            u1_luma_pred_mode_first_tu = ps_tu_tmp->b6_luma_intra_mode;
 1037|  3.30M|                        }
 1038|  3.30M|                        if(4 == u1_chroma_pred_mode)
  ------------------
  |  Branch (1038:28): [True: 2.93M, False: 369k]
  ------------------
 1039|  2.93M|                            u1_chroma_pred_mode = u1_luma_pred_mode_first_tu;
 1040|   369k|                        else
 1041|   369k|                        {
 1042|   369k|                            u1_chroma_pred_mode = gau1_intra_pred_chroma_modes[u1_chroma_pred_mode];
 1043|       |
 1044|   369k|                            if(u1_chroma_pred_mode ==
  ------------------
  |  Branch (1044:32): [True: 93.5k, False: 275k]
  ------------------
 1045|   369k|                                                            u1_luma_pred_mode_first_tu)
 1046|  93.5k|                            {
 1047|  93.5k|                                u1_chroma_pred_mode = INTRA_ANGULAR(34);
  ------------------
  |  |  507|  93.5k|#define INTRA_ANGULAR(x) (x)
  ------------------
 1048|  93.5k|                            }
 1049|   369k|                        }
 1050|       |
 1051|       |                        /* call the chroma reference array substitution */
 1052|  3.30M|                        ps_codec->s_func_selector.ihevc_intra_pred_chroma_ref_substitution_fptr(
 1053|  3.30M|                                        pu1_top_left,
 1054|  3.30M|                                        pu1_top, pu1_left, pic_strd, trans_size, chroma_nbr_flags, pu1_ref_sub_out, 1);
 1055|       |
 1056|       |                        /* use the look up to get the function idx */
 1057|  3.30M|                        chroma_pred_func_idx =
 1058|  3.30M|                                        g_i4_ip_funcs[u1_chroma_pred_mode];
 1059|       |
 1060|       |                        /* call the intra prediction function */
 1061|  3.30M|                        ps_codec->apf_intra_pred_chroma[chroma_pred_func_idx](pu1_ref_sub_out, 1, pu1_pred_orig, pred_strd, trans_size, u1_chroma_pred_mode);
 1062|  3.30M|                    }
 1063|  7.25M|                }
 1064|       |
 1065|       |                /* Updating number of transform types */
 1066|  70.5M|                STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx);
  ------------------
  |  |  138|  70.5M|#define STATS_UPDATE_ALL_TRANS(e_trans_type, c_idx) ;
  ------------------
 1067|       |
 1068|       |                /* IQ, IT and Recon for Y if c_idx == 0, and U if c_idx !=0 */
 1069|  70.5M|                if(1 == u1_cbf)
  ------------------
  |  Branch (1069:20): [True: 3.10M, False: 67.4M]
  ------------------
 1070|  3.10M|                {
 1071|  3.10M|                    if(ps_tu->b1_transquant_bypass || transform_skip_flag)
  ------------------
  |  Branch (1071:24): [True: 66.1k, False: 3.04M]
  |  Branch (1071:55): [True: 176k, False: 2.86M]
  ------------------
 1072|   244k|                    {
 1073|       |                        /* Recon */
 1074|   244k|                        ps_codec->apf_recon[func_idx](pi2_src, pu1_pred, pu1_dst,
 1075|   244k|                                                      src_strd, pred_strd, dst_strd,
 1076|   244k|                                                      zero_cols);
 1077|   244k|                    }
 1078|  2.86M|                    else
 1079|  2.86M|                    {
 1080|       |
 1081|       |                        /* Updating coded number of transform types(excluding trans skip and trans quant skip) */
 1082|  2.86M|                        STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, 0);
  ------------------
  |  |  139|  2.86M|#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ;
  ------------------
 1083|       |
 1084|       |                        /* iQuant , iTrans and Recon */
 1085|  2.86M|                        if((0 == coeff_type))
  ------------------
  |  Branch (1085:28): [True: 1.99M, False: 872k]
  ------------------
 1086|  1.99M|                        {
 1087|  1.99M|                            ps_codec->apf_itrans_recon[func_idx](pi2_src, pi2_tmp,
 1088|  1.99M|                                                                 pu1_pred, pu1_dst,
 1089|  1.99M|                                                                 src_strd, pred_strd,
 1090|  1.99M|                                                                 dst_strd, zero_cols,
 1091|  1.99M|                                                                 zero_rows);
 1092|  1.99M|                        }
 1093|   872k|                        else /* DC only */
 1094|   872k|                        {
 1095|   872k|                            STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, 1);
  ------------------
  |  |  139|   872k|#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ;
  ------------------
 1096|   872k|                            ps_codec->apf_itrans_recon_dc[c_idx](pu1_pred, pu1_dst,
 1097|   872k|                                                                 pred_strd, dst_strd,
 1098|   872k|                                                                 log2_trans_size,
 1099|   872k|                                                                 i2_coeff_value);
 1100|   872k|                        }
 1101|  2.86M|                    }
 1102|  3.10M|                }
 1103|       |                /* IQ, IT and Recon for V */
 1104|  70.5M|                if(c_idx != 0)
  ------------------
  |  Branch (1104:20): [True: 3.50M, False: 67.0M]
  ------------------
 1105|  3.50M|                {
 1106|  3.50M|                    if(1 == u1_cbf_v)
  ------------------
  |  Branch (1106:24): [True: 573k, False: 2.92M]
  ------------------
 1107|   573k|                    {
 1108|   573k|                        if(ps_tu->b1_transquant_bypass || transform_skip_flag_v)
  ------------------
  |  Branch (1108:28): [True: 11.4k, False: 562k]
  |  Branch (1108:59): [True: 72.1k, False: 490k]
  ------------------
 1109|  83.8k|                        {
 1110|       |                            /* Recon */
 1111|  83.8k|                            ps_codec->apf_recon[func_idx](pi2_src_v, pu1_pred_v,
 1112|  83.8k|                                                          pu1_dst_v, src_strd,
 1113|  83.8k|                                                          pred_strd, dst_strd,
 1114|  83.8k|                                                          zero_cols_v);
 1115|  83.8k|                        }
 1116|   489k|                        else
 1117|   489k|                        {
 1118|       |                            /* Updating number of transform types */
 1119|   489k|                            STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, 0);
  ------------------
  |  |  139|   489k|#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ;
  ------------------
 1120|       |
 1121|       |                            /* iQuant , iTrans and Recon */
 1122|   489k|                            if((0 == coeff_type_v))
  ------------------
  |  Branch (1122:32): [True: 222k, False: 267k]
  ------------------
 1123|   222k|                            {
 1124|   222k|                                ps_codec->apf_itrans_recon[func_idx](pi2_src_v,
 1125|   222k|                                                                     pi2_tmp,
 1126|   222k|                                                                     pu1_pred_v,
 1127|   222k|                                                                     pu1_dst_v,
 1128|   222k|                                                                     src_strd,
 1129|   222k|                                                                     pred_strd,
 1130|   222k|                                                                     dst_strd,
 1131|   222k|                                                                     zero_cols_v,
 1132|   222k|                                                                     zero_rows_v);
 1133|   222k|                            }
 1134|   267k|                            else  /* DC only */
 1135|   267k|                            {
 1136|   267k|                                STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, 1);
  ------------------
  |  |  139|   267k|#define STATS_UPDATE_CODED_TRANS(e_trans_type, c_idx, update_type) ;
  ------------------
 1137|   267k|                                ps_codec->apf_itrans_recon_dc[c_idx](pu1_pred_v, pu1_dst_v,
 1138|   267k|                                                                     pred_strd, dst_strd,
 1139|   267k|                                                                     log2_trans_size,
 1140|   267k|                                                                     i2_coeff_value_v);
 1141|   267k|                            }
 1142|   489k|                        }
 1143|   573k|                    }
 1144|  3.50M|                }
 1145|  70.5M|            }
 1146|       |
 1147|       |            /* Neighbor availability inside CTB */
 1148|       |            /* 1bit per 4x4. Indicates whether that 4x4 block has been reconstructed(avialable) */
 1149|       |            /* Used for neighbor availability in intra pred */
 1150|  70.5M|            if(c_idx == 0)
  ------------------
  |  Branch (1150:16): [True: 67.1M, False: 3.39M]
  ------------------
 1151|  67.1M|            {
 1152|  67.1M|                WORD32 i;
 1153|  67.1M|                WORD32 trans_in_min_tu;
 1154|  67.1M|                UWORD32 cur_tu_in_bits;
 1155|  67.1M|                UWORD32 cur_tu_avail_flag;
 1156|       |
 1157|  67.1M|                trans_in_min_tu = trans_size / MIN_TU_SIZE;
  ------------------
  |  |  348|  67.1M|#define MIN_TU_SIZE         4
  ------------------
 1158|  67.1M|                cur_tu_in_bits = (1 << trans_in_min_tu) - 1;
 1159|  67.1M|                cur_tu_in_bits = cur_tu_in_bits << (32 - trans_in_min_tu);
 1160|       |
 1161|  67.1M|                cur_tu_avail_flag = cur_tu_in_bits >> (ps_tu->b4_pos_x + 1);
 1162|       |
 1163|   209M|                for(i = 0; i < trans_in_min_tu; i++)
  ------------------
  |  Branch (1163:28): [True: 141M, False: 67.1M]
  ------------------
 1164|   141M|                    au4_intra_nbr_avail[1 + ps_tu->b4_pos_y + i] |=
 1165|   141M|                                    cur_tu_avail_flag;
 1166|  67.1M|            }
 1167|  70.5M|        }
 1168|  67.1M|    }
 1169|  6.23M|    ps_proc->pv_tu_coeff_data = pu1_tu_coeff_data;
 1170|       |
 1171|  6.23M|    return ps_proc->i4_ctb_tu_cnt;
 1172|  6.23M|}

ihevcd_itrans_recon_dc_luma:
   92|   540k|{
   93|   540k|    WORD32 row, col;
   94|   540k|    WORD32 add, shift;
   95|   540k|    WORD32 dc_value, quant_out;
   96|   540k|    WORD32 trans_size;
   97|       |
   98|   540k|    trans_size = (1 << log2_trans_size);
   99|       |
  100|   540k|    quant_out = i2_coeff_value;
  101|       |
  102|   540k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   540k|#define IT_SHIFT_STAGE_1 7
  ------------------
  103|   540k|    add = 1 << (shift - 1);
  104|   540k|    dc_value = CLIP_S16((quant_out * 64 + add) >> shift);
  ------------------
  |  |   53|   540k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   540k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 540k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 540k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  105|   540k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   540k|#define IT_SHIFT_STAGE_2 12
  ------------------
  106|   540k|    add = 1 << (shift - 1);
  107|   540k|    dc_value = CLIP_S16((dc_value * 64 + add) >> shift);
  ------------------
  |  |   53|   540k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   540k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 540k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 540k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|       |
  109|  8.49M|    for(row = 0; row < trans_size; row++)
  ------------------
  |  Branch (109:18): [True: 7.95M, False: 540k]
  ------------------
  110|   148M|        for(col = 0; col < trans_size; col++)
  ------------------
  |  Branch (110:22): [True: 140M, False: 7.95M]
  ------------------
  111|   140M|            pu1_dst[row * dst_strd + col] = CLIP_U8((pu1_pred[row * pred_strd + col] + dc_value));
  ------------------
  |  |   40|   140M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|   140M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 56.9M, False: 83.5M]
  |  |  |  |  |  Branch (40:53): [True: 2.32M, False: 81.2M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|       |
  113|   540k|}
ihevcd_itrans_recon_dc_chroma:
  122|   485k|{
  123|   485k|    WORD32 row, col;
  124|   485k|    WORD32 add, shift;
  125|   485k|    WORD32 dc_value, quant_out;
  126|   485k|    WORD32 trans_size;
  127|       |
  128|       |
  129|   485k|    trans_size = (1 << log2_trans_size);
  130|       |
  131|   485k|    quant_out = i2_coeff_value;
  132|       |
  133|   485k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|   485k|#define IT_SHIFT_STAGE_1 7
  ------------------
  134|   485k|    add = 1 << (shift - 1);
  135|   485k|    dc_value = CLIP_S16((quant_out * 64 + add) >> shift);
  ------------------
  |  |   53|   485k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   485k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 485k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 485k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|   485k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|   485k|#define IT_SHIFT_STAGE_2 12
  ------------------
  137|   485k|    add = 1 << (shift - 1);
  138|   485k|    dc_value = CLIP_S16((dc_value * 64 + add) >> shift);
  ------------------
  |  |   53|   485k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   485k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 485k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 485k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|       |
  140|  4.61M|    for(row = 0; row < trans_size; row++)
  ------------------
  |  Branch (140:18): [True: 4.12M, False: 485k]
  ------------------
  141|  45.0M|        for(col = 0; col < trans_size; col++)
  ------------------
  |  Branch (141:22): [True: 40.9M, False: 4.12M]
  ------------------
  142|  40.9M|            pu1_dst[row * dst_strd + (col << 1)] = CLIP_U8((pu1_pred[row * pred_strd + (col << 1)] + dc_value));
  ------------------
  |  |   40|  40.9M|#define CLIP_U8(x) CLIP3((x), 0,     255);
  |  |  ------------------
  |  |  |  |   40|  40.9M|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.83M, False: 39.0M]
  |  |  |  |  |  Branch (40:53): [True: 198k, False: 38.8M]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|       |
  144|   485k|}

ihevcd_jobq_ctxt_size:
   74|    932|{
   75|    932|    WORD32 size;
   76|    932|    size = sizeof(jobq_t);
   77|    932|    size += ithread_get_mutex_lock_size();
   78|    932|    return size;
   79|    932|}
ihevcd_jobq_lock:
  100|   840k|{
  101|   840k|    WORD32 retval;
  102|   840k|    retval = ithread_mutex_lock(ps_jobq->pv_mutex);
  103|   840k|    if(retval)
  ------------------
  |  Branch (103:8): [True: 0, False: 840k]
  ------------------
  104|      0|    {
  105|      0|        return (IHEVCD_ERROR_T)IHEVCD_FAIL;
  106|      0|    }
  107|   840k|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  108|   840k|}
ihevcd_jobq_unlock:
  130|   844k|{
  131|   844k|    WORD32 retval;
  132|   844k|    retval = ithread_mutex_unlock(ps_jobq->pv_mutex);
  133|   844k|    if(retval)
  ------------------
  |  Branch (133:8): [True: 0, False: 844k]
  ------------------
  134|      0|    {
  135|      0|        return (IHEVCD_ERROR_T)IHEVCD_FAIL;
  136|      0|    }
  137|   844k|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  138|       |
  139|   844k|}
ihevcd_jobq_yield:
  163|   586k|{
  164|       |
  165|   586k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  166|       |
  167|   586k|    IHEVCD_ERROR_T rettmp;
  168|   586k|    rettmp = ihevcd_jobq_unlock(ps_jobq);
  169|   586k|    RETURN_IF((rettmp != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), rettmp);
  ------------------
  |  |   37|   586k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 586k]
  |  |  ------------------
  ------------------
  170|       |
  171|       |    //NOP(1024 * 8);
  172|   586k|    ithread_yield();
  173|       |
  174|   586k|    rettmp = ihevcd_jobq_lock(ps_jobq);
  175|   586k|    RETURN_IF((rettmp != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), rettmp);
  ------------------
  |  |   37|   586k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 586k]
  |  |  ------------------
  ------------------
  176|   586k|    return ret;
  177|   586k|}
ihevcd_jobq_init:
  232|    932|{
  233|    932|    jobq_t *ps_jobq;
  234|    932|    UWORD8 *pu1_buf;
  235|    932|    pu1_buf = (UWORD8 *)pv_buf;
  236|       |
  237|    932|    ps_jobq = (jobq_t *)pu1_buf;
  238|    932|    pu1_buf += sizeof(jobq_t);
  239|    932|    buf_size -= sizeof(jobq_t);
  240|       |
  241|    932|    ps_jobq->pv_mutex = pu1_buf;
  242|    932|    pu1_buf += ithread_get_mutex_lock_size();
  243|    932|    buf_size -= ithread_get_mutex_lock_size();
  244|       |
  245|    932|    if(buf_size <= 0)
  ------------------
  |  Branch (245:8): [True: 0, False: 932]
  ------------------
  246|      0|        return NULL;
  247|       |
  248|    932|    ithread_mutex_init(ps_jobq->pv_mutex);
  249|       |
  250|    932|    ps_jobq->pv_buf_base = pu1_buf;
  251|    932|    ps_jobq->pv_buf_wr = pu1_buf;
  252|    932|    ps_jobq->pv_buf_rd = pu1_buf;
  253|    932|    ps_jobq->pv_buf_end = pu1_buf + buf_size;
  254|    932|    ps_jobq->i4_terminate = 0;
  255|       |
  256|       |
  257|    932|    return ps_jobq;
  258|    932|}
ihevcd_jobq_reset:
  278|  6.28k|{
  279|  6.28k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  280|  6.28k|    ret = ihevcd_jobq_lock(ps_jobq);
  281|  6.28k|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  6.28k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 6.28k]
  |  |  ------------------
  ------------------
  282|       |
  283|  6.28k|    ps_jobq->pv_buf_wr      = ps_jobq->pv_buf_base;
  284|  6.28k|    ps_jobq->pv_buf_rd      = ps_jobq->pv_buf_base;
  285|  6.28k|    ps_jobq->i4_terminate   = 0;
  286|  6.28k|    ret = ihevcd_jobq_unlock(ps_jobq);
  287|  6.28k|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  6.28k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 6.28k]
  |  |  ------------------
  ------------------
  288|       |
  289|  6.28k|    return ret;
  290|  6.28k|}
ihevcd_jobq_deinit:
  312|    932|{
  313|    932|    WORD32 retval;
  314|    932|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  315|       |
  316|    932|    ret = ihevcd_jobq_reset(ps_jobq);
  317|    932|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|    932|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 932]
  |  |  ------------------
  ------------------
  318|       |
  319|    932|    retval = ithread_mutex_destroy(ps_jobq->pv_mutex);
  320|    932|    if(retval)
  ------------------
  |  Branch (320:8): [True: 0, False: 932]
  ------------------
  321|      0|    {
  322|      0|        return (IHEVCD_ERROR_T)IHEVCD_FAIL;
  323|      0|    }
  324|       |
  325|    932|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  326|    932|}
ihevcd_jobq_terminate:
  349|  3.99k|{
  350|  3.99k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  351|  3.99k|    ret = ihevcd_jobq_lock(ps_jobq);
  352|  3.99k|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  3.99k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 3.99k]
  |  |  ------------------
  ------------------
  353|       |
  354|  3.99k|    ps_jobq->i4_terminate = 1;
  355|       |
  356|  3.99k|    ret = ihevcd_jobq_unlock(ps_jobq);
  357|  3.99k|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  3.99k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 3.99k]
  |  |  ------------------
  ------------------
  358|  3.99k|    return ret;
  359|  3.99k|}
ihevcd_jobq_queue:
  393|   118k|{
  394|   118k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  395|   118k|    IHEVCD_ERROR_T rettmp;
  396|   118k|    UWORD8 *pu1_buf;
  397|   118k|    UNUSED(blocking);
  ------------------
  |  |   38|   118k|#define UNUSED(x) ((void)(x))
  ------------------
  398|       |
  399|   118k|    rettmp = ihevcd_jobq_lock(ps_jobq);
  400|   118k|    RETURN_IF((rettmp != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), rettmp);
  ------------------
  |  |   37|   118k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  401|       |
  402|   118k|    pu1_buf = (UWORD8 *)ps_jobq->pv_buf_wr;
  403|   118k|    if((UWORD8 *)ps_jobq->pv_buf_end >= (pu1_buf + job_size))
  ------------------
  |  Branch (403:8): [True: 118k, False: 0]
  ------------------
  404|   118k|    {
  405|   118k|        memcpy(ps_jobq->pv_buf_wr, pv_job, job_size);
  406|   118k|        ps_jobq->pv_buf_wr = (UWORD8 *)ps_jobq->pv_buf_wr + job_size;
  407|   118k|        ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  408|   118k|    }
  409|      0|    else
  410|      0|    {
  411|       |        /* Handle wrap around case */
  412|       |        /* Wait for pv_buf_rd to consume first job_size number of bytes
  413|       |         * from the beginning of job queue
  414|       |         */
  415|      0|        ret = (IHEVCD_ERROR_T)IHEVCD_FAIL;
  416|      0|    }
  417|       |
  418|   118k|    ps_jobq->i4_terminate = 0;
  419|       |
  420|   118k|    rettmp = ihevcd_jobq_unlock(ps_jobq);
  421|   118k|    RETURN_IF((rettmp != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), rettmp);
  ------------------
  |  |   37|   118k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 118k]
  |  |  ------------------
  ------------------
  422|       |
  423|   118k|    return ret;
  424|   118k|}
ihevcd_jobq_dequeue:
  458|   127k|{
  459|   127k|    IHEVCD_ERROR_T ret;
  460|   127k|    IHEVCD_ERROR_T rettmp;
  461|   127k|    volatile UWORD8 *pu1_buf;
  462|       |
  463|   127k|    rettmp = ihevcd_jobq_lock(ps_jobq);
  464|   127k|    RETURN_IF((rettmp != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), rettmp);
  ------------------
  |  |   37|   127k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 127k]
  |  |  ------------------
  ------------------
  465|   127k|    pu1_buf = (UWORD8 *)ps_jobq->pv_buf_rd;
  466|       |
  467|       |
  468|   127k|    if((UWORD8 *)ps_jobq->pv_buf_end >= (pu1_buf + job_size))
  ------------------
  |  Branch (468:8): [True: 129k, False: 18.4E]
  ------------------
  469|   129k|    {
  470|   716k|        while(1)
  ------------------
  |  Branch (470:15): [Folded - Ignored]
  ------------------
  471|   716k|        {
  472|   716k|            pu1_buf = (UWORD8 *)ps_jobq->pv_buf_rd;
  473|   716k|            if((UWORD8 *)ps_jobq->pv_buf_wr >= (pu1_buf + job_size))
  ------------------
  |  Branch (473:16): [True: 118k, False: 597k]
  ------------------
  474|   118k|            {
  475|   118k|                memcpy(pv_job, ps_jobq->pv_buf_rd, job_size);
  476|   118k|                ps_jobq->pv_buf_rd = (UWORD8 *)ps_jobq->pv_buf_rd + job_size;
  477|   118k|                ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  478|   118k|                break;
  479|   118k|            }
  480|   597k|            else
  481|   597k|            {
  482|       |                /* If all the entries have been dequeued, then break and return */
  483|   597k|                if(1 == ps_jobq->i4_terminate)
  ------------------
  |  Branch (483:20): [True: 10.6k, False: 586k]
  ------------------
  484|  10.6k|                {
  485|  10.6k|                    ret = (IHEVCD_ERROR_T)IHEVCD_FAIL;
  486|  10.6k|                    break;
  487|  10.6k|                }
  488|       |
  489|   586k|                if(1 == blocking)
  ------------------
  |  Branch (489:20): [True: 586k, False: 0]
  ------------------
  490|   586k|                {
  491|   586k|                    ihevcd_jobq_yield(ps_jobq);
  492|       |
  493|   586k|                }
  494|      0|                else
  495|      0|                {
  496|       |                    /* If there is no job available,
  497|       |                     * and this is non blocking call then return fail */
  498|      0|                    ret = (IHEVCD_ERROR_T)IHEVCD_FAIL;
  499|      0|                }
  500|   586k|            }
  501|   716k|        }
  502|   129k|    }
  503|  18.4E|    else
  504|  18.4E|    {
  505|       |        /* Handle wrap around case */
  506|       |        /* Wait for pv_buf_rd to consume first job_size number of bytes
  507|       |         * from the beginning of job queue
  508|       |         */
  509|  18.4E|        ret = (IHEVCD_ERROR_T)IHEVCD_FAIL;
  510|  18.4E|    }
  511|   127k|    rettmp = ihevcd_jobq_unlock(ps_jobq);
  512|   127k|    RETURN_IF((rettmp != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), rettmp);
  ------------------
  |  |   37|   127k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 127k]
  |  |  ------------------
  ------------------
  513|       |
  514|   127k|    return ret;
  515|   127k|}

ihevcd_compare_pu_t:
   95|   399k|{
   96|   399k|    WORD32 l0_match = 0, l1_match = 0;
   97|   399k|    pu_mv_t *ps_mv_1, *ps_mv_2;
   98|   399k|    WORD32 pred_mode_1, pred_mode_2;
   99|       |
  100|   399k|    ps_mv_1 = &ps_pu_1->mv;
  101|   399k|    ps_mv_2 = &ps_pu_2->mv;
  102|       |
  103|   399k|    pred_mode_1 = ps_pu_1->b2_pred_mode;
  104|   399k|    pred_mode_2 = ps_pu_2->b2_pred_mode;
  105|       |
  106|   399k|    if(pred_mode_1 == pred_mode_2)
  ------------------
  |  Branch (106:8): [True: 263k, False: 135k]
  ------------------
  107|   263k|    {
  108|   263k|        if(pred_mode_1 != PRED_L1)
  ------------------
  |  Branch (108:12): [True: 231k, False: 31.6k]
  ------------------
  109|   231k|        {
  110|   231k|            if(ps_mv_1->i1_l0_ref_idx == ps_mv_2->i1_l0_ref_idx)
  ------------------
  |  Branch (110:16): [True: 203k, False: 27.9k]
  ------------------
  111|   203k|            {
  112|   203k|                if(0 == memcmp(&ps_mv_1->s_l0_mv, &ps_mv_2->s_l0_mv, sizeof(mv_t)))
  ------------------
  |  Branch (112:20): [True: 142k, False: 61.2k]
  ------------------
  113|   142k|                {
  114|   142k|                    l0_match = 1;
  115|   142k|                }
  116|   203k|            }
  117|   231k|        }
  118|   263k|        if(pred_mode_1 != PRED_L0)
  ------------------
  |  Branch (118:12): [True: 194k, False: 68.8k]
  ------------------
  119|   194k|        {
  120|   194k|            if(ps_mv_1->i1_l1_ref_idx == ps_mv_2->i1_l1_ref_idx)
  ------------------
  |  Branch (120:16): [True: 172k, False: 22.4k]
  ------------------
  121|   172k|            {
  122|   172k|                if(0 == memcmp(&ps_mv_1->s_l1_mv, &ps_mv_2->s_l1_mv, sizeof(mv_t)))
  ------------------
  |  Branch (122:20): [True: 135k, False: 36.2k]
  ------------------
  123|   135k|                {
  124|   135k|                    l1_match = 1;
  125|   135k|                }
  126|   172k|            }
  127|   194k|        }
  128|   263k|        if(pred_mode_1 == PRED_BI)
  ------------------
  |  Branch (128:12): [True: 162k, False: 100k]
  ------------------
  129|   162k|            return (l1_match && l0_match);
  ------------------
  |  Branch (129:21): [True: 113k, False: 49.3k]
  |  Branch (129:33): [True: 91.0k, False: 22.3k]
  ------------------
  130|   100k|        else if(pred_mode_1 == PRED_L0)
  ------------------
  |  Branch (130:17): [True: 71.5k, False: 29.1k]
  ------------------
  131|  71.5k|            return l0_match;
  132|  29.1k|        else
  133|  29.1k|            return l1_match;
  134|   263k|    }
  135|       |
  136|   135k|    return 0;
  137|   399k|}
ihevcd_collocated_mvp:
  146|   487k|{
  147|   487k|    sps_t *ps_sps = ps_mv_ctxt->ps_sps;
  148|   487k|    slice_header_t *ps_slice_hdr = ps_mv_ctxt->ps_slice_hdr;
  149|   487k|    ref_list_t *ps_ref_list[2];
  150|   487k|    mv_buf_t *ps_mv_buf_col;
  151|   487k|    WORD32 xp_col, yp_col;
  152|   487k|    WORD32 col_ctb_x, col_ctb_y;
  153|   487k|    mv_t as_mv_col[2];
  154|   487k|    WORD32 log2_ctb_size;
  155|   487k|    WORD32 ctb_size;
  156|   487k|    WORD32 avail_col;
  157|   487k|    WORD32 col_ctb_idx, pu_cnt;
  158|   487k|    WORD32 au4_list_col[2];
  159|   487k|    WORD32 num_minpu_in_ctb;
  160|   487k|    UWORD8 *pu1_pic_pu_map_ctb;
  161|   487k|    pu_t *ps_col_pu;
  162|   487k|    WORD32 part_pos_y;
  163|       |
  164|       |
  165|   487k|    part_pos_y = ps_pu->b4_pos_y << 2;
  166|       |
  167|   487k|    log2_ctb_size = ps_sps->i1_log2_ctb_size;
  168|   487k|    ctb_size = (1 << log2_ctb_size);
  169|       |
  170|   487k|    avail_col = 1;
  171|       |
  172|       |    /* Initializing reference list */
  173|   487k|    ps_ref_list[0] = ps_slice_hdr->as_ref_pic_list0;
  174|   487k|    ps_ref_list[1] = ps_slice_hdr->as_ref_pic_list1;
  175|   487k|    if(PSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (175:8): [True: 4.16k, False: 482k]
  ------------------
  176|  4.16k|        ps_ref_list[1] = ps_slice_hdr->as_ref_pic_list0;
  177|       |
  178|   487k|    if((ps_slice_hdr->i1_slice_type == BSLICE) && (ps_slice_hdr->i1_collocated_from_l0_flag == 0))
  ------------------
  |  Branch (178:8): [True: 482k, False: 4.13k]
  |  Branch (178:51): [True: 160k, False: 322k]
  ------------------
  179|   160k|    {
  180|       |        /* L1 */
  181|   160k|        ps_mv_buf_col = (mv_buf_t *)ps_ref_list[1][ps_slice_hdr->i1_collocated_ref_idx].pv_mv_buf;
  182|       |
  183|   160k|    }
  184|   326k|    else
  185|   326k|    {
  186|       |        /* L0 */
  187|   326k|        ps_mv_buf_col = (mv_buf_t *)ps_ref_list[0][ps_slice_hdr->i1_collocated_ref_idx].pv_mv_buf;
  188|       |
  189|   326k|    }
  190|   487k|    num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   487k|#define MIN_PU_SIZE         4
  ------------------
                  num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   487k|#define MIN_PU_SIZE         4
  ------------------
  191|       |
  192|   487k|    if(((part_pos_y >> log2_ctb_size) == (y_col >> log2_ctb_size))
  ------------------
  |  Branch (192:8): [True: 367k, False: 119k]
  ------------------
  193|   487k|                    && ((x_col + (ps_mv_ctxt->i4_ctb_x << log2_ctb_size)) < ps_sps->i2_pic_width_in_luma_samples)
  ------------------
  |  Branch (193:24): [True: 365k, False: 2.70k]
  ------------------
  194|   487k|                    && (((y_col + (ps_mv_ctxt->i4_ctb_y << log2_ctb_size))
  ------------------
  |  Branch (194:24): [True: 356k, False: 8.85k]
  ------------------
  195|   365k|                                    < ps_sps->i2_pic_height_in_luma_samples)))
  196|   356k|    {
  197|   356k|        xp_col = ((x_col >> 4) << 4);
  198|   356k|        yp_col = ((y_col >> 4) << 4);
  199|   356k|        col_ctb_x = ps_mv_ctxt->i4_ctb_x + (xp_col >> log2_ctb_size);
  200|   356k|        col_ctb_y = ps_mv_ctxt->i4_ctb_y + (yp_col >> log2_ctb_size);
  201|   356k|        col_ctb_idx = col_ctb_x + (col_ctb_y)*(ps_sps->i2_pic_wd_in_ctb);
  202|   356k|        pu_cnt = ps_mv_buf_col->pu4_pic_pu_idx[col_ctb_idx];
  203|   356k|        pu1_pic_pu_map_ctb = ps_mv_buf_col->pu1_pic_pu_map
  204|   356k|                        + col_ctb_idx * num_minpu_in_ctb;
  205|   356k|        if(xp_col == ctb_size)
  ------------------
  |  Branch (205:12): [True: 99.8k, False: 256k]
  ------------------
  206|  99.8k|            xp_col = 0;
  207|   356k|        pu_cnt += pu1_pic_pu_map_ctb[(yp_col >> 2)
  208|   356k|                        * (ctb_size / MIN_PU_SIZE) + (xp_col >> 2)];
  ------------------
  |  |  357|   356k|#define MIN_PU_SIZE         4
  ------------------
  209|   356k|        ps_col_pu = &ps_mv_buf_col->ps_pic_pu[pu_cnt];
  210|   356k|    }
  211|   130k|    else
  212|   130k|        avail_col = 0;
  213|       |
  214|   487k|    if((avail_col == 0) || (ps_col_pu->b1_intra_flag == 1)
  ------------------
  |  Branch (214:8): [True: 130k, False: 356k]
  |  Branch (214:28): [True: 70.1k, False: 286k]
  ------------------
  215|   487k|                    || (ps_slice_hdr->i1_slice_temporal_mvp_enable_flag == 0))
  ------------------
  |  Branch (215:24): [True: 22.2k, False: 263k]
  ------------------
  216|   223k|    {
  217|   223k|        pu4_avail_col_flag[0] = 0;
  218|   223k|        pu4_avail_col_flag[1] = 0;
  219|   223k|        ps_mv_col[0].i2_mvx = 0;
  220|   223k|        ps_mv_col[0].i2_mvy = 0;
  221|   223k|        ps_mv_col[1].i2_mvx = 0;
  222|   223k|        ps_mv_col[1].i2_mvy = 0;
  223|   223k|    }
  224|   263k|    else
  225|   263k|    {
  226|   263k|        WORD32 au4_ref_idx_col[2];
  227|   263k|        WORD32 pred_flag_l0, pred_flag_l1;
  228|   263k|        pred_flag_l0 = (ps_col_pu->b2_pred_mode != PRED_L1);
  229|   263k|        pred_flag_l1 = (ps_col_pu->b2_pred_mode != PRED_L0);
  230|       |
  231|   263k|        if(pred_flag_l0 == 0)
  ------------------
  |  Branch (231:12): [True: 3.60k, False: 259k]
  ------------------
  232|  3.60k|        {
  233|  3.60k|            as_mv_col[0] = ps_col_pu->mv.s_l1_mv;
  234|  3.60k|            au4_ref_idx_col[0] = ps_col_pu->mv.i1_l1_ref_idx;
  235|  3.60k|            au4_list_col[0] = 1; /* L1 */
  236|       |
  237|  3.60k|            as_mv_col[1] = ps_col_pu->mv.s_l1_mv;
  238|  3.60k|            au4_ref_idx_col[1] = ps_col_pu->mv.i1_l1_ref_idx;
  239|  3.60k|            au4_list_col[1] = 1; /* L1 */
  240|  3.60k|        }
  241|   259k|        else
  242|   259k|        {
  243|   259k|            if(pred_flag_l1 == 0)
  ------------------
  |  Branch (243:16): [True: 41.1k, False: 218k]
  ------------------
  244|  41.1k|            {
  245|  41.1k|                as_mv_col[0] = ps_col_pu->mv.s_l0_mv;
  246|  41.1k|                au4_ref_idx_col[0] = ps_col_pu->mv.i1_l0_ref_idx;
  247|  41.1k|                au4_list_col[0] = 0; /* L1 */
  248|       |
  249|  41.1k|                as_mv_col[1] = ps_col_pu->mv.s_l0_mv;
  250|  41.1k|                au4_ref_idx_col[1] = ps_col_pu->mv.i1_l0_ref_idx;
  251|  41.1k|                au4_list_col[1] = 0; /* L1 */
  252|  41.1k|            }
  253|   218k|            else
  254|   218k|            {
  255|   218k|                if(1 == ps_slice_hdr->i1_low_delay_flag)
  ------------------
  |  Branch (255:20): [True: 201k, False: 17.1k]
  ------------------
  256|   201k|                {
  257|   201k|                    as_mv_col[0] = ps_col_pu->mv.s_l0_mv;
  258|   201k|                    au4_ref_idx_col[0] = ps_col_pu->mv.i1_l0_ref_idx;
  259|   201k|                    au4_list_col[0] = 0; /* L0 */
  260|       |
  261|   201k|                    as_mv_col[1] = ps_col_pu->mv.s_l1_mv;
  262|   201k|                    au4_ref_idx_col[1] = ps_col_pu->mv.i1_l1_ref_idx;
  263|   201k|                    au4_list_col[1] = 1; /* L1 */
  264|   201k|                }
  265|  17.1k|                else
  266|  17.1k|                {
  267|  17.1k|                    if(0 == ps_slice_hdr->i1_collocated_from_l0_flag)
  ------------------
  |  Branch (267:24): [True: 15.5k, False: 1.58k]
  ------------------
  268|  15.5k|                    {
  269|  15.5k|                        as_mv_col[0] = ps_col_pu->mv.s_l0_mv;
  270|  15.5k|                        au4_ref_idx_col[0] = ps_col_pu->mv.i1_l0_ref_idx;
  271|       |
  272|  15.5k|                        as_mv_col[1] = ps_col_pu->mv.s_l0_mv;
  273|  15.5k|                        au4_ref_idx_col[1] = ps_col_pu->mv.i1_l0_ref_idx;
  274|  15.5k|                    }
  275|  1.58k|                    else
  276|  1.58k|                    {
  277|  1.58k|                        as_mv_col[0] = ps_col_pu->mv.s_l1_mv;
  278|  1.58k|                        au4_ref_idx_col[0] = ps_col_pu->mv.i1_l1_ref_idx;
  279|       |
  280|  1.58k|                        as_mv_col[1] = ps_col_pu->mv.s_l1_mv;
  281|  1.58k|                        au4_ref_idx_col[1] = ps_col_pu->mv.i1_l1_ref_idx;
  282|  1.58k|                    }
  283|       |
  284|  17.1k|                    au4_list_col[0] = ps_slice_hdr->i1_collocated_from_l0_flag; /* L"collocated_from_l0_flag" */
  285|  17.1k|                    au4_list_col[1] = ps_slice_hdr->i1_collocated_from_l0_flag; /* L"collocated_from_l0_flag" */
  286|  17.1k|                }
  287|   218k|            }
  288|   259k|        }
  289|   263k|        avail_col = 1;
  290|   263k|        {
  291|   263k|            WORD32 cur_poc, col_poc, col_ref_poc_l0, cur_ref_poc;
  292|   263k|            WORD32 col_ref_poc_l0_lt, cur_ref_poc_lt;
  293|   263k|            WORD32 ref_idx_l0, ref_idx_l1;
  294|   263k|            WORD32 slice_idx;
  295|   263k|            pic_buf_t *ps_pic_buf;
  296|       |
  297|   263k|            if(use_pu_ref_idx)
  ------------------
  |  Branch (297:16): [True: 11.2k, False: 252k]
  ------------------
  298|  11.2k|            {
  299|  11.2k|                ref_idx_l0 = ps_pu->mv.i1_l0_ref_idx;
  300|  11.2k|                ref_idx_l1 = ps_pu->mv.i1_l1_ref_idx;
  301|  11.2k|            }
  302|   252k|            else
  303|   252k|            {
  304|   252k|                ref_idx_l0 = 0;
  305|   252k|                ref_idx_l1 = 0;
  306|   252k|            }
  307|       |
  308|   263k|            col_poc = ps_mv_buf_col->i4_abs_poc;
  309|   263k|            cur_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
  310|       |
  311|   263k|            slice_idx = *(ps_mv_buf_col->pu1_pic_slice_map + col_ctb_x + col_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  312|   263k|            slice_idx &= (MAX_SLICE_HDR_CNT - 1);
  ------------------
  |  |  153|   263k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|   263k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  313|   263k|            if(au4_list_col[0] == 0)
  ------------------
  |  Branch (313:16): [True: 258k, False: 5.29k]
  ------------------
  314|   258k|            {
  315|   258k|                col_ref_poc_l0 =
  316|   258k|                                ps_mv_buf_col->ai4_l0_collocated_poc[slice_idx][au4_ref_idx_col[0]];
  317|   258k|                col_ref_poc_l0_lt =
  318|   258k|                                (ps_mv_buf_col->ai1_l0_collocated_poc_lt[slice_idx][au4_ref_idx_col[0]] == LONG_TERM_REF);
  319|   258k|            }
  320|  5.29k|            else
  321|  5.29k|            {
  322|  5.29k|                col_ref_poc_l0 =
  323|  5.29k|                                ps_mv_buf_col->ai4_l1_collocated_poc[slice_idx][au4_ref_idx_col[0]];
  324|  5.29k|                col_ref_poc_l0_lt =
  325|  5.29k|                                (ps_mv_buf_col->ai1_l1_collocated_poc_lt[slice_idx][au4_ref_idx_col[0]] == LONG_TERM_REF);
  326|  5.29k|            }
  327|       |            /* L0 collocated mv */
  328|   263k|            ps_pic_buf = (pic_buf_t *)((ps_ref_list[0][ref_idx_l0].pv_pic_buf));
  329|   263k|            cur_ref_poc = ps_pic_buf->i4_abs_poc;
  330|   263k|            cur_ref_poc_lt = (ps_pic_buf->u1_used_as_ref == LONG_TERM_REF);
  331|       |
  332|   263k|            if(cur_ref_poc_lt == col_ref_poc_l0_lt)
  ------------------
  |  Branch (332:16): [True: 263k, False: 143]
  ------------------
  333|   263k|            {
  334|   263k|                pu4_avail_col_flag[0] = 1;
  335|       |
  336|   263k|                if(cur_ref_poc_lt || ((col_poc - col_ref_poc_l0) == (cur_poc - cur_ref_poc)))
  ------------------
  |  Branch (336:20): [True: 352, False: 263k]
  |  Branch (336:38): [True: 204k, False: 58.9k]
  ------------------
  337|   204k|                {
  338|   204k|                    ps_mv_col[0] = as_mv_col[0];
  339|   204k|                }
  340|  58.9k|                else
  341|  58.9k|                {
  342|  58.9k|                    ps_mv_col[0] = as_mv_col[0];
  343|  58.9k|                    if(col_ref_poc_l0 != col_poc)
  ------------------
  |  Branch (343:24): [True: 55.5k, False: 3.37k]
  ------------------
  344|  55.5k|                        ihevcd_scale_collocated_mv((mv_t *)(&ps_mv_col[0]), cur_ref_poc,
  345|  55.5k|                                                   col_ref_poc_l0, col_poc, cur_poc);
  346|  58.9k|                }
  347|   263k|            }
  348|    143|            else
  349|    143|            {
  350|    143|                pu4_avail_col_flag[0] = 0;
  351|    143|                ps_mv_col[0].i2_mvx = 0;
  352|    143|                ps_mv_col[0].i2_mvy = 0;
  353|    143|            }
  354|   263k|            if((BSLICE == ps_slice_hdr->i1_slice_type))
  ------------------
  |  Branch (354:16): [True: 263k, False: 76]
  ------------------
  355|   263k|            {
  356|   263k|                WORD32 col_ref_poc_l1_lt, col_ref_poc_l1;
  357|       |
  358|   263k|                if(au4_list_col[1] == 0)
  ------------------
  |  Branch (358:20): [True: 56.1k, False: 207k]
  ------------------
  359|  56.1k|                {
  360|  56.1k|                    col_ref_poc_l1 =
  361|  56.1k|                                    ps_mv_buf_col->ai4_l0_collocated_poc[slice_idx][au4_ref_idx_col[1]];
  362|  56.1k|                    col_ref_poc_l1_lt =
  363|  56.1k|                                    (ps_mv_buf_col->ai1_l0_collocated_poc_lt[slice_idx][au4_ref_idx_col[1]] == LONG_TERM_REF);
  364|  56.1k|                }
  365|   207k|                else
  366|   207k|                {
  367|   207k|                    col_ref_poc_l1 =
  368|   207k|                                    ps_mv_buf_col->ai4_l1_collocated_poc[slice_idx][au4_ref_idx_col[1]];
  369|   207k|                    col_ref_poc_l1_lt =
  370|   207k|                                    (ps_mv_buf_col->ai1_l1_collocated_poc_lt[slice_idx][au4_ref_idx_col[1]] == LONG_TERM_REF);
  371|   207k|                }
  372|       |
  373|       |                /* L1 collocated mv */
  374|   263k|                ps_pic_buf = (pic_buf_t *)((ps_ref_list[1][ref_idx_l1].pv_pic_buf));
  375|   263k|                cur_ref_poc = ps_pic_buf->i4_abs_poc;
  376|   263k|                cur_ref_poc_lt = (ps_pic_buf->u1_used_as_ref == LONG_TERM_REF);
  377|       |
  378|   263k|                if(cur_ref_poc_lt == col_ref_poc_l1_lt)
  ------------------
  |  Branch (378:20): [True: 262k, False: 765]
  ------------------
  379|   262k|                {
  380|   262k|                    pu4_avail_col_flag[1] = 1;
  381|       |
  382|   262k|                    if(cur_ref_poc_lt || ((col_poc - col_ref_poc_l1) == (cur_poc - cur_ref_poc)))
  ------------------
  |  Branch (382:24): [True: 52, False: 262k]
  |  Branch (382:42): [True: 203k, False: 58.8k]
  ------------------
  383|   203k|                    {
  384|   203k|                        ps_mv_col[1] = as_mv_col[1];
  385|   203k|                    }
  386|  58.8k|                    else
  387|  58.8k|                    {
  388|  58.8k|                        ps_mv_col[1] = as_mv_col[1];
  389|  58.8k|                        if(col_ref_poc_l1 != col_poc)
  ------------------
  |  Branch (389:28): [True: 55.5k, False: 3.35k]
  ------------------
  390|  55.5k|                            ihevcd_scale_collocated_mv((mv_t *)&ps_mv_col[1], cur_ref_poc,
  391|  55.5k|                                                       col_ref_poc_l1, col_poc, cur_poc);
  392|  58.8k|                    }
  393|   262k|                }
  394|    765|                else
  395|    765|                {
  396|    765|                    pu4_avail_col_flag[1] = 0;
  397|    765|                    ps_mv_col[1].i2_mvx = 0;
  398|    765|                    ps_mv_col[1].i2_mvy = 0;
  399|    765|                }
  400|   263k|            }
  401|     76|            else
  402|     76|            {
  403|     76|                pu4_avail_col_flag[1] = 0;
  404|     76|            }
  405|   263k|        }
  406|   263k|    }
  407|   487k|}
ihevcd_mv_merge:
  479|  5.10M|{
  480|       |    /******************************************************/
  481|       |    /*      Spatial Merge Candidates                      */
  482|       |    /******************************************************/
  483|  5.10M|    slice_header_t *ps_slice_hdr;
  484|  5.10M|    pu_t as_pu_merge_list[MAX_NUM_MERGE_CAND];
  485|  5.10M|    pps_t *ps_pps;
  486|  5.10M|    ref_list_t *ps_ref_list[2];
  487|  5.10M|    WORD32 sum_avail_a0_a1_b0_b1 = 0; /*Sum of availability of A0, A1, B0, B1*/
  488|  5.10M|    WORD32 nbr_x, nbr_y;
  489|  5.10M|    WORD32 nbr_avail[MAX_NUM_MV_NBR];
  490|  5.10M|    WORD32 merge_shift;
  491|  5.10M|    WORD32 nbr_pu_idx;
  492|  5.10M|    pu_t *ps_nbr_pu[MAX_NUM_MV_NBR];
  493|  5.10M|    WORD32 max_num_merge_cand;
  494|  5.10M|    WORD32 candidate_cnt;
  495|  5.10M|    WORD32 pos_x_merge_shift, pos_y_merge_shift;
  496|       |
  497|  5.10M|    ps_slice_hdr = ps_mv_ctxt->ps_slice_hdr;
  498|  5.10M|    ps_pps = ps_mv_ctxt->ps_pps;
  499|       |    /* Initializing reference list */
  500|  5.10M|    ps_ref_list[0] = ps_slice_hdr->as_ref_pic_list0;
  501|  5.10M|    ps_ref_list[1] = ps_slice_hdr->as_ref_pic_list1;
  502|  5.10M|    if(PSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (502:8): [True: 76.8k, False: 5.03M]
  ------------------
  503|  76.8k|        ps_ref_list[1] = ps_slice_hdr->as_ref_pic_list0;
  504|       |
  505|  5.10M|    candidate_cnt = 0;
  506|       |    /*******************************************/
  507|       |    /* Neighbor location: Graphical indication */
  508|       |    /*                                         */
  509|       |    /*          B2 _____________B1 B0          */
  510|       |    /*            |               |            */
  511|       |    /*            |               |            */
  512|       |    /*            |               |            */
  513|       |    /*            |      PU     ht|            */
  514|       |    /*            |               |            */
  515|       |    /*            |               |            */
  516|       |    /*          A1|______wd_______|            */
  517|       |    /*          A0                             */
  518|       |    /*                                         */
  519|       |    /*******************************************/
  520|       |
  521|  5.10M|    merge_shift = ps_pps->i1_log2_parallel_merge_level;
  522|       |
  523|       |    /* Availability check */
  524|       |    /* A1 */
  525|  5.10M|    nbr_x = part_pos_x - 1;
  526|  5.10M|    nbr_y = part_pos_y + part_ht - 1; /* A1 */
  527|       |
  528|  5.10M|    nbr_pu_idx = *(pu4_left_pu_idx + ((nbr_y - part_pos_y) >> 2) * left_nbr_4x4_strd);
  529|  5.10M|    ps_nbr_pu[NBR_A1] = ps_mv_ctxt->ps_pic_pu + nbr_pu_idx;
  530|       |
  531|  5.10M|    nbr_avail[NBR_A1] = l_avail
  ------------------
  |  Branch (531:25): [True: 4.96M, False: 145k]
  ------------------
  532|  5.10M|                    && (!ps_nbr_pu[NBR_A1]->b1_intra_flag); /* A1 */
  ------------------
  |  Branch (532:24): [True: 5.00M, False: 18.4E]
  ------------------
  533|       |
  534|  5.10M|    pos_x_merge_shift = (part_pos_x >> merge_shift);
  535|  5.10M|    pos_y_merge_shift = (part_pos_y >> merge_shift);
  536|  5.10M|    max_num_merge_cand = ps_pu->b3_merge_idx + 1;
  537|       |
  538|  5.10M|    {
  539|  5.10M|        if(nbr_avail[NBR_A1])
  ------------------
  |  Branch (539:12): [True: 5.01M, False: 91.5k]
  ------------------
  540|  5.01M|        {
  541|       |            /* if at same merge level */
  542|  5.01M|            if(pos_x_merge_shift == (nbr_x >> merge_shift) &&
  ------------------
  |  Branch (542:16): [True: 684k, False: 4.33M]
  ------------------
  543|  5.01M|               (pos_y_merge_shift == (nbr_y >> merge_shift)))
  ------------------
  |  Branch (543:16): [True: 684k, False: 2]
  ------------------
  544|   684k|            {
  545|   684k|                nbr_avail[NBR_A1] = 0;
  546|   684k|            }
  547|       |
  548|       |            /* SPEC JCTVC-K1003_v9 version has a different way using not available       */
  549|       |            /* candidates compared to software. for non square part and seconf part case */
  550|       |            /* ideally nothing from the 1st partition should be used as per spec but     */
  551|       |            /* HM 8.2 dev verison does not adhere to this. currenlty code fllows HM      */
  552|       |
  553|       |            /* if single MCL is 0 , second part of 2 part in CU */
  554|  4.33M|            else if((single_mcl_flag == 0) && (part_idx == 1) &&
  ------------------
  |  Branch (554:21): [True: 4.30M, False: 25.7k]
  |  Branch (554:47): [True: 52.5k, False: 4.25M]
  ------------------
  555|  4.33M|                            ((part_mode == PART_Nx2N) || (part_mode == PART_nLx2N) ||
  ------------------
  |  Branch (555:30): [True: 29.9k, False: 22.5k]
  |  Branch (555:58): [True: 1.21k, False: 21.3k]
  ------------------
  556|  52.5k|                                            (part_mode == PART_nRx2N)))
  ------------------
  |  Branch (556:45): [True: 1.01k, False: 20.3k]
  ------------------
  557|  32.2k|            {
  558|  32.2k|                nbr_avail[NBR_A1] = 0;
  559|  32.2k|            }
  560|  5.01M|            sum_avail_a0_a1_b0_b1 += nbr_avail[NBR_A1];
  561|  5.01M|            if(nbr_avail[NBR_A1])
  ------------------
  |  Branch (561:16): [True: 4.28M, False: 731k]
  ------------------
  562|  4.28M|            {
  563|  4.28M|                as_pu_merge_list[candidate_cnt] = *ps_nbr_pu[NBR_A1];
  564|  4.28M|                candidate_cnt++;
  565|  4.28M|                if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (565:20): [True: 4.11M, False: 168k]
  ------------------
  566|  4.11M|                {
  567|  4.11M|                    ps_pu[0].mv = as_pu_merge_list[candidate_cnt - 1].mv;
  568|  4.11M|                    ps_pu[0].b2_pred_mode = as_pu_merge_list[candidate_cnt - 1].b2_pred_mode;
  569|  4.11M|                    return;
  570|  4.11M|                }
  571|  4.28M|            }
  572|  5.01M|        }
  573|  5.10M|    }
  574|       |
  575|       |    /* B1 */
  576|   991k|    nbr_x = part_pos_x + part_wd - 1;
  577|   991k|    nbr_y = part_pos_y - 1;
  578|       |
  579|   991k|    nbr_pu_idx = *(pu4_top_pu_idx + ((nbr_x - part_pos_x) >> 2));
  580|   991k|    ps_nbr_pu[NBR_B1] = ps_mv_ctxt->ps_pic_pu + nbr_pu_idx;
  581|       |
  582|   991k|    nbr_avail[NBR_B1] = t_avail
  ------------------
  |  Branch (582:25): [True: 1.08M, False: 18.4E]
  ------------------
  583|  1.08M|                    && (!ps_nbr_pu[NBR_B1]->b1_intra_flag); /* B1 */
  ------------------
  |  Branch (583:24): [True: 1.07M, False: 2.73k]
  ------------------
  584|       |
  585|   991k|    {
  586|   991k|        WORD32 avail_flag;
  587|   991k|        avail_flag = nbr_avail[NBR_B1];
  588|       |
  589|   991k|        if(nbr_avail[NBR_B1])
  ------------------
  |  Branch (589:12): [True: 1.07M, False: 18.4E]
  ------------------
  590|  1.07M|        {
  591|       |            /* if at same merge level */
  592|  1.07M|            if(pos_x_merge_shift == (nbr_x >> merge_shift) &&
  ------------------
  |  Branch (592:16): [True: 787k, False: 291k]
  ------------------
  593|  1.07M|               (pos_y_merge_shift == (nbr_y >> merge_shift)))
  ------------------
  |  Branch (593:16): [True: 377k, False: 410k]
  ------------------
  594|   377k|            {
  595|   377k|                nbr_avail[NBR_B1] = 0;
  596|   377k|                avail_flag = 0;
  597|   377k|            }
  598|       |
  599|       |            /* if single MCL is 0 , second part of 2 part in CU */
  600|   702k|            else if((single_mcl_flag == 0) && (part_idx == 1) &&
  ------------------
  |  Branch (600:21): [True: 702k, False: 409]
  |  Branch (600:47): [True: 38.9k, False: 663k]
  ------------------
  601|   702k|                            ((part_mode == PART_2NxN) || (part_mode == PART_2NxnU) ||
  ------------------
  |  Branch (601:30): [True: 7.45k, False: 31.5k]
  |  Branch (601:58): [True: 394, False: 31.1k]
  ------------------
  602|  38.9k|                                            (part_mode == PART_2NxnD)))
  ------------------
  |  Branch (602:45): [True: 439, False: 30.6k]
  ------------------
  603|  8.31k|            {
  604|  8.31k|                nbr_avail[NBR_B1] = 0;
  605|  8.31k|                avail_flag = 0;
  606|  8.31k|            }
  607|       |
  608|   694k|            else if(nbr_avail[NBR_A1])
  ------------------
  |  Branch (608:21): [True: 158k, False: 535k]
  ------------------
  609|   158k|            {
  610|   158k|                avail_flag = !ihevcd_compare_pu_t(ps_nbr_pu[NBR_A1], ps_nbr_pu[NBR_B1]);
  611|   158k|            }
  612|       |
  613|  1.07M|            sum_avail_a0_a1_b0_b1 += avail_flag;
  614|  1.07M|            if(avail_flag)
  ------------------
  |  Branch (614:16): [True: 650k, False: 429k]
  ------------------
  615|   650k|            {
  616|   650k|                as_pu_merge_list[candidate_cnt] = *ps_nbr_pu[NBR_B1];
  617|   650k|                candidate_cnt++;
  618|   650k|                if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (618:20): [True: 578k, False: 72.0k]
  ------------------
  619|   578k|                {
  620|   578k|                    ps_pu[0].mv = as_pu_merge_list[candidate_cnt - 1].mv;
  621|   578k|                    ps_pu[0].b2_pred_mode = as_pu_merge_list[candidate_cnt - 1].b2_pred_mode;
  622|   578k|                    return;
  623|   578k|                }
  624|   650k|            }
  625|  1.07M|        }
  626|   991k|    }
  627|       |    /* B0 */
  628|   413k|    nbr_x = part_pos_x + part_wd;
  629|   413k|    nbr_y = part_pos_y - 1;
  630|       |
  631|   413k|    nbr_pu_idx = *(pu4_top_pu_idx + ((nbr_x - part_pos_x) >> 2));
  632|   413k|    ps_nbr_pu[NBR_B0] = ps_mv_ctxt->ps_pic_pu + nbr_pu_idx;
  633|       |
  634|   413k|    nbr_avail[NBR_B0] = tr_avail
  ------------------
  |  Branch (634:25): [True: 291k, False: 121k]
  ------------------
  635|   413k|                    && (!ps_nbr_pu[NBR_B0]->b1_intra_flag); /* B0 */
  ------------------
  |  Branch (635:24): [True: 289k, False: 1.58k]
  ------------------
  636|       |
  637|   413k|    {
  638|   413k|        WORD32 avail_flag;
  639|   413k|        avail_flag = nbr_avail[NBR_B0];
  640|       |
  641|       |        /* if at same merge level */
  642|   413k|        if(nbr_avail[NBR_B0])
  ------------------
  |  Branch (642:12): [True: 289k, False: 123k]
  ------------------
  643|   289k|        {
  644|   289k|            if(pos_x_merge_shift == (nbr_x >> merge_shift) &&
  ------------------
  |  Branch (644:16): [True: 38.0k, False: 251k]
  ------------------
  645|   289k|               (pos_y_merge_shift == (nbr_y >> merge_shift)))
  ------------------
  |  Branch (645:16): [True: 38.0k, False: 13]
  ------------------
  646|  38.0k|            {
  647|  38.0k|                nbr_avail[NBR_B0] = 0;
  648|  38.0k|                avail_flag = 0;
  649|  38.0k|            }
  650|   251k|            else if(nbr_avail[NBR_B1])
  ------------------
  |  Branch (650:21): [True: 82.2k, False: 169k]
  ------------------
  651|  82.2k|            {
  652|  82.2k|                avail_flag = !ihevcd_compare_pu_t(ps_nbr_pu[NBR_B1], ps_nbr_pu[NBR_B0]);
  653|  82.2k|            }
  654|       |
  655|   289k|            sum_avail_a0_a1_b0_b1 += avail_flag;
  656|   289k|            if(avail_flag)
  ------------------
  |  Branch (656:16): [True: 215k, False: 74.3k]
  ------------------
  657|   215k|            {
  658|   215k|                as_pu_merge_list[candidate_cnt] = *ps_nbr_pu[NBR_B0];
  659|   215k|                candidate_cnt++;
  660|   215k|                if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (660:20): [True: 192k, False: 22.9k]
  ------------------
  661|   192k|                {
  662|   192k|                    ps_pu[0].mv = as_pu_merge_list[candidate_cnt - 1].mv;
  663|   192k|                    ps_pu[0].b2_pred_mode = as_pu_merge_list[candidate_cnt - 1].b2_pred_mode;
  664|   192k|                    return;
  665|   192k|                }
  666|   215k|            }
  667|   289k|        }
  668|   413k|    }
  669|       |    /* A0 */
  670|   220k|    nbr_x = part_pos_x - 1;
  671|   220k|    nbr_y = part_pos_y + part_ht; /* A0 */
  672|       |
  673|   220k|    nbr_pu_idx = *(pu4_left_pu_idx + ((nbr_y - part_pos_y) >> 2) * left_nbr_4x4_strd);
  674|   220k|    ps_nbr_pu[NBR_A0] = ps_mv_ctxt->ps_pic_pu + nbr_pu_idx;
  675|       |
  676|   220k|    nbr_avail[NBR_A0] = lb_avail
  ------------------
  |  Branch (676:25): [True: 29.3k, False: 191k]
  ------------------
  677|   220k|                    && (!ps_nbr_pu[NBR_A0]->b1_intra_flag); /* A0 */
  ------------------
  |  Branch (677:24): [True: 28.9k, False: 483]
  ------------------
  678|   220k|    {
  679|   220k|        WORD32 avail_flag;
  680|   220k|        avail_flag = nbr_avail[NBR_A0];
  681|       |
  682|   220k|        if(nbr_avail[NBR_A0])
  ------------------
  |  Branch (682:12): [True: 28.9k, False: 191k]
  ------------------
  683|  28.9k|        {
  684|       |            /* if at same merge level */
  685|  28.9k|            if(pos_x_merge_shift == (nbr_x >> merge_shift) &&
  ------------------
  |  Branch (685:16): [True: 0, False: 28.9k]
  ------------------
  686|  28.9k|                            (pos_y_merge_shift == (nbr_y >> merge_shift)))
  ------------------
  |  Branch (686:29): [True: 0, False: 0]
  ------------------
  687|      0|            {
  688|      0|                nbr_avail[NBR_A0] = 0;
  689|      0|                avail_flag = 0;
  690|      0|            }
  691|  28.9k|            else if(nbr_avail[NBR_A1])
  ------------------
  |  Branch (691:21): [True: 28.6k, False: 306]
  ------------------
  692|  28.6k|            {
  693|  28.6k|                avail_flag = !ihevcd_compare_pu_t(ps_nbr_pu[NBR_A1], ps_nbr_pu[NBR_A0]);
  694|  28.6k|            }
  695|       |
  696|  28.9k|            sum_avail_a0_a1_b0_b1 += avail_flag;
  697|  28.9k|            if(avail_flag)
  ------------------
  |  Branch (697:16): [True: 12.9k, False: 15.9k]
  ------------------
  698|  12.9k|            {
  699|  12.9k|                as_pu_merge_list[candidate_cnt] = *ps_nbr_pu[NBR_A0];
  700|  12.9k|                candidate_cnt++;
  701|  12.9k|                if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (701:20): [True: 6.30k, False: 6.64k]
  ------------------
  702|  6.30k|                {
  703|  6.30k|                    ps_pu[0].mv = as_pu_merge_list[candidate_cnt - 1].mv;
  704|  6.30k|                    ps_pu[0].b2_pred_mode = as_pu_merge_list[candidate_cnt - 1].b2_pred_mode;
  705|  6.30k|                    return;
  706|  6.30k|                }
  707|  12.9k|            }
  708|  28.9k|        }
  709|   220k|    }
  710|       |    /* B2 */
  711|       |
  712|   214k|    nbr_x = part_pos_x - 1;
  713|   214k|    nbr_y = part_pos_y - 1; /* B2 */
  714|       |
  715|   214k|    nbr_pu_idx = *(pu4_top_pu_idx + ((nbr_x - part_pos_x) >> 2));
  716|   214k|    ps_nbr_pu[NBR_B2] = ps_mv_ctxt->ps_pic_pu + nbr_pu_idx;
  717|       |
  718|   214k|    nbr_avail[NBR_B2] = tl_avail
  ------------------
  |  Branch (718:25): [True: 270k, False: 18.4E]
  ------------------
  719|   270k|                    && (!ps_nbr_pu[NBR_B2]->b1_intra_flag); /* B2 */
  ------------------
  |  Branch (719:24): [True: 268k, False: 1.67k]
  ------------------
  720|       |
  721|   214k|    {
  722|   214k|        WORD32 avail_flag;
  723|   214k|        avail_flag = nbr_avail[NBR_B2];
  724|       |
  725|   214k|        if(nbr_avail[NBR_B2])
  ------------------
  |  Branch (725:12): [True: 268k, False: 18.4E]
  ------------------
  726|   268k|        {
  727|       |            /* if at same merge level */
  728|   268k|            if(pos_x_merge_shift == (nbr_x >> merge_shift) &&
  ------------------
  |  Branch (728:16): [True: 175k, False: 93.5k]
  ------------------
  729|   268k|                            (pos_y_merge_shift == (nbr_y >> merge_shift)))
  ------------------
  |  Branch (729:29): [True: 175k, False: 10]
  ------------------
  730|   175k|            {
  731|   175k|                nbr_avail[NBR_B2] = 0;
  732|   175k|                avail_flag = 0;
  733|   175k|            }
  734|  93.6k|            else if(4 == sum_avail_a0_a1_b0_b1)
  ------------------
  |  Branch (734:21): [True: 1.38k, False: 92.2k]
  ------------------
  735|  1.38k|            {
  736|  1.38k|                avail_flag = 0;
  737|  1.38k|            }
  738|       |
  739|  92.2k|            else
  740|  92.2k|            {
  741|  92.2k|                if(nbr_avail[NBR_A1])
  ------------------
  |  Branch (741:20): [True: 82.7k, False: 9.49k]
  ------------------
  742|  82.7k|                {
  743|  82.7k|                    avail_flag = !ihevcd_compare_pu_t(ps_nbr_pu[NBR_A1], ps_nbr_pu[NBR_B2]);
  744|  82.7k|                }
  745|       |
  746|  92.2k|                if(avail_flag && nbr_avail[NBR_B1])
  ------------------
  |  Branch (746:20): [True: 56.1k, False: 36.0k]
  |  Branch (746:34): [True: 53.9k, False: 2.27k]
  ------------------
  747|  53.9k|                {
  748|  53.9k|                    avail_flag = !ihevcd_compare_pu_t(ps_nbr_pu[NBR_B1], ps_nbr_pu[NBR_B2]);
  749|  53.9k|                }
  750|  92.2k|            }
  751|       |
  752|   268k|            if(avail_flag)
  ------------------
  |  Branch (752:16): [True: 37.1k, False: 231k]
  ------------------
  753|  37.1k|            {
  754|  37.1k|                as_pu_merge_list[candidate_cnt] = *ps_nbr_pu[NBR_B2];
  755|  37.1k|                candidate_cnt++;
  756|  37.1k|                if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (756:20): [True: 19.7k, False: 17.4k]
  ------------------
  757|  19.7k|                {
  758|  19.7k|                    ps_pu[0].mv = as_pu_merge_list[candidate_cnt - 1].mv;
  759|  19.7k|                    ps_pu[0].b2_pred_mode = as_pu_merge_list[candidate_cnt - 1].b2_pred_mode;
  760|  19.7k|                    return;
  761|  19.7k|                }
  762|  37.1k|            }
  763|   268k|        }
  764|   214k|    }
  765|       |
  766|       |    /***********************************************************/
  767|       |    /*          Collocated MV prediction                       */
  768|       |    /***********************************************************/
  769|   194k|    {
  770|   194k|        mv_t as_mv_col[2];
  771|   194k|        WORD32 avail_col_flag[2] = { 0 }, x_col, y_col;
  772|   194k|        WORD32 avail_col_l0, avail_col_l1;
  773|       |//        ihevcd_collocated_mvp(ps_mv_ctxt,ps_pu,part_pos_x,part_pos_y,part_wd,part_ht,as_mv_col,avail_col_flag,0);
  774|       |
  775|       |        /* Checking Collocated MV availability at Bottom right of PU*/
  776|   194k|        x_col = part_pos_x + part_wd;
  777|   194k|        y_col = part_pos_y + part_ht;
  778|   194k|        ihevcd_collocated_mvp(ps_mv_ctxt, ps_pu, as_mv_col, avail_col_flag, 0, x_col, y_col);
  779|       |
  780|   194k|        avail_col_l0 = avail_col_flag[0];
  781|   194k|        avail_col_l1 = avail_col_flag[1];
  782|       |
  783|   194k|        if(avail_col_l0 || avail_col_l1)
  ------------------
  |  Branch (783:12): [True: 38.6k, False: 156k]
  |  Branch (783:28): [True: 0, False: 156k]
  ------------------
  784|   139k|        {
  785|   139k|            as_pu_merge_list[candidate_cnt].mv.s_l0_mv = as_mv_col[0];
  786|   139k|            as_pu_merge_list[candidate_cnt].mv.s_l1_mv = as_mv_col[1];
  787|   139k|        }
  788|       |
  789|   194k|        if(avail_col_l0 == 0 || avail_col_l1 == 0)
  ------------------
  |  Branch (789:12): [True: 54.5k, False: 140k]
  |  Branch (789:33): [True: 138, False: 139k]
  ------------------
  790|   156k|        {
  791|       |            /* Checking Collocated MV availability at Center of PU */
  792|   156k|            x_col = part_pos_x + (part_wd >> 1);
  793|   156k|            y_col = part_pos_y + (part_ht >> 1);
  794|   156k|            ihevcd_collocated_mvp(ps_mv_ctxt, ps_pu, as_mv_col, avail_col_flag, 0, x_col, y_col);
  795|       |
  796|   156k|            if(avail_col_l0 == 0)
  ------------------
  |  Branch (796:16): [True: 155k, False: 160]
  ------------------
  797|   155k|            {
  798|   155k|                as_pu_merge_list[candidate_cnt].mv.s_l0_mv = as_mv_col[0];
  799|   155k|            }
  800|   156k|            if(avail_col_l1 == 0)
  ------------------
  |  Branch (800:16): [True: 156k, False: 0]
  ------------------
  801|   156k|            {
  802|   156k|                as_pu_merge_list[candidate_cnt].mv.s_l1_mv = as_mv_col[1];
  803|   156k|            }
  804|       |
  805|   156k|            avail_col_l0 |= avail_col_flag[0];
  806|   156k|            avail_col_l1 |= avail_col_flag[1];
  807|   156k|        }
  808|       |
  809|   194k|        as_pu_merge_list[candidate_cnt].mv.i1_l0_ref_idx = 0;
  810|   194k|        as_pu_merge_list[candidate_cnt].mv.i1_l1_ref_idx = 0;
  811|  18.4E|        as_pu_merge_list[candidate_cnt].b2_pred_mode = avail_col_l0 ? (avail_col_l1 ? PRED_BI : PRED_L0) : PRED_L1;
  ------------------
  |  Branch (811:56): [True: 253k, False: 18.4E]
  |  Branch (811:72): [True: 253k, False: 173]
  ------------------
  812|       |
  813|   194k|        candidate_cnt += (avail_col_l0 || avail_col_l1);
  ------------------
  |  Branch (813:27): [True: 151k, False: 42.7k]
  |  Branch (813:43): [True: 18.4E, False: 42.7k]
  ------------------
  814|       |
  815|   194k|        if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (815:12): [True: 231k, False: 18.4E]
  ------------------
  816|   231k|        {
  817|   231k|            ps_pu[0].mv = as_pu_merge_list[candidate_cnt - 1].mv;
  818|   231k|            ps_pu[0].b2_pred_mode = as_pu_merge_list[candidate_cnt - 1].b2_pred_mode;
  819|   231k|            return;
  820|   231k|        }
  821|       |
  822|   194k|    }
  823|  18.4E|    {
  824|  18.4E|        WORD32 slice_type;
  825|       |
  826|  18.4E|        slice_type = ps_slice_hdr->i1_slice_type;
  827|       |        /* Colocated mv has to be added to list, if available */
  828|       |
  829|       |        /******************************************************/
  830|       |        /*      Bi pred merge candidates                      */
  831|       |        /******************************************************/
  832|  18.4E|        if(slice_type == BSLICE)
  ------------------
  |  Branch (832:12): [True: 62.7k, False: 18.4E]
  ------------------
  833|  62.7k|        {
  834|  62.7k|            if((candidate_cnt > 1) && (candidate_cnt < MAX_NUM_MERGE_CAND))
  ------------------
  |  |  463|  40.7k|#define MAX_NUM_MERGE_CAND 5
  ------------------
  |  Branch (834:16): [True: 40.7k, False: 21.9k]
  |  Branch (834:39): [True: 40.7k, False: 0]
  ------------------
  835|  40.7k|            {
  836|  40.7k|                WORD32 priority_list0[12] =
  837|  40.7k|                    { 0, 1, 0, 2, 1, 2, 0, 3, 1, 3, 2, 3 };
  838|  40.7k|                WORD32 priority_list1[12] =
  839|  40.7k|                    { 1, 0, 2, 0, 2, 1, 3, 0, 3, 1, 3, 2 };
  840|  40.7k|                WORD32 l0_cand, l1_cand;
  841|  40.7k|                WORD32 bi_pred_idx = 0;
  842|  40.7k|                WORD32 total_bi_pred_cand =
  843|  40.7k|                                candidate_cnt * (candidate_cnt - 1);
  844|       |
  845|   103k|                while(bi_pred_idx < total_bi_pred_cand)
  ------------------
  |  Branch (845:23): [True: 103k, False: 17]
  ------------------
  846|   103k|                {
  847|   103k|                    l0_cand = priority_list0[bi_pred_idx];
  848|   103k|                    l1_cand = priority_list1[bi_pred_idx];
  849|       |
  850|   103k|                    if((as_pu_merge_list[l0_cand].b2_pred_mode != PRED_L1)
  ------------------
  |  Branch (850:24): [True: 92.0k, False: 11.6k]
  ------------------
  851|   103k|                                    && (as_pu_merge_list[l1_cand].b2_pred_mode
  ------------------
  |  Branch (851:40): [True: 65.4k, False: 26.5k]
  ------------------
  852|  92.0k|                                                    != PRED_L0))
  853|  65.4k|                    {
  854|  65.4k|                        WORD8 i1_l0_ref_idx, i1_l1_ref_idx;
  855|  65.4k|                        mv_t s_l0_mv, s_l1_mv;
  856|  65.4k|                        pic_buf_t *ps_pic_buf_l0, *ps_pic_buf_l1;
  857|       |
  858|  65.4k|                        i1_l0_ref_idx = as_pu_merge_list[l0_cand].mv.i1_l0_ref_idx;
  859|  65.4k|                        i1_l1_ref_idx = as_pu_merge_list[l1_cand].mv.i1_l1_ref_idx;
  860|  65.4k|                        ps_pic_buf_l0 = (pic_buf_t *)((ps_ref_list[0][i1_l0_ref_idx].pv_pic_buf));
  861|  65.4k|                        ps_pic_buf_l1 = (pic_buf_t *)((ps_ref_list[1][i1_l1_ref_idx].pv_pic_buf));
  862|  65.4k|                        s_l0_mv = as_pu_merge_list[l0_cand].mv.s_l0_mv;
  863|  65.4k|                        s_l1_mv = as_pu_merge_list[l1_cand].mv.s_l1_mv;
  864|       |
  865|  65.4k|                        if((ps_pic_buf_l0->i4_abs_poc != ps_pic_buf_l1->i4_abs_poc)
  ------------------
  |  Branch (865:28): [True: 13.0k, False: 52.4k]
  ------------------
  866|  65.4k|                                        || (s_l0_mv.i2_mvx != s_l1_mv.i2_mvx)
  ------------------
  |  Branch (866:44): [True: 16.6k, False: 35.8k]
  ------------------
  867|  65.4k|                                        || (s_l0_mv.i2_mvy != s_l1_mv.i2_mvy))
  ------------------
  |  Branch (867:44): [True: 5.61k, False: 30.2k]
  ------------------
  868|  35.3k|                        {
  869|  35.3k|                            candidate_cnt++;
  870|  35.3k|                            if(candidate_cnt == max_num_merge_cand)
  ------------------
  |  Branch (870:32): [True: 22.2k, False: 13.0k]
  ------------------
  871|  22.2k|                            {
  872|  22.2k|                                ps_pu[0].mv.s_l0_mv = s_l0_mv;
  873|  22.2k|                                ps_pu[0].mv.s_l1_mv = s_l1_mv;
  874|  22.2k|                                ps_pu[0].mv.i1_l0_ref_idx = i1_l0_ref_idx;
  875|  22.2k|                                ps_pu[0].mv.i1_l1_ref_idx = i1_l1_ref_idx;
  876|  22.2k|                                ps_pu[0].b2_pred_mode = PRED_BI;
  877|  22.2k|                                return;
  878|  22.2k|                            }
  879|  35.3k|                        }
  880|  65.4k|                    }
  881|       |
  882|  81.4k|                    bi_pred_idx++;
  883|       |
  884|  81.4k|                    if((bi_pred_idx == total_bi_pred_cand)
  ------------------
  |  Branch (884:24): [True: 18.3k, False: 63.0k]
  ------------------
  885|  81.4k|                                    || (candidate_cnt == MAX_NUM_MERGE_CAND))
  ------------------
  |  |  463|  63.0k|#define MAX_NUM_MERGE_CAND 5
  ------------------
  |  Branch (885:40): [True: 0, False: 63.0k]
  ------------------
  886|  18.5k|                    {
  887|  18.5k|                        break;
  888|  18.5k|                    }
  889|  81.4k|                }
  890|  40.7k|            }
  891|  62.7k|        }
  892|       |
  893|       |        /******************************************************/
  894|       |        /*      Zero merge candidates                         */
  895|       |        /******************************************************/
  896|       |//        if(candidate_cnt < max_num_merge_cand)
  897|  18.4E|        {
  898|  18.4E|            WORD32 num_ref_idx;
  899|  18.4E|            WORD32 zero_idx;
  900|       |
  901|  18.4E|            zero_idx = max_num_merge_cand - candidate_cnt - 1;
  902|       |
  903|  18.4E|            if(slice_type == PSLICE)
  ------------------
  |  Branch (903:16): [True: 1.87k, False: 18.4E]
  ------------------
  904|  1.87k|                num_ref_idx = ps_slice_hdr->i1_num_ref_idx_l0_active;
  905|  18.4E|            else
  906|       |                /* Slice type B */
  907|  18.4E|                num_ref_idx = MIN(ps_slice_hdr->i1_num_ref_idx_l0_active, ps_slice_hdr->i1_num_ref_idx_l1_active);
  ------------------
  |  |   43|  18.4E|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 846, False: 18.4E]
  |  |  ------------------
  ------------------
  908|       |
  909|  18.4E|            if(zero_idx >= num_ref_idx)
  ------------------
  |  Branch (909:16): [True: 6.31k, False: 18.4E]
  ------------------
  910|  6.31k|                zero_idx = 0;
  911|       |
  912|  18.4E|            ps_pu[0].mv.i1_l0_ref_idx = zero_idx;
  913|  18.4E|            if(slice_type == PSLICE)
  ------------------
  |  Branch (913:16): [True: 1.87k, False: 18.4E]
  ------------------
  914|  1.87k|            {
  915|  1.87k|                ps_pu[0].mv.i1_l1_ref_idx = 0;
  916|  1.87k|                ps_pu[0].b2_pred_mode = PRED_L0;
  917|  1.87k|            }
  918|  18.4E|            else /* Slice type B */
  919|  18.4E|            {
  920|  18.4E|                ps_pu[0].mv.i1_l1_ref_idx = zero_idx;
  921|  18.4E|                ps_pu[0].b2_pred_mode = PRED_BI;
  922|  18.4E|            }
  923|       |
  924|  18.4E|            ps_pu[0].mv.s_l0_mv.i2_mvx = 0;
  925|  18.4E|            ps_pu[0].mv.s_l0_mv.i2_mvy = 0;
  926|  18.4E|            ps_pu[0].mv.s_l1_mv.i2_mvx = 0;
  927|  18.4E|            ps_pu[0].mv.s_l1_mv.i2_mvy = 0;
  928|       |
  929|  18.4E|            candidate_cnt++;
  930|  18.4E|        }
  931|  18.4E|    }
  932|       |
  933|      0|    return;
  934|  18.4E|}

ihevcd_scale_mv:
  107|  23.4k|{
  108|  23.4k|    WORD32 td, tb, tx;
  109|  23.4k|    WORD32 dist_scale_factor;
  110|  23.4k|    WORD32 mvx, mvy;
  111|       |
  112|  23.4k|    td = CLIP_S8(cur_poc - nbr_ref_poc);
  ------------------
  |  |   41|  23.4k|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|  23.4k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.57k, False: 21.8k]
  |  |  |  |  |  Branch (40:53): [True: 858, False: 21.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|  23.4k|    tb = CLIP_S8(cur_poc - cur_ref_poc);
  ------------------
  |  |   41|  23.4k|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|  23.4k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 1.06k, False: 22.4k]
  |  |  |  |  |  Branch (40:53): [True: 768, False: 21.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|       |
  115|  23.4k|    if(0 != td)
  ------------------
  |  Branch (115:8): [True: 23.4k, False: 9]
  ------------------
  116|  23.4k|    {
  117|  23.4k|        tx = (16384 + (abs(td) >> 1)) / td;
  118|       |
  119|  23.4k|        dist_scale_factor = (tb * tx + 32) >> 6;
  120|  23.4k|        dist_scale_factor = CLIP3(dist_scale_factor, -4096, 4095);
  ------------------
  |  |   40|  23.4k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 733, False: 22.7k]
  |  |  |  Branch (40:53): [True: 720, False: 22.0k]
  |  |  ------------------
  ------------------
  121|       |
  122|  23.4k|        mvx = ps_mv->i2_mvx;
  123|  23.4k|        mvy = ps_mv->i2_mvy;
  124|       |
  125|  23.4k|        mvx = SIGN(dist_scale_factor * mvx)
  ------------------
  |  |   44|  23.4k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 17.3k, False: 6.09k]
  |  |  |  Branch (44:34): [True: 6.00k, False: 11.3k]
  |  |  ------------------
  ------------------
  126|  23.4k|                        * ((abs(dist_scale_factor * mvx) + 127) >> 8);
  127|  23.4k|        mvy = SIGN(dist_scale_factor * mvy)
  ------------------
  |  |   44|  23.4k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 17.8k, False: 5.62k]
  |  |  |  Branch (44:34): [True: 6.14k, False: 11.6k]
  |  |  ------------------
  ------------------
  128|  23.4k|                        * ((abs(dist_scale_factor * mvy) + 127) >> 8);
  129|       |
  130|  23.4k|        ps_mv->i2_mvx = CLIP_S16(mvx);
  ------------------
  |  |   53|  23.4k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  23.4k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 184, False: 23.2k]
  |  |  |  |  |  Branch (40:53): [True: 302, False: 22.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|  23.4k|        ps_mv->i2_mvy = CLIP_S16(mvy);
  ------------------
  |  |   53|  23.4k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  23.4k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 23.4k]
  |  |  |  |  |  Branch (40:53): [True: 55, False: 23.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|  23.4k|    }
  133|  23.4k|}
ihevcd_scale_collocated_mv:
  169|   110k|{
  170|   110k|    WORD32 td, tb, tx;
  171|   110k|    WORD32 dist_scale_factor;
  172|   110k|    WORD32 mvx, mvy;
  173|       |
  174|   110k|    td = CLIP_S8(col_poc - col_ref_poc);
  ------------------
  |  |   41|   110k|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|   110k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 37.1k, False: 73.4k]
  |  |  |  |  |  Branch (40:53): [True: 2.49k, False: 70.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|   110k|    tb = CLIP_S8(cur_poc - cur_ref_poc);
  ------------------
  |  |   41|   110k|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|   110k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 803, False: 109k]
  |  |  |  |  |  Branch (40:53): [True: 1.37k, False: 108k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|       |
  177|   110k|    tx = (16384 + (abs(td) >> 1)) / td;
  178|       |
  179|   110k|    dist_scale_factor = (tb * tx + 32) >> 6;
  180|   110k|    dist_scale_factor = CLIP3(dist_scale_factor, -4096, 4095);
  ------------------
  |  |   40|   110k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 110k]
  |  |  |  Branch (40:53): [True: 100, False: 110k]
  |  |  ------------------
  ------------------
  181|       |
  182|   110k|    mvx = ps_mv->i2_mvx;
  183|   110k|    mvy = ps_mv->i2_mvy;
  184|       |
  185|   110k|    mvx = SIGN(dist_scale_factor * mvx)
  ------------------
  |  |   44|   110k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 89.2k, False: 21.3k]
  |  |  |  Branch (44:34): [True: 20.2k, False: 69.0k]
  |  |  ------------------
  ------------------
  186|   110k|                    * ((abs(dist_scale_factor * mvx) + 127) >> 8);
  187|   110k|    mvy = SIGN(dist_scale_factor * mvy)
  ------------------
  |  |   44|   110k|#define SIGN(x)     ((x) >= 0 ? ((x)>0 ? 1: 0) : -1)
  |  |  ------------------
  |  |  |  Branch (44:22): [True: 89.8k, False: 20.8k]
  |  |  |  Branch (44:34): [True: 19.1k, False: 70.6k]
  |  |  ------------------
  ------------------
  188|   110k|                    * ((abs(dist_scale_factor * mvy) + 127) >> 8);
  189|       |
  190|   110k|    ps_mv->i2_mvx = CLIP_S16(mvx);
  ------------------
  |  |   53|   110k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   110k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 110k]
  |  |  |  |  |  Branch (40:53): [True: 734, False: 109k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|   110k|    ps_mv->i2_mvy = CLIP_S16(mvy);
  ------------------
  |  |   53|   110k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|   110k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 110k]
  |  |  |  |  |  Branch (40:53): [True: 1.02k, False: 109k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|   110k|}
GET_MV_NBR_ST:
  226|   258k|{
  227|   258k|    WORD32 i, nbr_pred_lx;
  228|   258k|    pic_buf_t *ps_nbr_pic_buf_lx;
  229|       |    /* Short Term */
  230|       |    /* L0 */
  231|   258k|    if(0 == lx)
  ------------------
  |  Branch (231:8): [True: 187k, False: 71.5k]
  ------------------
  232|   187k|    {
  233|   212k|        for(i = 0; i < num_nbrs; i++)
  ------------------
  |  Branch (233:20): [True: 188k, False: 23.9k]
  ------------------
  234|   188k|        {
  235|   188k|            nbr_pred_lx = (PRED_L1 != aps_nbr_pu[i]->b2_pred_mode);
  236|   188k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[0][aps_nbr_pu[i]->mv.i1_l0_ref_idx].pv_pic_buf));
  237|   188k|            CHECK_NBR_MV_ST(pi4_avail_flag, ps_cur_pic_buf_lx->i4_abs_poc, nbr_pred_lx,
  ------------------
  |  |  195|   188k|                        ps_mv, ps_nbr_mv )                                                  \
  |  |  196|   188k|{                                                                                           \
  |  |  197|   188k|    if((u1_nbr_pred_flag) && (cur_ref_poc == nbr_ref_poc))                                  \
  |  |  ------------------
  |  |  |  Branch (197:8): [True: 155k, False: 33.1k]
  |  |  |  Branch (197:30): [True: 140k, False: 15.4k]
  |  |  ------------------
  |  |  198|   188k|    {                                                                                       \
  |  |  199|   140k|        *pi4_avail_flag = 1;                                                                \
  |  |  200|   140k|        *ps_mv = *ps_nbr_mv;                                                                \
  |  |  201|   140k|        break ;                                                                             \
  |  |  202|   140k|    }                                                                                       \
  |  |  203|   188k|}
  ------------------
  238|   188k|                            ps_nbr_pic_buf_lx->i4_abs_poc, ps_mv, &aps_nbr_pu[i]->mv.s_l0_mv);
  239|  48.5k|            nbr_pred_lx = (PRED_L0 != aps_nbr_pu[i]->b2_pred_mode);
  240|       |
  241|  48.5k|            nbr_pred_lx = (PRED_L0 != aps_nbr_pu[i]->b2_pred_mode);
  242|  48.5k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[1][aps_nbr_pu[i]->mv.i1_l1_ref_idx].pv_pic_buf));
  243|  48.5k|            CHECK_NBR_MV_ST(pi4_avail_flag, ps_cur_pic_buf_lx->i4_abs_poc, nbr_pred_lx,
  ------------------
  |  |  195|  48.5k|                        ps_mv, ps_nbr_mv )                                                  \
  |  |  196|  48.5k|{                                                                                           \
  |  |  197|  48.5k|    if((u1_nbr_pred_flag) && (cur_ref_poc == nbr_ref_poc))                                  \
  |  |  ------------------
  |  |  |  Branch (197:8): [True: 40.2k, False: 8.35k]
  |  |  |  Branch (197:30): [True: 23.1k, False: 17.1k]
  |  |  ------------------
  |  |  198|  48.5k|    {                                                                                       \
  |  |  199|  23.0k|        *pi4_avail_flag = 1;                                                                \
  |  |  200|  23.0k|        *ps_mv = *ps_nbr_mv;                                                                \
  |  |  201|  23.0k|        break ;                                                                             \
  |  |  202|  23.0k|    }                                                                                       \
  |  |  203|  48.5k|}
  ------------------
  244|  48.5k|                            ps_nbr_pic_buf_lx->i4_abs_poc, ps_mv, &aps_nbr_pu[i]->mv.s_l1_mv);
  245|  25.4k|        }
  246|   187k|    }
  247|       |    /* L1 */
  248|  71.5k|    else
  249|  71.5k|    {
  250|  87.0k|        for(i = 0; i < num_nbrs; i++)
  ------------------
  |  Branch (250:20): [True: 73.6k, False: 13.4k]
  ------------------
  251|  73.6k|        {
  252|  73.6k|            nbr_pred_lx = (PRED_L0 != aps_nbr_pu[i]->b2_pred_mode);
  253|  73.6k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[1][aps_nbr_pu[i]->mv.i1_l1_ref_idx].pv_pic_buf));
  254|  73.6k|            CHECK_NBR_MV_ST(pi4_avail_flag, ps_cur_pic_buf_lx->i4_abs_poc, nbr_pred_lx,
  ------------------
  |  |  195|  73.6k|                        ps_mv, ps_nbr_mv )                                                  \
  |  |  196|  73.6k|{                                                                                           \
  |  |  197|  73.6k|    if((u1_nbr_pred_flag) && (cur_ref_poc == nbr_ref_poc))                                  \
  |  |  ------------------
  |  |  |  Branch (197:8): [True: 49.1k, False: 24.4k]
  |  |  |  Branch (197:30): [True: 40.9k, False: 8.20k]
  |  |  ------------------
  |  |  198|  73.6k|    {                                                                                       \
  |  |  199|  40.9k|        *pi4_avail_flag = 1;                                                                \
  |  |  200|  40.9k|        *ps_mv = *ps_nbr_mv;                                                                \
  |  |  201|  40.9k|        break ;                                                                             \
  |  |  202|  40.9k|    }                                                                                       \
  |  |  203|  73.6k|}
  ------------------
  255|  73.6k|                            ps_nbr_pic_buf_lx->i4_abs_poc, ps_mv, &aps_nbr_pu[i]->mv.s_l1_mv);
  256|       |
  257|  32.6k|            nbr_pred_lx = (PRED_L1 != aps_nbr_pu[i]->b2_pred_mode);
  258|  32.6k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[0][aps_nbr_pu[i]->mv.i1_l0_ref_idx].pv_pic_buf));
  259|  32.6k|            CHECK_NBR_MV_ST(pi4_avail_flag, ps_cur_pic_buf_lx->i4_abs_poc, nbr_pred_lx,
  ------------------
  |  |  195|  32.6k|                        ps_mv, ps_nbr_mv )                                                  \
  |  |  196|  32.6k|{                                                                                           \
  |  |  197|  32.6k|    if((u1_nbr_pred_flag) && (cur_ref_poc == nbr_ref_poc))                                  \
  |  |  ------------------
  |  |  |  Branch (197:8): [True: 29.4k, False: 3.26k]
  |  |  |  Branch (197:30): [True: 17.1k, False: 12.2k]
  |  |  ------------------
  |  |  198|  32.6k|    {                                                                                       \
  |  |  199|  17.1k|        *pi4_avail_flag = 1;                                                                \
  |  |  200|  17.1k|        *ps_mv = *ps_nbr_mv;                                                                \
  |  |  201|  17.1k|        break ;                                                                             \
  |  |  202|  17.1k|    }                                                                                       \
  |  |  203|  32.6k|}
  ------------------
  260|  32.6k|                            ps_nbr_pic_buf_lx->i4_abs_poc, ps_mv, &aps_nbr_pu[i]->mv.s_l0_mv);
  261|  15.5k|        }
  262|  71.5k|    }
  263|   258k|}
GET_MV_NBR_LT:
  266|  34.9k|{
  267|  34.9k|    WORD32 i, nbr_pred_lx;
  268|  34.9k|    pic_buf_t *ps_nbr_pic_buf_lx;
  269|       |    /* Long Term*/
  270|       |    /* L0 */
  271|  34.9k|    if(0 == lx)
  ------------------
  |  Branch (271:8): [True: 22.5k, False: 12.3k]
  ------------------
  272|  22.5k|    {
  273|  23.1k|        for(i = 0; i < num_nbrs; i++)
  ------------------
  |  Branch (273:20): [True: 15.5k, False: 7.64k]
  ------------------
  274|  15.5k|        {
  275|  15.5k|            nbr_pred_lx = (PRED_L1 != aps_nbr_pu[i]->b2_pred_mode);
  276|  15.5k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[0][aps_nbr_pu[i]->mv.i1_l0_ref_idx].pv_pic_buf));
  277|  15.5k|            CHECK_NBR_MV_LT(pi4_avail_flag, ps_cur_pic_buf_lx->u1_used_as_ref, ps_slice_hdr->i4_abs_pic_order_cnt, ps_cur_pic_buf_lx->i4_abs_poc,
  ------------------
  |  |  206|  15.5k|                      ps_mv, ps_nbr_mv )                                                     \
  |  |  207|  15.5k|{                                                                                            \
  |  |  208|  15.5k|    WORD32 cur_lt, nbr_lt;                                                                   \
  |  |  209|  15.5k|    cur_lt = (LONG_TERM_REF == (u1_cur_ref_lt));                                             \
  |  |  210|  15.5k|    nbr_lt = (LONG_TERM_REF == (u1_nbr_ref_lt));                                             \
  |  |  211|  15.5k|    if((u1_nbr_pred_flag) && (cur_lt == nbr_lt))                                             \
  |  |  ------------------
  |  |  |  Branch (211:8): [True: 7.42k, False: 8.08k]
  |  |  |  Branch (211:30): [True: 6.82k, False: 596]
  |  |  ------------------
  |  |  212|  15.5k|    {                                                                                        \
  |  |  213|  6.82k|        *pi4_avail_flag = 1;                                                                 \
  |  |  214|  6.82k|        *ps_mv = *ps_nbr_mv;                                                                 \
  |  |  215|  6.82k|        if(SHORT_TERM_REF == u1_nbr_ref_lt)                                                  \
  |  |  ------------------
  |  |  |  Branch (215:12): [True: 6.72k, False: 104]
  |  |  ------------------
  |  |  216|  6.82k|        {                                                                                    \
  |  |  217|  6.72k|            ihevcd_scale_mv(ps_mv, cur_ref_poc, nbr_ref_poc,                                 \
  |  |  218|  6.72k|                                                cur_poc);                                    \
  |  |  219|  6.72k|        }                                                                                    \
  |  |  220|  6.82k|        break ;                                                                              \
  |  |  221|  6.82k|    }                                                                                        \
  |  |  222|  15.5k|}
  ------------------
  278|  15.5k|                            nbr_pred_lx,
  279|  15.5k|                            ps_nbr_pic_buf_lx->u1_used_as_ref, ps_nbr_pic_buf_lx->i4_abs_poc,
  280|  15.5k|                            ps_mv, &aps_nbr_pu[i]->mv.s_l0_mv);
  281|       |
  282|  8.68k|            nbr_pred_lx = (PRED_L0 != aps_nbr_pu[i]->b2_pred_mode);
  283|  8.68k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[1][aps_nbr_pu[i]->mv.i1_l1_ref_idx].pv_pic_buf));
  284|  8.68k|            CHECK_NBR_MV_LT(pi4_avail_flag, ps_cur_pic_buf_lx->u1_used_as_ref, ps_slice_hdr->i4_abs_pic_order_cnt, ps_cur_pic_buf_lx->i4_abs_poc,
  ------------------
  |  |  206|  8.68k|                      ps_mv, ps_nbr_mv )                                                     \
  |  |  207|  8.68k|{                                                                                            \
  |  |  208|  8.68k|    WORD32 cur_lt, nbr_lt;                                                                   \
  |  |  209|  8.68k|    cur_lt = (LONG_TERM_REF == (u1_cur_ref_lt));                                             \
  |  |  210|  8.68k|    nbr_lt = (LONG_TERM_REF == (u1_nbr_ref_lt));                                             \
  |  |  211|  8.68k|    if((u1_nbr_pred_flag) && (cur_lt == nbr_lt))                                             \
  |  |  ------------------
  |  |  |  Branch (211:8): [True: 8.08k, False: 595]
  |  |  |  Branch (211:30): [True: 8.08k, False: 1]
  |  |  ------------------
  |  |  212|  8.68k|    {                                                                                        \
  |  |  213|  8.08k|        *pi4_avail_flag = 1;                                                                 \
  |  |  214|  8.08k|        *ps_mv = *ps_nbr_mv;                                                                 \
  |  |  215|  8.08k|        if(SHORT_TERM_REF == u1_nbr_ref_lt)                                                  \
  |  |  ------------------
  |  |  |  Branch (215:12): [True: 8.06k, False: 27]
  |  |  ------------------
  |  |  216|  8.08k|        {                                                                                    \
  |  |  217|  8.06k|            ihevcd_scale_mv(ps_mv, cur_ref_poc, nbr_ref_poc,                                 \
  |  |  218|  8.06k|                                                cur_poc);                                    \
  |  |  219|  8.06k|        }                                                                                    \
  |  |  220|  8.08k|        break ;                                                                              \
  |  |  221|  8.08k|    }                                                                                        \
  |  |  222|  8.68k|}
  ------------------
  285|  8.68k|                            nbr_pred_lx,
  286|  8.68k|                            ps_nbr_pic_buf_lx->u1_used_as_ref, ps_nbr_pic_buf_lx->i4_abs_poc,
  287|  8.68k|                            ps_mv, &aps_nbr_pu[i]->mv.s_l1_mv);
  288|    596|        }
  289|  22.5k|    }
  290|       |    /* L1 */
  291|  12.3k|    else
  292|  12.3k|    {
  293|  12.4k|        for(i = 0; i < num_nbrs; i++)
  ------------------
  |  Branch (293:20): [True: 8.94k, False: 3.54k]
  ------------------
  294|  8.94k|        {
  295|  8.94k|            nbr_pred_lx = (PRED_L0 != aps_nbr_pu[i]->b2_pred_mode);
  296|  8.94k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[1][aps_nbr_pu[i]->mv.i1_l1_ref_idx].pv_pic_buf));
  297|  8.94k|            CHECK_NBR_MV_LT(pi4_avail_flag, ps_cur_pic_buf_lx->u1_used_as_ref, ps_slice_hdr->i4_abs_pic_order_cnt, ps_cur_pic_buf_lx->i4_abs_poc,
  ------------------
  |  |  206|  8.94k|                      ps_mv, ps_nbr_mv )                                                     \
  |  |  207|  8.94k|{                                                                                            \
  |  |  208|  8.94k|    WORD32 cur_lt, nbr_lt;                                                                   \
  |  |  209|  8.94k|    cur_lt = (LONG_TERM_REF == (u1_cur_ref_lt));                                             \
  |  |  210|  8.94k|    nbr_lt = (LONG_TERM_REF == (u1_nbr_ref_lt));                                             \
  |  |  211|  8.94k|    if((u1_nbr_pred_flag) && (cur_lt == nbr_lt))                                             \
  |  |  ------------------
  |  |  |  Branch (211:8): [True: 4.18k, False: 4.76k]
  |  |  |  Branch (211:30): [True: 4.18k, False: 1]
  |  |  ------------------
  |  |  212|  8.94k|    {                                                                                        \
  |  |  213|  4.18k|        *pi4_avail_flag = 1;                                                                 \
  |  |  214|  4.18k|        *ps_mv = *ps_nbr_mv;                                                                 \
  |  |  215|  4.18k|        if(SHORT_TERM_REF == u1_nbr_ref_lt)                                                  \
  |  |  ------------------
  |  |  |  Branch (215:12): [True: 4.13k, False: 45]
  |  |  ------------------
  |  |  216|  4.18k|        {                                                                                    \
  |  |  217|  4.13k|            ihevcd_scale_mv(ps_mv, cur_ref_poc, nbr_ref_poc,                                 \
  |  |  218|  4.13k|                                                cur_poc);                                    \
  |  |  219|  4.13k|        }                                                                                    \
  |  |  220|  4.18k|        break ;                                                                              \
  |  |  221|  4.18k|    }                                                                                        \
  |  |  222|  8.94k|}
  ------------------
  298|  8.94k|                            nbr_pred_lx,
  299|  8.94k|                            ps_nbr_pic_buf_lx->u1_used_as_ref, ps_nbr_pic_buf_lx->i4_abs_poc,
  300|  8.94k|                            ps_mv, &aps_nbr_pu[i]->mv.s_l1_mv);
  301|       |
  302|  4.76k|            nbr_pred_lx = (PRED_L1 != aps_nbr_pu[i]->b2_pred_mode);
  303|  4.76k|            ps_nbr_pic_buf_lx = (pic_buf_t *)((ps_ref_pic_list[0][aps_nbr_pu[i]->mv.i1_l0_ref_idx].pv_pic_buf));
  304|  4.76k|            CHECK_NBR_MV_LT(pi4_avail_flag, ps_cur_pic_buf_lx->u1_used_as_ref, ps_slice_hdr->i4_abs_pic_order_cnt, ps_cur_pic_buf_lx->i4_abs_poc,
  ------------------
  |  |  206|  4.76k|                      ps_mv, ps_nbr_mv )                                                     \
  |  |  207|  4.76k|{                                                                                            \
  |  |  208|  4.76k|    WORD32 cur_lt, nbr_lt;                                                                   \
  |  |  209|  4.76k|    cur_lt = (LONG_TERM_REF == (u1_cur_ref_lt));                                             \
  |  |  210|  4.76k|    nbr_lt = (LONG_TERM_REF == (u1_nbr_ref_lt));                                             \
  |  |  211|  4.77k|    if((u1_nbr_pred_flag) && (cur_lt == nbr_lt))                                             \
  |  |  ------------------
  |  |  |  Branch (211:8): [True: 4.77k, False: 18.4E]
  |  |  |  Branch (211:30): [True: 4.62k, False: 143]
  |  |  ------------------
  |  |  212|  4.76k|    {                                                                                        \
  |  |  213|  4.62k|        *pi4_avail_flag = 1;                                                                 \
  |  |  214|  4.62k|        *ps_mv = *ps_nbr_mv;                                                                 \
  |  |  215|  4.62k|        if(SHORT_TERM_REF == u1_nbr_ref_lt)                                                  \
  |  |  ------------------
  |  |  |  Branch (215:12): [True: 4.61k, False: 18]
  |  |  ------------------
  |  |  216|  4.62k|        {                                                                                    \
  |  |  217|  4.61k|            ihevcd_scale_mv(ps_mv, cur_ref_poc, nbr_ref_poc,                                 \
  |  |  218|  4.61k|                                                cur_poc);                                    \
  |  |  219|  4.61k|        }                                                                                    \
  |  |  220|  4.62k|        break ;                                                                              \
  |  |  221|  4.62k|    }                                                                                        \
  |  |  222|  4.76k|}
  ------------------
  305|  4.76k|                            nbr_pred_lx,
  306|  4.76k|                            ps_nbr_pic_buf_lx->u1_used_as_ref, ps_nbr_pic_buf_lx->i4_abs_poc,
  307|  4.76k|                            ps_mv, &aps_nbr_pu[i]->mv.s_l0_mv);
  308|    137|        }
  309|  12.3k|    }
  310|  34.9k|}
ihevcd_mv_pred:
  366|   130k|{
  367|   130k|    slice_header_t *ps_slice_hdr;
  368|   130k|    ref_list_t *ps_ref_pic_list[2];
  369|   130k|    pu_t *ps_pic_pu;
  370|   130k|    WORD32 max_l0_mvp_cand, max_l1_mvp_cand;
  371|   130k|    WORD32 l0_done_flag, l1_done_flag;
  372|   130k|    WORD32 num_l0_mvp_cand, num_l1_mvp_cand;
  373|   130k|    WORD32 is_scaled_flag_list /* Indicates whether A0 or A1 is available */;
  374|   130k|    WORD32 avail_a_flag[2];
  375|   130k|    mv_t as_mv_a[2];
  376|   130k|    WORD32 part_pos_x;
  377|   130k|    WORD32 part_pos_y;
  378|   130k|    WORD32 part_wd;
  379|   130k|    WORD32 part_ht;
  380|   130k|    pic_buf_t *ps_cur_pic_buf_l0, *ps_cur_pic_buf_l1;
  381|   130k|    WORD32 nbr_avail[3]; /*[A0/A1] */ /* [B0/B1/B2] */
  382|   130k|    pu_t *aps_nbr_pu[3];  /*[A0/A1] */ /* [B0/B1/B2] */
  383|   130k|    WORD32 num_nbrs = 0;
  384|       |
  385|       |    /*******************************************/
  386|       |    /* Neighbor location: Graphical indication */
  387|       |    /*                                         */
  388|       |    /*          B2 _____________B1 B0          */
  389|       |    /*            |               |            */
  390|       |    /*            |               |            */
  391|       |    /*            |               |            */
  392|       |    /*            |      PU     ht|            */
  393|       |    /*            |               |            */
  394|       |    /*            |               |            */
  395|       |    /*          A1|______wd_______|            */
  396|       |    /*          A0                             */
  397|       |    /*                                         */
  398|       |    /*******************************************/
  399|       |
  400|   130k|    ps_slice_hdr = ps_mv_ctxt->ps_slice_hdr;
  401|   130k|    ps_pic_pu = ps_mv_ctxt->ps_pic_pu;
  402|   130k|    max_l0_mvp_cand = ps_pu->b1_l0_mvp_idx + 1;
  403|   130k|    max_l1_mvp_cand = ps_pu->b1_l1_mvp_idx + 1;
  404|   130k|    num_l0_mvp_cand = 0;
  405|   130k|    num_l1_mvp_cand = 0;
  406|       |
  407|       |    /* Initializing reference list */
  408|   130k|    ps_ref_pic_list[0] = ps_slice_hdr->as_ref_pic_list0;
  409|   130k|    ps_ref_pic_list[1] = ps_slice_hdr->as_ref_pic_list1;
  410|   130k|    if(PSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (410:8): [True: 619, False: 129k]
  ------------------
  411|    619|        ps_ref_pic_list[1] = ps_slice_hdr->as_ref_pic_list0;
  412|       |
  413|   130k|    ps_cur_pic_buf_l0 = (pic_buf_t *)((ps_ref_pic_list[0][ps_pu->mv.i1_l0_ref_idx].pv_pic_buf));
  414|   130k|    ps_cur_pic_buf_l1 = (pic_buf_t *)((ps_ref_pic_list[1][ps_pu->mv.i1_l1_ref_idx].pv_pic_buf));
  415|       |
  416|   130k|    is_scaled_flag_list = 0;
  417|       |
  418|   130k|    part_pos_x = ps_pu->b4_pos_x << 2;
  419|   130k|    part_pos_y = ps_pu->b4_pos_y << 2;
  420|   130k|    part_wd = (ps_pu->b4_wd + 1) << 2;
  421|   130k|    part_ht = (ps_pu->b4_ht + 1) << 2;
  422|       |
  423|       |    /************************************************************/
  424|       |    /* Calculating of motion vector A from neighbors A0 and A1  */
  425|       |    /************************************************************/
  426|   130k|    {
  427|   130k|        nbr_avail[0] = 0;
  428|   130k|        nbr_avail[1] = 0;
  429|       |
  430|       |        /* Pointers to A0 and A1 */
  431|   130k|        {
  432|   130k|            WORD32 y_a0, y_a1;
  433|   130k|            WORD32 pu_idx_a0, pu_idx_a1;
  434|       |
  435|       |            /* TODO: y_a0, y_a1 is coded assuming left nbr pointer starts at PU */
  436|   130k|            y_a0 = (part_ht >> 2);
  437|   130k|            y_a1 = ((part_ht - 1) >> 2);
  438|       |
  439|   130k|            pu_idx_a0 = *(pu4_left_pu_idx + (y_a0 * left_nbr_4x4_strd));
  440|   130k|            pu_idx_a1 = *(pu4_left_pu_idx + (y_a1 * left_nbr_4x4_strd));
  441|       |
  442|   130k|            if(lb_avail && (!ps_pic_pu[pu_idx_a0].b1_intra_flag))
  ------------------
  |  Branch (442:16): [True: 43.1k, False: 86.8k]
  |  Branch (442:28): [True: 42.2k, False: 918]
  ------------------
  443|  42.2k|            {
  444|  42.2k|                aps_nbr_pu[num_nbrs] = &ps_pic_pu[pu_idx_a0];
  445|  42.2k|                num_nbrs++;
  446|  42.2k|                nbr_avail[0] = 1;
  447|  42.2k|            }
  448|   130k|            if(l_avail && (!ps_pic_pu[pu_idx_a1].b1_intra_flag))
  ------------------
  |  Branch (448:16): [True: 125k, False: 4.63k]
  |  Branch (448:27): [True: 123k, False: 2.19k]
  ------------------
  449|   123k|            {
  450|   123k|                aps_nbr_pu[num_nbrs] = &ps_pic_pu[pu_idx_a1];
  451|   123k|                num_nbrs++;
  452|   123k|                nbr_avail[1] = 1;
  453|   123k|            }
  454|   130k|        }
  455|       |        /* Setting is scaled flag based on availability of A0 and A1 */
  456|   130k|        if((nbr_avail[0] == 1) || (nbr_avail[1]))
  ------------------
  |  Branch (456:12): [True: 41.7k, False: 88.2k]
  |  Branch (456:35): [True: 81.7k, False: 6.51k]
  ------------------
  457|   123k|        {
  458|   123k|            is_scaled_flag_list = 1;
  459|   123k|        }
  460|       |
  461|   130k|        avail_a_flag[0] = 0;
  462|   130k|        avail_a_flag[1] = 0;
  463|       |
  464|       |        /* L0 */
  465|   130k|        GET_MV_NBR_ST(ps_ref_pic_list, &avail_a_flag[0], ps_cur_pic_buf_l0, aps_nbr_pu, &as_mv_a[0], num_nbrs, 0);
  466|   130k|        if(0 == avail_a_flag[0])
  ------------------
  |  Branch (466:12): [True: 18.8k, False: 111k]
  ------------------
  467|  18.8k|        {
  468|  18.8k|            GET_MV_NBR_LT(ps_ref_pic_list, ps_slice_hdr, &avail_a_flag[0], ps_cur_pic_buf_l0, aps_nbr_pu, &as_mv_a[0], num_nbrs, 0);
  469|  18.8k|        }
  470|       |
  471|       |        /* L1 */
  472|   130k|        if(PRED_L0 != ps_pu->b2_pred_mode)
  ------------------
  |  Branch (472:12): [True: 50.9k, False: 79.0k]
  ------------------
  473|  50.9k|        {
  474|  50.9k|            GET_MV_NBR_ST(ps_ref_pic_list, &avail_a_flag[1], ps_cur_pic_buf_l1, aps_nbr_pu, &as_mv_a[1], num_nbrs, 1);
  475|  50.9k|            if(0 == avail_a_flag[1])
  ------------------
  |  Branch (475:16): [True: 10.6k, False: 40.2k]
  ------------------
  476|  10.6k|            {
  477|  10.6k|                GET_MV_NBR_LT(ps_ref_pic_list, ps_slice_hdr, &avail_a_flag[1], ps_cur_pic_buf_l1, aps_nbr_pu, &as_mv_a[1], num_nbrs, 1);
  478|  10.6k|            }
  479|  50.9k|        }
  480|       |
  481|   130k|        l0_done_flag = (PRED_L1 == ps_pu->b2_pred_mode);
  482|   130k|        l1_done_flag = (PRED_L0 == ps_pu->b2_pred_mode);
  483|       |
  484|   130k|        if(avail_a_flag[0])
  ------------------
  |  Branch (484:12): [True: 123k, False: 6.98k]
  ------------------
  485|   123k|        {
  486|   123k|            num_l0_mvp_cand++;
  487|   123k|            if(max_l0_mvp_cand == num_l0_mvp_cand)
  ------------------
  |  Branch (487:16): [True: 84.1k, False: 38.9k]
  ------------------
  488|  84.1k|            {
  489|  84.1k|                ps_pred_mv->s_l0_mv = as_mv_a[0];
  490|  84.1k|                l0_done_flag = 1;
  491|  84.1k|            }
  492|   123k|        }
  493|   130k|        if(avail_a_flag[1])
  ------------------
  |  Branch (493:12): [True: 47.7k, False: 82.2k]
  ------------------
  494|  47.7k|        {
  495|  47.7k|            num_l1_mvp_cand++;
  496|  47.7k|            if(max_l1_mvp_cand == num_l1_mvp_cand)
  ------------------
  |  Branch (496:16): [True: 32.5k, False: 15.1k]
  ------------------
  497|  32.5k|            {
  498|  32.5k|                ps_pred_mv->s_l1_mv = as_mv_a[1];
  499|  32.5k|                l1_done_flag = 1;
  500|  32.5k|            }
  501|  47.7k|        }
  502|   130k|        if(l0_done_flag && l1_done_flag)
  ------------------
  |  Branch (502:12): [True: 85.7k, False: 44.2k]
  |  Branch (502:28): [True: 72.7k, False: 13.0k]
  ------------------
  503|  72.6k|            return;
  504|   130k|    }
  505|       |
  506|       |    /************************************************************/
  507|       |    /* Calculating of motion vector B from neighbors B0 and B1  */
  508|       |    /************************************************************/
  509|  57.3k|    {
  510|  57.3k|        WORD32 avail_b_flag[2];
  511|  57.3k|        mv_t as_mv_b[2];
  512|       |
  513|       |        /* Pointers to B0, B1 and B2 */
  514|  57.3k|        {
  515|  57.3k|            WORD32 x_b0, x_b1, x_b2;
  516|  57.3k|            WORD32 pu_idx_b0, pu_idx_b1, pu_idx_b2;
  517|       |
  518|       |            /* Relative co-ordiante of Xp,Yp w.r.t CTB start will work */
  519|       |            /* as long as minCTB = 16                                  */
  520|  57.3k|            x_b0 = (part_pos_x + part_wd);
  521|  57.3k|            x_b1 = (part_pos_x + part_wd - 1);
  522|  57.3k|            x_b2 = (part_pos_x - 1);
  523|       |            /* Getting offset back to given pointer */
  524|  57.3k|            x_b0 = x_b0 - part_pos_x;
  525|  57.3k|            x_b1 = x_b1 - part_pos_x;
  526|  57.3k|            x_b2 = x_b2 - part_pos_x;
  527|       |
  528|       |            /* Below derivation are based on top pointer */
  529|       |            /* is pointing first pixel of PU             */
  530|  57.3k|            pu_idx_b0 = *(pu4_top_pu_idx + (x_b0 >> 2));
  531|  57.3k|            pu_idx_b0 = pu_idx_b0 * tr_avail;
  532|  57.3k|            pu_idx_b1 = *(pu4_top_pu_idx + (x_b1 >> 2));
  533|  57.3k|            pu_idx_b1 = pu_idx_b1 * t_avail;
  534|       |            /* At CTB boundary, use top-left passed in */
  535|  57.3k|            if(part_pos_y)
  ------------------
  |  Branch (535:16): [True: 46.7k, False: 10.6k]
  ------------------
  536|  46.7k|            {
  537|  46.7k|                pu_idx_b2 = *pu4_top_left_pu_idx;
  538|  46.7k|            }
  539|  10.6k|            else
  540|  10.6k|            {
  541|       |                /* Not at CTB boundary, use top and  */
  542|       |                /* add correction to go to top-left */
  543|  10.6k|                pu_idx_b2 = *((pu4_top_pu_idx)+(x_b2 >> 2));
  544|  10.6k|            }
  545|  57.3k|            pu_idx_b2 = pu_idx_b2 * tl_avail;
  546|       |
  547|  57.3k|            num_nbrs = 0;
  548|  57.3k|            nbr_avail[0] = 0;
  549|  57.3k|            nbr_avail[1] = 0;
  550|  57.3k|            nbr_avail[2] = 0;
  551|       |
  552|  57.3k|            if(tr_avail && (!ps_pic_pu[pu_idx_b0].b1_intra_flag))
  ------------------
  |  Branch (552:16): [True: 35.2k, False: 22.1k]
  |  Branch (552:28): [True: 33.8k, False: 1.33k]
  ------------------
  553|  33.8k|            {
  554|  33.8k|                aps_nbr_pu[num_nbrs] = &ps_pic_pu[pu_idx_b0];
  555|  33.8k|                num_nbrs++;
  556|  33.8k|                nbr_avail[0] = 1;
  557|  33.8k|            }
  558|  57.3k|            if(t_avail && (!ps_pic_pu[pu_idx_b1].b1_intra_flag))
  ------------------
  |  Branch (558:16): [True: 55.3k, False: 2.02k]
  |  Branch (558:27): [True: 53.5k, False: 1.72k]
  ------------------
  559|  53.5k|            {
  560|  53.5k|                aps_nbr_pu[num_nbrs] = &ps_pic_pu[pu_idx_b1];
  561|  53.5k|                num_nbrs++;
  562|  53.5k|                nbr_avail[1] = 1;
  563|  53.5k|            }
  564|  57.3k|            if(tl_avail && (!ps_pic_pu[pu_idx_b2].b1_intra_flag))
  ------------------
  |  Branch (564:16): [True: 51.3k, False: 5.98k]
  |  Branch (564:28): [True: 49.2k, False: 2.13k]
  ------------------
  565|  49.2k|            {
  566|  49.2k|                aps_nbr_pu[num_nbrs] = &ps_pic_pu[pu_idx_b2];
  567|  49.2k|                num_nbrs++;
  568|  49.2k|                nbr_avail[2] = 1;
  569|  49.2k|            }
  570|  57.3k|        }
  571|       |
  572|       |        /* L0 */
  573|  57.3k|        avail_b_flag[0] = 0;
  574|  57.3k|        avail_b_flag[1] = 0;
  575|       |
  576|  57.3k|        GET_MV_NBR_ST(ps_ref_pic_list, &avail_b_flag[0], ps_cur_pic_buf_l0, aps_nbr_pu, &as_mv_b[0], num_nbrs, 0);
  577|       |
  578|       |        /* L1 */
  579|  57.3k|        if(PRED_L0 != ps_pu->b2_pred_mode)
  ------------------
  |  Branch (579:12): [True: 21.1k, False: 36.1k]
  ------------------
  580|  21.1k|        {
  581|       |            /* B0 Short Term */
  582|  21.1k|            GET_MV_NBR_ST(ps_ref_pic_list, &avail_b_flag[1], ps_cur_pic_buf_l1, aps_nbr_pu, &as_mv_b[1], num_nbrs, 1);
  583|  21.1k|        }
  584|       |
  585|  57.3k|        if(avail_b_flag[0])
  ------------------
  |  Branch (585:12): [True: 52.0k, False: 5.26k]
  ------------------
  586|  52.0k|        {
  587|  52.0k|            if(((0 == num_l0_mvp_cand)
  ------------------
  |  Branch (587:17): [True: 5.24k, False: 46.8k]
  ------------------
  588|  52.0k|                            || (as_mv_a[0].i2_mvx != as_mv_b[0].i2_mvx)
  ------------------
  |  Branch (588:32): [True: 27.8k, False: 18.9k]
  ------------------
  589|  52.0k|                            || (as_mv_a[0].i2_mvy != as_mv_b[0].i2_mvy)))
  ------------------
  |  Branch (589:32): [True: 5.09k, False: 13.8k]
  ------------------
  590|  38.2k|            {
  591|  38.2k|                num_l0_mvp_cand++;
  592|  38.2k|                if(max_l0_mvp_cand == num_l0_mvp_cand)
  ------------------
  |  Branch (592:20): [True: 29.6k, False: 8.56k]
  ------------------
  593|  29.6k|                {
  594|  29.6k|                    ps_pred_mv->s_l0_mv = as_mv_b[0];
  595|  29.6k|                    l0_done_flag = 1;
  596|  29.6k|                }
  597|  38.2k|            }
  598|  52.0k|        }
  599|  57.3k|        if(avail_b_flag[1])
  ------------------
  |  Branch (599:12): [True: 17.7k, False: 39.5k]
  ------------------
  600|  17.7k|        {
  601|  17.7k|            if(((0 == num_l1_mvp_cand)
  ------------------
  |  Branch (601:17): [True: 2.37k, False: 15.3k]
  ------------------
  602|  17.7k|                            || (as_mv_a[1].i2_mvx != as_mv_b[1].i2_mvx)
  ------------------
  |  Branch (602:32): [True: 8.70k, False: 6.68k]
  ------------------
  603|  17.7k|                            || (as_mv_a[1].i2_mvy != as_mv_b[1].i2_mvy)))
  ------------------
  |  Branch (603:32): [True: 2.02k, False: 4.66k]
  ------------------
  604|  13.1k|            {
  605|  13.1k|                num_l1_mvp_cand++;
  606|  13.1k|                if(max_l1_mvp_cand == num_l1_mvp_cand)
  ------------------
  |  Branch (606:20): [True: 10.6k, False: 2.47k]
  ------------------
  607|  10.6k|                {
  608|  10.6k|                    ps_pred_mv->s_l1_mv = as_mv_b[1];
  609|  10.6k|                    l1_done_flag = 1;
  610|  10.6k|                }
  611|  13.1k|            }
  612|  17.7k|        }
  613|  57.3k|        if(l0_done_flag && l1_done_flag)
  ------------------
  |  Branch (613:12): [True: 41.5k, False: 15.7k]
  |  Branch (613:28): [True: 35.2k, False: 6.34k]
  ------------------
  614|  35.2k|            return;
  615|       |
  616|  22.1k|        if((is_scaled_flag_list == 0) && (avail_b_flag[0] == 1))
  ------------------
  |  Branch (616:12): [True: 3.71k, False: 18.3k]
  |  Branch (616:42): [True: 2.43k, False: 1.28k]
  ------------------
  617|  2.43k|        {
  618|  2.43k|            avail_a_flag[0] = 1;
  619|  2.43k|            as_mv_a[0] = as_mv_b[0];
  620|  2.43k|        }
  621|  22.1k|        if((is_scaled_flag_list == 0) && (avail_b_flag[1] == 1))
  ------------------
  |  Branch (621:12): [True: 3.71k, False: 18.3k]
  |  Branch (621:42): [True: 1.03k, False: 2.68k]
  ------------------
  622|  1.03k|        {
  623|  1.03k|            avail_a_flag[1] = 1;
  624|  1.03k|            as_mv_a[1] = as_mv_b[1];
  625|  1.03k|        }
  626|       |
  627|  22.1k|        if(0 == is_scaled_flag_list)
  ------------------
  |  Branch (627:12): [True: 3.71k, False: 18.3k]
  ------------------
  628|  3.71k|        {
  629|  3.71k|            avail_b_flag[0] = avail_b_flag[1] = 0;
  630|       |
  631|  3.71k|            GET_MV_NBR_LT(ps_ref_pic_list, ps_slice_hdr, &avail_b_flag[0], ps_cur_pic_buf_l0, aps_nbr_pu, &as_mv_b[0], num_nbrs, 0);
  632|       |
  633|  3.71k|            if(PRED_L0 != ps_pu->b2_pred_mode)
  ------------------
  |  Branch (633:16): [True: 1.77k, False: 1.94k]
  ------------------
  634|  1.77k|            {
  635|  1.77k|                GET_MV_NBR_LT(ps_ref_pic_list, ps_slice_hdr, &avail_b_flag[1], ps_cur_pic_buf_l1, aps_nbr_pu, &as_mv_b[1], num_nbrs, 1);
  636|  1.77k|            }
  637|       |
  638|  3.71k|            if(avail_b_flag[0])
  ------------------
  |  Branch (638:16): [True: 2.98k, False: 733]
  ------------------
  639|  2.98k|            {
  640|  2.98k|                if(((0 == num_l0_mvp_cand)
  ------------------
  |  Branch (640:21): [True: 547, False: 2.43k]
  ------------------
  641|  2.98k|                                || (as_mv_a[0].i2_mvx != as_mv_b[0].i2_mvx)
  ------------------
  |  Branch (641:36): [True: 25, False: 2.41k]
  ------------------
  642|  2.98k|                                || (as_mv_a[0].i2_mvy != as_mv_b[0].i2_mvy)))
  ------------------
  |  Branch (642:36): [True: 40, False: 2.37k]
  ------------------
  643|    612|                {
  644|    612|                    num_l0_mvp_cand++;
  645|    612|                    if(max_l0_mvp_cand == num_l0_mvp_cand)
  ------------------
  |  Branch (645:24): [True: 311, False: 301]
  ------------------
  646|    311|                    {
  647|    311|                        ps_pred_mv->s_l0_mv = as_mv_b[0];
  648|    311|                        l0_done_flag = 1;
  649|    311|                    }
  650|    612|                }
  651|  2.98k|            }
  652|  3.71k|            if(avail_b_flag[1])
  ------------------
  |  Branch (652:16): [True: 1.38k, False: 2.32k]
  ------------------
  653|  1.38k|            {
  654|  1.38k|                if(((0 == num_l1_mvp_cand)
  ------------------
  |  Branch (654:21): [True: 356, False: 1.03k]
  ------------------
  655|  1.38k|                                || (as_mv_a[1].i2_mvx != as_mv_b[1].i2_mvx)
  ------------------
  |  Branch (655:36): [True: 29, False: 1.00k]
  ------------------
  656|  1.38k|                                || (as_mv_a[1].i2_mvy != as_mv_b[1].i2_mvy)))
  ------------------
  |  Branch (656:36): [True: 1, False: 1.00k]
  ------------------
  657|    386|                {
  658|    386|                    num_l1_mvp_cand++;
  659|    386|                    if(max_l1_mvp_cand == num_l1_mvp_cand)
  ------------------
  |  Branch (659:24): [True: 266, False: 120]
  ------------------
  660|    266|                    {
  661|    266|                        ps_pred_mv->s_l1_mv = as_mv_b[1];
  662|    266|                        l1_done_flag = 1;
  663|    266|                    }
  664|    386|                }
  665|  1.38k|            }
  666|  3.71k|            if(l0_done_flag && l1_done_flag)
  ------------------
  |  Branch (666:16): [True: 1.14k, False: 2.57k]
  |  Branch (666:32): [True: 487, False: 654]
  ------------------
  667|    487|                return;
  668|  3.71k|        }
  669|       |        /***********************************************************/
  670|       |        /*          Collocated MV prediction                       */
  671|       |        /***********************************************************/
  672|  21.6k|        if((2 != num_l0_mvp_cand) || (2 != num_l1_mvp_cand))
  ------------------
  |  Branch (672:12): [True: 19.7k, False: 1.88k]
  |  Branch (672:38): [True: 1.88k, False: 0]
  ------------------
  673|  22.1k|        {
  674|  22.1k|            mv_t as_mv_col[2], s_mv_col_l0, s_mv_col_l1;
  675|  22.1k|            WORD32 avail_col_flag[2] = { 0 };
  676|  22.1k|            WORD32 x_col, y_col, avail_col_l0, avail_col_l1;
  677|       |//            ihevcd_collocated_mvp((mv_ctxt_t *)ps_mv_ctxt,ps_pu,part_pos_x,part_pos_y,part_wd,part_ht,as_mv_col,avail_col_flag,1);
  678|  22.1k|            x_col = part_pos_x + part_wd;
  679|  22.1k|            y_col = part_pos_y + part_ht;
  680|  22.1k|            ihevcd_collocated_mvp(ps_mv_ctxt, ps_pu, as_mv_col, avail_col_flag, 1, x_col, y_col);
  681|       |
  682|  22.1k|            avail_col_l0 = avail_col_flag[0];
  683|  22.1k|            avail_col_l1 = avail_col_flag[1];
  684|  22.1k|            if(avail_col_l0 || avail_col_l1)
  ------------------
  |  Branch (684:16): [True: 8.05k, False: 14.0k]
  |  Branch (684:32): [True: 20, False: 14.0k]
  ------------------
  685|  8.07k|            {
  686|  8.07k|                s_mv_col_l0 = as_mv_col[0];
  687|  8.07k|                s_mv_col_l1 = as_mv_col[1];
  688|  8.07k|            }
  689|       |
  690|  22.1k|            if(avail_col_l0 == 0 || avail_col_l1 == 0)
  ------------------
  |  Branch (690:16): [True: 14.0k, False: 8.07k]
  |  Branch (690:37): [True: 156, False: 7.91k]
  ------------------
  691|  14.2k|            {
  692|       |                /* Checking Collocated MV availability at Center of PU */
  693|  14.2k|                x_col = part_pos_x + (part_wd >> 1);
  694|  14.2k|                y_col = part_pos_y + (part_ht >> 1);
  695|  14.2k|                ihevcd_collocated_mvp(ps_mv_ctxt, ps_pu, as_mv_col, avail_col_flag, 1, x_col, y_col);
  696|       |
  697|  14.2k|                if(avail_col_l0 == 0)
  ------------------
  |  Branch (697:20): [True: 14.0k, False: 155]
  ------------------
  698|  14.0k|                {
  699|  14.0k|                    s_mv_col_l0 = as_mv_col[0];
  700|  14.0k|                }
  701|  14.2k|                if(avail_col_l1 == 0)
  ------------------
  |  Branch (701:20): [True: 14.2k, False: 19]
  ------------------
  702|  14.2k|                {
  703|  14.2k|                    s_mv_col_l1 = as_mv_col[1];
  704|  14.2k|                }
  705|       |
  706|  14.2k|                avail_col_l0 |= avail_col_flag[0];
  707|  14.2k|                avail_col_l1 |= avail_col_flag[1];
  708|  14.2k|            }
  709|       |
  710|       |            /* Checking if mvp index matches collocated mv */
  711|  22.1k|            if(avail_col_l0)
  ------------------
  |  Branch (711:16): [True: 10.8k, False: 11.2k]
  ------------------
  712|  10.8k|            {
  713|  10.8k|                if(2 != num_l0_mvp_cand)
  ------------------
  |  Branch (713:20): [True: 9.62k, False: 1.19k]
  ------------------
  714|  9.62k|                {
  715|  9.62k|                    num_l0_mvp_cand++;
  716|  9.62k|                    if(max_l0_mvp_cand == num_l0_mvp_cand)
  ------------------
  |  Branch (716:24): [True: 6.63k, False: 2.99k]
  ------------------
  717|  6.63k|                    {
  718|  6.63k|                        ps_pred_mv->s_l0_mv = s_mv_col_l0;
  719|  6.63k|                        l0_done_flag = 1;
  720|  6.63k|                    }
  721|  9.62k|                }
  722|  10.8k|            }
  723|  22.1k|            if(avail_col_l1)
  ------------------
  |  Branch (723:16): [True: 10.5k, False: 11.5k]
  ------------------
  724|  10.5k|            {
  725|  10.5k|                if(2 != num_l1_mvp_cand)
  ------------------
  |  Branch (725:20): [True: 10.3k, False: 180]
  ------------------
  726|  10.3k|                {
  727|  10.3k|                    num_l1_mvp_cand++;
  728|  10.3k|                    if(max_l1_mvp_cand == num_l1_mvp_cand)
  ------------------
  |  Branch (728:24): [True: 9.97k, False: 422]
  ------------------
  729|  9.97k|                    {
  730|  9.97k|                        ps_pred_mv->s_l1_mv = s_mv_col_l1;
  731|  9.97k|                        l1_done_flag = 1;
  732|  9.97k|                    }
  733|  10.3k|                }
  734|  10.5k|            }
  735|  22.1k|            if(l0_done_flag && l1_done_flag)
  ------------------
  |  Branch (735:16): [True: 12.7k, False: 9.34k]
  |  Branch (735:32): [True: 10.5k, False: 2.17k]
  ------------------
  736|  10.5k|                return;
  737|  22.1k|        }
  738|       |
  739|  11.0k|        if(0 == l0_done_flag)
  ------------------
  |  Branch (739:12): [True: 9.36k, False: 1.66k]
  ------------------
  740|  9.36k|        {
  741|  9.36k|            ps_pred_mv->s_l0_mv.i2_mvx = 0;
  742|  9.36k|            ps_pred_mv->s_l0_mv.i2_mvy = 0;
  743|  9.36k|        }
  744|  11.0k|        if(0 == l1_done_flag)
  ------------------
  |  Branch (744:12): [True: 3.08k, False: 7.94k]
  ------------------
  745|  3.08k|        {
  746|  3.08k|            ps_pred_mv->s_l1_mv.i2_mvx = 0;
  747|  3.08k|            ps_pred_mv->s_l1_mv.i2_mvy = 0;
  748|  3.08k|        }
  749|  11.0k|    }
  750|  11.0k|}

ihevcd_nal_search_start_code:
   97|  1.15M|{
   98|  1.15M|    WORD32 ofst;
   99|       |
  100|  1.15M|    WORD32 zero_byte_cnt;
  101|  1.15M|    WORD32 start_code_found;
  102|       |
  103|  1.15M|    ofst = -1;
  104|       |
  105|  1.15M|    zero_byte_cnt = 0;
  106|  1.15M|    start_code_found = 0;
  107|   467M|    while(ofst < (bytes_remaining - 1))
  ------------------
  |  Branch (107:11): [True: 467M, False: 62]
  ------------------
  108|   467M|    {
  109|   467M|        ofst++;
  110|   467M|        if(pu1_buf[ofst] != 0)
  ------------------
  |  Branch (110:12): [True: 359M, False: 108M]
  ------------------
  111|   359M|        {
  112|   359M|            zero_byte_cnt = 0;
  113|   359M|            continue;
  114|   359M|        }
  115|       |
  116|   108M|        zero_byte_cnt++;
  117|   108M|        if((ofst < (bytes_remaining - 1)) &&
  ------------------
  |  Branch (117:12): [True: 108M, False: 20]
  ------------------
  118|   108M|           (pu1_buf[ofst + 1] == START_CODE_PREFIX_BYTE) &&
  ------------------
  |  |   47|   108M|#define START_CODE_PREFIX_BYTE      1
  ------------------
  |  Branch (118:12): [True: 2.68M, False: 105M]
  ------------------
  119|   108M|           (zero_byte_cnt >= NUM_ZEROS_BEFORE_START_CODE))
  ------------------
  |  |   57|  2.68M|#define NUM_ZEROS_BEFORE_START_CODE 2
  ------------------
  |  Branch (119:12): [True: 1.15M, False: 1.52M]
  ------------------
  120|  1.15M|        {
  121|       |            /* Found the start code */
  122|  1.15M|            ofst++;
  123|  1.15M|            start_code_found = 1;
  124|  1.15M|            break;
  125|  1.15M|        }
  126|   108M|    }
  127|  1.15M|    if((0 == start_code_found) && (ofst < bytes_remaining))
  ------------------
  |  Branch (127:8): [True: 62, False: 1.15M]
  |  Branch (127:35): [True: 62, False: 0]
  ------------------
  128|     62|    {
  129|     62|        if((START_CODE_PREFIX_BYTE == pu1_buf[ofst]) &&
  ------------------
  |  |   47|     62|#define START_CODE_PREFIX_BYTE      1
  ------------------
  |  Branch (129:12): [True: 1, False: 61]
  ------------------
  130|     62|           (zero_byte_cnt >= NUM_ZEROS_BEFORE_START_CODE))
  ------------------
  |  |   57|      1|#define NUM_ZEROS_BEFORE_START_CODE 2
  ------------------
  |  Branch (130:12): [True: 0, False: 1]
  ------------------
  131|      0|        {
  132|       |            /* Found a start code at the end*/
  133|      0|            ofst++;
  134|      0|        }
  135|     62|    }
  136|       |    /* Since ofst started at -1, increment it by 1 */
  137|  1.15M|    ofst++;
  138|       |
  139|  1.15M|    return ofst;
  140|  1.15M|}
ihevcd_nal_remv_emuln_bytes:
  186|  1.15M|{
  187|  1.15M|    WORD32 src_cnt;
  188|  1.15M|    WORD32 dst_cnt;
  189|  1.15M|    WORD32 zero_byte_cnt;
  190|  1.15M|    WORD32 start_code_found;
  191|  1.15M|    UWORD8 u1_src;
  192|  1.15M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  193|       |
  194|  1.15M|    src_cnt = 0;
  195|  1.15M|    dst_cnt = 0;
  196|  1.15M|    zero_byte_cnt = 0;
  197|  1.15M|    start_code_found = 0;
  198|   908M|    while(src_cnt < (bytes_remaining - 1))
  ------------------
  |  Branch (198:11): [True: 908M, False: 1.64k]
  ------------------
  199|   908M|    {
  200|   908M|        u1_src = pu1_src[src_cnt++];
  201|       |
  202|   908M|        pu1_dst[dst_cnt++] = u1_src;
  203|   908M|        if(u1_src != 0)
  ------------------
  |  Branch (203:12): [True: 792M, False: 116M]
  ------------------
  204|   792M|        {
  205|   792M|            zero_byte_cnt = 0;
  206|   792M|            continue;
  207|   792M|        }
  208|       |
  209|   116M|        zero_byte_cnt++;
  210|   116M|        if(zero_byte_cnt >= NUM_ZEROS_BEFORE_START_CODE)
  ------------------
  |  |   57|   116M|#define NUM_ZEROS_BEFORE_START_CODE 2
  ------------------
  |  Branch (210:12): [True: 108M, False: 7.40M]
  ------------------
  211|   108M|        {
  212|   108M|            u1_src = pu1_src[src_cnt];
  213|   108M|            if(START_CODE_PREFIX_BYTE == u1_src)
  ------------------
  |  |   47|   108M|#define START_CODE_PREFIX_BYTE      1
  ------------------
  |  Branch (213:16): [True: 1.15M, False: 107M]
  ------------------
  214|  1.15M|            {
  215|       |                /* Found the start code */
  216|  1.15M|                src_cnt -= zero_byte_cnt;
  217|  1.15M|                dst_cnt -= zero_byte_cnt;
  218|  1.15M|                start_code_found = 1;
  219|  1.15M|                break;
  220|  1.15M|            }
  221|   107M|            else if(EMULATION_PREVENT_BYTE == u1_src)
  ------------------
  |  |   53|   107M|#define EMULATION_PREVENT_BYTE      3
  ------------------
  |  Branch (221:21): [True: 55.8k, False: 107M]
  ------------------
  222|  55.8k|            {
  223|       |                /* Found the emulation prevention byte */
  224|  55.8k|                src_cnt++;
  225|  55.8k|                zero_byte_cnt = 0;
  226|       |
  227|       |                /* Decrement dst_cnt so that the next byte overwrites
  228|       |                 * the emulation prevention byte already copied to dst above
  229|       |                 */
  230|  55.8k|            }
  231|   108M|        }
  232|       |
  233|   116M|    }
  234|       |
  235|  1.15M|    if((0 == start_code_found) && (src_cnt < bytes_remaining))
  ------------------
  |  Branch (235:8): [True: 1.64k, False: 1.15M]
  |  Branch (235:35): [True: 1.64k, False: 0]
  ------------------
  236|  1.64k|    {
  237|  1.64k|        u1_src = pu1_src[src_cnt++];
  238|  1.64k|        if(zero_byte_cnt >= NUM_ZEROS_BEFORE_START_CODE)
  ------------------
  |  |   57|  1.64k|#define NUM_ZEROS_BEFORE_START_CODE 2
  ------------------
  |  Branch (238:12): [True: 157, False: 1.48k]
  ------------------
  239|    157|        {
  240|       |
  241|    157|            if(START_CODE_PREFIX_BYTE == u1_src)
  ------------------
  |  |   47|    157|#define START_CODE_PREFIX_BYTE      1
  ------------------
  |  Branch (241:16): [True: 0, False: 157]
  ------------------
  242|      0|            {
  243|       |                /* Found a start code at the end*/
  244|      0|                src_cnt -= zero_byte_cnt;
  245|      0|            }
  246|    157|            else if(EMULATION_PREVENT_BYTE == u1_src)
  ------------------
  |  |   53|    157|#define EMULATION_PREVENT_BYTE      3
  ------------------
  |  Branch (246:21): [True: 0, False: 157]
  ------------------
  247|      0|            {
  248|       |                /* Found the emulation prevention byte at the end*/
  249|      0|                src_cnt++;
  250|       |                /* Decrement dst_cnt so that the next byte overwrites
  251|       |                 * the emulation prevention byte already copied to dst above
  252|       |                 */
  253|      0|                dst_cnt--;
  254|      0|            }
  255|    157|        }
  256|  1.48k|        else
  257|  1.48k|        {
  258|  1.48k|            pu1_dst[dst_cnt++] = u1_src;
  259|  1.48k|        }
  260|       |
  261|       |
  262|  1.64k|    }
  263|  1.15M|    *pi4_nal_len = src_cnt;
  264|  1.15M|    *pi4_dst_len = dst_cnt;
  265|  1.15M|    return ret;
  266|  1.15M|}
ihevcd_nal_unit_header:
  290|  1.15M|{
  291|  1.15M|    WORD32 unused;
  292|  1.15M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  293|  1.15M|    UNUSED(unused);
  ------------------
  |  |   38|  1.15M|#define UNUSED(x) ((void)(x))
  ------------------
  294|       |    /* Syntax : forbidden_zero_bit */
  295|  1.15M|    unused = ihevcd_bits_get(ps_bitstrm, 1);
  296|       |
  297|       |    /* Syntax : nal_unit_type */
  298|  1.15M|    ps_nal->i1_nal_unit_type = ihevcd_bits_get(ps_bitstrm, 6);
  299|       |
  300|       |    /* Syntax : nuh_reserved_zero_6bits */
  301|  1.15M|    unused = ihevcd_bits_get(ps_bitstrm, 6);
  302|       |
  303|       |    /* Syntax : nuh_temporal_id_plus1 */
  304|  1.15M|    ps_nal->i1_nuh_temporal_id = (WORD32)ihevcd_bits_get(ps_bitstrm, 3) - 1;
  305|       |
  306|  1.15M|    return ret;
  307|       |
  308|  1.15M|}
ihevcd_nal_unit:
  332|  1.15M|{
  333|  1.15M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  334|       |
  335|       |    /* NAL Header */
  336|  1.15M|    nal_header_t s_nal;
  337|       |
  338|  1.15M|    ret = ihevcd_nal_unit_header(&ps_codec->s_parse.s_bitstrm, &s_nal);
  339|  1.15M|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  1.15M|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 1.15M]
  |  |  ------------------
  ------------------
  340|       |
  341|  1.15M|    if(ps_codec->i4_slice_error)
  ------------------
  |  Branch (341:8): [True: 2.51k, False: 1.15M]
  ------------------
  342|  2.51k|        s_nal.i1_nal_unit_type = ps_codec->s_parse.ps_slice_hdr->i1_nal_unit_type;
  343|       |
  344|       |    /* Setting RASL Output flag */
  345|  1.15M|    switch(s_nal.i1_nal_unit_type)
  346|  1.15M|    {
  347|  1.66k|        case NAL_BLA_W_LP    :
  ------------------
  |  Branch (347:9): [True: 1.66k, False: 1.15M]
  ------------------
  348|  3.02k|        case NAL_BLA_W_DLP   :
  ------------------
  |  Branch (348:9): [True: 1.35k, False: 1.15M]
  ------------------
  349|  4.72k|        case NAL_BLA_N_LP    :
  ------------------
  |  Branch (349:9): [True: 1.70k, False: 1.15M]
  ------------------
  350|  4.72k|            ps_codec->i4_rasl_output_flag = 0;
  351|  4.72k|            break;
  352|       |
  353|       |        //TODO: After IDR, there is no case of open GOP
  354|       |        //To be fixed appropriately by ignoring RASL only if the
  355|       |        // required references are not found
  356|  3.52k|        case NAL_IDR_W_LP    :
  ------------------
  |  Branch (356:9): [True: 3.52k, False: 1.15M]
  ------------------
  357|  10.6k|        case NAL_IDR_N_LP    :
  ------------------
  |  Branch (357:9): [True: 7.17k, False: 1.15M]
  ------------------
  358|  10.6k|            ps_codec->i4_rasl_output_flag = 1;
  359|  10.6k|            break;
  360|       |
  361|  2.18k|        case NAL_CRA         :
  ------------------
  |  Branch (361:9): [True: 2.18k, False: 1.15M]
  ------------------
  362|  2.18k|            ps_codec->i4_rasl_output_flag = (0 != ps_codec->i4_cra_as_first_pic) ? 0 : 1;
  ------------------
  |  Branch (362:45): [True: 1.05k, False: 1.12k]
  ------------------
  363|  2.18k|            break;
  364|       |
  365|  1.14M|        default:
  ------------------
  |  Branch (365:9): [True: 1.14M, False: 17.6k]
  ------------------
  366|  1.14M|            break;
  367|  1.15M|    }
  368|       |
  369|  1.15M|    switch(s_nal.i1_nal_unit_type)
  370|  1.15M|    {
  371|  1.66k|        case NAL_BLA_W_LP    :
  ------------------
  |  Branch (371:9): [True: 1.66k, False: 1.15M]
  ------------------
  372|  3.02k|        case NAL_BLA_W_DLP   :
  ------------------
  |  Branch (372:9): [True: 1.35k, False: 1.15M]
  ------------------
  373|  4.72k|        case NAL_BLA_N_LP    :
  ------------------
  |  Branch (373:9): [True: 1.70k, False: 1.15M]
  ------------------
  374|  8.25k|        case NAL_IDR_W_LP    :
  ------------------
  |  Branch (374:9): [True: 3.52k, False: 1.15M]
  ------------------
  375|  15.4k|        case NAL_IDR_N_LP    :
  ------------------
  |  Branch (375:9): [True: 7.17k, False: 1.15M]
  ------------------
  376|  17.6k|        case NAL_CRA         :
  ------------------
  |  Branch (376:9): [True: 2.18k, False: 1.15M]
  ------------------
  377|  1.09M|        case NAL_TRAIL_N     :
  ------------------
  |  Branch (377:9): [True: 1.07M, False: 77.9k]
  ------------------
  378|  1.10M|        case NAL_TRAIL_R     :
  ------------------
  |  Branch (378:9): [True: 3.45k, False: 1.15M]
  ------------------
  379|  1.10M|        case NAL_TSA_N       :
  ------------------
  |  Branch (379:9): [True: 898, False: 1.15M]
  ------------------
  380|  1.10M|        case NAL_TSA_R       :
  ------------------
  |  Branch (380:9): [True: 267, False: 1.15M]
  ------------------
  381|  1.10M|        case NAL_STSA_N      :
  ------------------
  |  Branch (381:9): [True: 4.67k, False: 1.15M]
  ------------------
  382|  1.10M|        case NAL_STSA_R      :
  ------------------
  |  Branch (382:9): [True: 409, False: 1.15M]
  ------------------
  383|  1.10M|        case NAL_RADL_N      :
  ------------------
  |  Branch (383:9): [True: 64, False: 1.15M]
  ------------------
  384|  1.11M|        case NAL_RADL_R      :
  ------------------
  |  Branch (384:9): [True: 8.80k, False: 1.14M]
  ------------------
  385|  1.11M|        case NAL_RASL_N      :
  ------------------
  |  Branch (385:9): [True: 99, False: 1.15M]
  ------------------
  386|  1.11M|        case NAL_RASL_R      :
  ------------------
  |  Branch (386:9): [True: 1.53k, False: 1.15M]
  ------------------
  387|  1.11M|            if(ps_codec->i4_header_mode)
  ------------------
  |  Branch (387:16): [True: 1.09M, False: 25.1k]
  ------------------
  388|  1.09M|                return IHEVCD_SLICE_IN_HEADER_MODE;
  389|       |
  390|  25.1k|            if((0 == ps_codec->i4_sps_done) ||
  ------------------
  |  Branch (390:16): [True: 501, False: 24.6k]
  ------------------
  391|  25.1k|                            (0 == ps_codec->i4_pps_done))
  ------------------
  |  Branch (391:29): [True: 695, False: 23.9k]
  ------------------
  392|  1.19k|            {
  393|  1.19k|                return IHEVCD_INVALID_HEADER;
  394|  1.19k|            }
  395|       |
  396|  23.9k|            ps_codec->i4_header_in_slice_mode = 0;
  397|  23.9k|            ps_codec->i4_cra_as_first_pic = 0;
  398|       |
  399|  23.9k|            ret = ihevcd_parse_slice_header(ps_codec, &s_nal);
  400|  23.9k|            DEBUG_PRINT_NAL_INFO(ps_codec, s_nal.i1_nal_unit_type);
  401|  23.9k|            if(ret == (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (401:16): [True: 10.1k, False: 13.8k]
  ------------------
  402|  10.1k|            {
  403|  10.1k|                if((s_nal.i1_nal_unit_type != NAL_RASL_N && s_nal.i1_nal_unit_type != NAL_RASL_R) ||
  ------------------
  |  Branch (403:21): [True: 10.1k, False: 7]
  |  Branch (403:61): [True: 10.0k, False: 101]
  ------------------
  404|  10.1k|                                ps_codec->i4_rasl_output_flag ||
  ------------------
  |  Branch (404:33): [True: 7, False: 101]
  ------------------
  405|  10.1k|                                ps_codec->i4_slice_error)
  ------------------
  |  Branch (405:33): [True: 26, False: 75]
  ------------------
  406|  10.0k|                    ret = ihevcd_parse_slice_data(ps_codec);
  407|  10.1k|            }
  408|  23.9k|            break;
  409|       |
  410|    385|        case NAL_VPS        :
  ------------------
  |  Branch (410:9): [True: 385, False: 1.15M]
  ------------------
  411|       |            // ret = ihevcd_parse_vps(ps_codec);
  412|    385|            DEBUG_PRINT_NAL_INFO(ps_codec, s_nal.i1_nal_unit_type);
  413|    385|            break;
  414|       |
  415|  24.4k|        case NAL_SPS        :
  ------------------
  |  Branch (415:9): [True: 24.4k, False: 1.13M]
  ------------------
  416|  24.4k|            if(0 == ps_codec->i4_header_mode)
  ------------------
  |  Branch (416:16): [True: 14.9k, False: 9.50k]
  ------------------
  417|  14.9k|            {
  418|  14.9k|                ps_codec->i4_header_in_slice_mode = 1;
  419|  14.9k|                if(ps_codec->i4_sps_done &&
  ------------------
  |  Branch (419:20): [True: 14.3k, False: 658]
  ------------------
  420|  14.9k|                                ps_codec->i4_pic_present)
  ------------------
  |  Branch (420:33): [True: 771, False: 13.5k]
  ------------------
  421|    771|                    break;
  422|  14.9k|            }
  423|       |
  424|  23.7k|            ret = ihevcd_parse_sps(ps_codec);
  425|  23.7k|            if(ret == (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (425:16): [True: 1.71k, False: 21.9k]
  ------------------
  426|  1.71k|            {
  427|  1.71k|                sps_t *ps_sps = ps_codec->ps_sps_base + MAX_SPS_CNT - 1;
  ------------------
  |  |  317|  1.71k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  428|  1.71k|                ihevcd_copy_sps(ps_codec, ps_sps->i1_sps_id, MAX_SPS_CNT - 1);
  ------------------
  |  |  317|  1.71k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  429|  1.71k|            }
  430|  23.7k|            ps_codec->i4_error_code = ret;
  431|       |
  432|  23.7k|            DEBUG_PRINT_NAL_INFO(ps_codec, s_nal.i1_nal_unit_type);
  433|  23.7k|            break;
  434|       |
  435|  7.71k|        case NAL_PPS        :
  ------------------
  |  Branch (435:9): [True: 7.71k, False: 1.15M]
  ------------------
  436|  7.71k|            if(0 == ps_codec->i4_header_mode)
  ------------------
  |  Branch (436:16): [True: 6.13k, False: 1.57k]
  ------------------
  437|  6.13k|            {
  438|  6.13k|                ps_codec->i4_header_in_slice_mode = 1;
  439|  6.13k|                if(ps_codec->i4_pps_done &&
  ------------------
  |  Branch (439:20): [True: 5.25k, False: 874]
  ------------------
  440|  6.13k|                                ps_codec->i4_pic_present)
  ------------------
  |  Branch (440:33): [True: 1.56k, False: 3.69k]
  ------------------
  441|  1.56k|                    break;
  442|  6.13k|            }
  443|       |
  444|  6.14k|            ret = ihevcd_parse_pps(ps_codec);
  445|  6.14k|            if(ret == (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (445:16): [True: 3.73k, False: 2.41k]
  ------------------
  446|  3.73k|            {
  447|  3.73k|                pps_t *ps_pps = ps_codec->ps_pps_base + MAX_PPS_CNT - 1;
  ------------------
  |  |  334|  3.73k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  448|  3.73k|                ihevcd_copy_pps(ps_codec, ps_pps->i1_pps_id, MAX_PPS_CNT - 1);
  ------------------
  |  |  334|  3.73k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  449|  3.73k|            }
  450|  6.14k|            ps_codec->i4_error_code = ret;
  451|  6.14k|            DEBUG_PRINT_NAL_INFO(ps_codec, s_nal.i1_nal_unit_type);
  452|  6.14k|            break;
  453|       |
  454|  1.96k|        case NAL_PREFIX_SEI:
  ------------------
  |  Branch (454:9): [True: 1.96k, False: 1.15M]
  ------------------
  455|  2.06k|        case NAL_SUFFIX_SEI:
  ------------------
  |  Branch (455:9): [True: 102, False: 1.15M]
  ------------------
  456|  2.06k|            if(IVD_DECODE_HEADER == ps_codec->i4_header_mode)
  ------------------
  |  Branch (456:16): [True: 483, False: 1.58k]
  ------------------
  457|    483|            {
  458|    483|                return IHEVCD_SLICE_IN_HEADER_MODE;
  459|    483|            }
  460|       |
  461|  1.58k|            ret = ihevcd_parse_sei(ps_codec, &s_nal);
  462|  1.58k|            break;
  463|       |
  464|     44|        case NAL_EOS        :
  ------------------
  |  Branch (464:9): [True: 44, False: 1.15M]
  ------------------
  465|     44|            ps_codec->i4_cra_as_first_pic = 1;
  466|     44|            break;
  467|       |
  468|  5.47k|        default:
  ------------------
  |  Branch (468:9): [True: 5.47k, False: 1.15M]
  ------------------
  469|  5.47k|            DEBUG_PRINT_NAL_INFO(ps_codec, s_nal.i1_nal_unit_type);
  470|  5.47k|            break;
  471|  1.15M|    }
  472|       |
  473|  63.6k|    return ret;
  474|  1.15M|}

ihevcd_parse_pred_wt_ofst:
  152|  1.18k|{
  153|  1.18k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  154|  1.18k|    WORD32 value;
  155|  1.18k|    UWORD32 u4_value;
  156|  1.18k|    WORD32 i;
  157|       |
  158|  1.18k|    pred_wt_ofst_t *ps_wt_ofst = &ps_slice_hdr->s_wt_ofst;
  159|  1.18k|    UNUSED(ps_pps);
  ------------------
  |  |   38|  1.18k|#define UNUSED(x) ((void)(x))
  ------------------
  160|       |
  161|  1.18k|    UEV_PARSE("luma_log2_weight_denom", u4_value, ps_bitstrm);
  ------------------
  |  |  155|  1.18k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  162|  1.18k|    if(u4_value > 7)
  ------------------
  |  Branch (162:8): [True: 678, False: 511]
  ------------------
  163|    678|    {
  164|    678|        return IHEVCD_INVALID_PARAMETER;
  165|    678|    }
  166|    511|    ps_wt_ofst->i1_luma_log2_weight_denom = u4_value;
  167|       |
  168|    511|    if(ps_sps->i1_chroma_format_idc != 0)
  ------------------
  |  Branch (168:8): [True: 511, False: 0]
  ------------------
  169|    511|    {
  170|    511|        SEV_PARSE("delta_chroma_log2_weight_denom", value, ps_bitstrm);
  ------------------
  |  |  162|    511|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  171|    511|        if((value < -7) || (value > 7))
  ------------------
  |  Branch (171:12): [True: 8, False: 503]
  |  Branch (171:28): [True: 16, False: 487]
  ------------------
  172|     24|        {
  173|     24|            return IHEVCD_INVALID_PARAMETER;
  174|     24|        }
  175|       |
  176|    487|        if(((ps_wt_ofst->i1_luma_log2_weight_denom + value) < 0) ||
  ------------------
  |  Branch (176:12): [True: 13, False: 474]
  ------------------
  177|    487|                ((ps_wt_ofst->i1_luma_log2_weight_denom + value) > 7))
  ------------------
  |  Branch (177:17): [True: 0, False: 474]
  ------------------
  178|     13|        {
  179|     13|            return IHEVCD_INVALID_PARAMETER;
  180|     13|        }
  181|    474|        ps_wt_ofst->i1_chroma_log2_weight_denom = ps_wt_ofst->i1_luma_log2_weight_denom + value;
  182|    474|    }
  183|       |
  184|  1.85k|    for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (184:16): [True: 1.37k, False: 474]
  ------------------
  185|  1.37k|    {
  186|  1.37k|        BITS_PARSE("luma_weight_l0_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.37k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  187|  1.37k|        ps_wt_ofst->i1_luma_weight_l0_flag[i] = value;
  188|  1.37k|    }
  189|       |
  190|       |
  191|       |
  192|    474|    if(ps_sps->i1_chroma_format_idc != 0)
  ------------------
  |  Branch (192:8): [True: 474, False: 0]
  ------------------
  193|    474|    {
  194|  1.85k|        for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (194:20): [True: 1.37k, False: 474]
  ------------------
  195|  1.37k|        {
  196|  1.37k|            BITS_PARSE("chroma_weight_l0_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.37k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  197|  1.37k|            ps_wt_ofst->i1_chroma_weight_l0_flag[i] = value;
  198|  1.37k|        }
  199|    474|    }
  200|      0|    else
  201|      0|    {
  202|      0|        for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (202:20): [True: 0, False: 0]
  ------------------
  203|      0|        {
  204|      0|            ps_wt_ofst->i1_chroma_weight_l0_flag[i] = 0;
  205|      0|        }
  206|      0|    }
  207|       |
  208|       |
  209|  1.43k|    for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (209:16): [True: 1.02k, False: 407]
  ------------------
  210|  1.02k|    {
  211|  1.02k|        if(ps_wt_ofst->i1_luma_weight_l0_flag[i])
  ------------------
  |  Branch (211:12): [True: 429, False: 597]
  ------------------
  212|    429|        {
  213|    429|            SEV_PARSE("delta_luma_weight_l0[ i ]", value, ps_bitstrm);
  ------------------
  |  |  162|    429|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  214|    429|            if( value < -128 || value > 127 )
  ------------------
  |  Branch (214:17): [True: 27, False: 402]
  |  Branch (214:33): [True: 7, False: 395]
  ------------------
  215|     34|            {
  216|     34|                return IHEVCD_INVALID_PARAMETER;
  217|     34|            }
  218|       |
  219|    395|            ps_wt_ofst->i2_luma_weight_l0[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom) + value;
  220|       |
  221|    395|            SEV_PARSE("luma_offset_l0[ i ]", value, ps_bitstrm);
  ------------------
  |  |  162|    395|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  222|    395|            if( value < -128 || value > 127 )
  ------------------
  |  Branch (222:17): [True: 0, False: 395]
  |  Branch (222:33): [True: 3, False: 392]
  ------------------
  223|      3|            {
  224|      3|                return IHEVCD_INVALID_PARAMETER;
  225|      3|            }
  226|    392|            ps_wt_ofst->i2_luma_offset_l0[i] = value;
  227|       |
  228|    392|        }
  229|    597|        else
  230|    597|        {
  231|    597|            ps_wt_ofst->i2_luma_weight_l0[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom);
  232|    597|            ps_wt_ofst->i2_luma_offset_l0[i] = 0;
  233|    597|        }
  234|    989|        if(ps_wt_ofst->i1_chroma_weight_l0_flag[i])
  ------------------
  |  Branch (234:12): [True: 325, False: 664]
  ------------------
  235|    325|        {
  236|    325|            WORD32 ofst;
  237|    325|            WORD32 shift = (1 << (BIT_DEPTH_CHROMA - 1));
  ------------------
  |  |  271|    325|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|    325|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  238|    325|            SEV_PARSE("delta_chroma_weight_l0[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    325|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  239|    325|            if(value < -128 || value > 127)
  ------------------
  |  Branch (239:16): [True: 0, False: 325]
  |  Branch (239:32): [True: 0, False: 325]
  ------------------
  240|      0|            {
  241|      0|                return IHEVCD_INVALID_PARAMETER;
  242|      0|            }
  243|    325|            ps_wt_ofst->i2_chroma_weight_l0_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value;
  244|       |
  245|       |
  246|    325|            SEV_PARSE("delta_chroma_offset_l0[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    325|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  247|    325|            if( value < -512 || value > 511 )
  ------------------
  |  Branch (247:17): [True: 0, False: 325]
  |  Branch (247:33): [True: 1, False: 324]
  ------------------
  248|      1|            {
  249|      1|                return IHEVCD_INVALID_PARAMETER;
  250|      1|            }
  251|    324|            ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l0_cb[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom);
  252|    324|            ofst = value - ofst + shift;
  253|       |
  254|    324|            ps_wt_ofst->i2_chroma_offset_l0_cb[i] = CLIP_S8(ofst);
  ------------------
  |  |   41|    324|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|    324|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 6, False: 318]
  |  |  |  |  |  Branch (40:53): [True: 3, False: 315]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|       |
  256|    324|            SEV_PARSE("delta_chroma_weight_l0[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    324|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  257|    324|            if(value < -128 || value > 127)
  ------------------
  |  Branch (257:16): [True: 4, False: 320]
  |  Branch (257:32): [True: 2, False: 318]
  ------------------
  258|      6|            {
  259|      6|                return IHEVCD_INVALID_PARAMETER;
  260|      6|            }
  261|    318|            ps_wt_ofst->i2_chroma_weight_l0_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value;
  262|       |
  263|       |
  264|    318|            SEV_PARSE("delta_chroma_offset_l0[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    318|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  265|    318|            if( value < -512 || value > 511 )
  ------------------
  |  Branch (265:17): [True: 23, False: 295]
  |  Branch (265:33): [True: 0, False: 295]
  ------------------
  266|     23|            {
  267|     23|                return IHEVCD_INVALID_PARAMETER;
  268|     23|            }
  269|    295|            ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l0_cr[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom);
  270|    295|            ofst = value - ofst + shift;
  271|       |
  272|    295|            ps_wt_ofst->i2_chroma_offset_l0_cr[i] = CLIP_S8(ofst);
  ------------------
  |  |   41|    295|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|    295|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 3, False: 292]
  |  |  |  |  |  Branch (40:53): [True: 11, False: 281]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  273|       |
  274|    295|        }
  275|    664|        else
  276|    664|        {
  277|    664|            ps_wt_ofst->i2_chroma_weight_l0_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom);
  278|    664|            ps_wt_ofst->i2_chroma_weight_l0_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom);
  279|       |
  280|    664|            ps_wt_ofst->i2_chroma_offset_l0_cb[i] = 0;
  281|    664|            ps_wt_ofst->i2_chroma_offset_l0_cr[i] = 0;
  282|    664|        }
  283|    989|    }
  284|    407|    if(BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (284:8): [True: 334, False: 73]
  ------------------
  285|    334|    {
  286|    789|        for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (286:20): [True: 455, False: 334]
  ------------------
  287|    455|        {
  288|    455|            BITS_PARSE("luma_weight_l1_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    455|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  289|    455|            ps_wt_ofst->i1_luma_weight_l1_flag[i] = value;
  290|    455|        }
  291|       |
  292|    334|        if(ps_sps->i1_chroma_format_idc != 0)
  ------------------
  |  Branch (292:12): [True: 334, False: 0]
  ------------------
  293|    334|        {
  294|    789|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (294:24): [True: 455, False: 334]
  ------------------
  295|    455|            {
  296|    455|                BITS_PARSE("chroma_weight_l1_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    455|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  297|    455|                ps_wt_ofst->i1_chroma_weight_l1_flag[i] = value;
  298|    455|            }
  299|    334|        }
  300|      0|        else
  301|      0|        {
  302|      0|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (302:24): [True: 0, False: 0]
  ------------------
  303|      0|            {
  304|      0|                ps_wt_ofst->i1_chroma_weight_l1_flag[i] = 0;
  305|      0|            }
  306|      0|        }
  307|       |
  308|    758|        for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (308:20): [True: 455, False: 303]
  ------------------
  309|    455|        {
  310|    455|            if(ps_wt_ofst->i1_luma_weight_l1_flag[i])
  ------------------
  |  Branch (310:16): [True: 201, False: 254]
  ------------------
  311|    201|            {
  312|    201|                SEV_PARSE("delta_luma_weight_l1[ i ]", value, ps_bitstrm);
  ------------------
  |  |  162|    201|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  313|    201|                if( value < -128 || value > 127 )
  ------------------
  |  Branch (313:21): [True: 0, False: 201]
  |  Branch (313:37): [True: 0, False: 201]
  ------------------
  314|      0|                {
  315|      0|                    return IHEVCD_INVALID_PARAMETER;
  316|      0|                }
  317|       |
  318|    201|                ps_wt_ofst->i2_luma_weight_l1[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom) + value;
  319|       |
  320|    201|                SEV_PARSE("luma_offset_l1[ i ]", value, ps_bitstrm);
  ------------------
  |  |  162|    201|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  321|    201|                if( value < -128 || value > 127 )
  ------------------
  |  Branch (321:21): [True: 0, False: 201]
  |  Branch (321:37): [True: 0, False: 201]
  ------------------
  322|      0|                {
  323|      0|                    return IHEVCD_INVALID_PARAMETER;
  324|      0|                }
  325|    201|                ps_wt_ofst->i2_luma_offset_l1[i] = value;
  326|       |
  327|    201|            }
  328|    254|            else
  329|    254|            {
  330|    254|                ps_wt_ofst->i2_luma_weight_l1[i] = (1 << ps_wt_ofst->i1_luma_log2_weight_denom);
  331|    254|                ps_wt_ofst->i2_luma_offset_l1[i] = 0;
  332|    254|            }
  333|       |
  334|    455|            if(ps_wt_ofst->i1_chroma_weight_l1_flag[i])
  ------------------
  |  Branch (334:16): [True: 211, False: 244]
  ------------------
  335|    211|            {
  336|    211|                WORD32 ofst;
  337|    211|                WORD32 shift = (1 << (BIT_DEPTH_CHROMA - 1));
  ------------------
  |  |  271|    211|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|    211|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  338|    211|                SEV_PARSE("delta_chroma_weight_l1[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    211|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  339|    211|                if(value < -128 || value > 127)
  ------------------
  |  Branch (339:20): [True: 0, False: 211]
  |  Branch (339:36): [True: 0, False: 211]
  ------------------
  340|      0|                {
  341|      0|                    return IHEVCD_INVALID_PARAMETER;
  342|      0|                }
  343|    211|                ps_wt_ofst->i2_chroma_weight_l1_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value;;
  344|       |
  345|       |
  346|    211|                SEV_PARSE("delta_chroma_offset_l1[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    211|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  347|    211|                if( value < -512 || value > 511 )
  ------------------
  |  Branch (347:21): [True: 0, False: 211]
  |  Branch (347:37): [True: 31, False: 180]
  ------------------
  348|     31|                {
  349|     31|                    return IHEVCD_INVALID_PARAMETER;
  350|     31|                }
  351|    180|                ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l1_cb[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom);
  352|    180|                ofst = value - ofst + shift;
  353|       |
  354|    180|                ps_wt_ofst->i2_chroma_offset_l1_cb[i] = CLIP_S8(ofst);;
  ------------------
  |  |   41|    180|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|    180|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 7, False: 173]
  |  |  |  |  |  Branch (40:53): [True: 1, False: 172]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|       |
  356|    180|                SEV_PARSE("delta_chroma_weight_l1[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    180|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  357|    180|                if(value < -128 || value > 127)
  ------------------
  |  Branch (357:20): [True: 0, False: 180]
  |  Branch (357:36): [True: 0, False: 180]
  ------------------
  358|      0|                {
  359|      0|                    return IHEVCD_INVALID_PARAMETER;
  360|      0|                }
  361|    180|                ps_wt_ofst->i2_chroma_weight_l1_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom) + value;
  362|       |
  363|       |
  364|    180|                SEV_PARSE("delta_chroma_offset_l1[ i ][ j ]", value, ps_bitstrm);
  ------------------
  |  |  162|    180|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  365|    180|                if( value < -512 || value > 511 )
  ------------------
  |  Branch (365:21): [True: 0, False: 180]
  |  Branch (365:37): [True: 0, False: 180]
  ------------------
  366|      0|                {
  367|      0|                    return IHEVCD_INVALID_PARAMETER;
  368|      0|                }
  369|    180|                ofst = ((shift * ps_wt_ofst->i2_chroma_weight_l1_cr[i]) >> ps_wt_ofst->i1_chroma_log2_weight_denom);
  370|    180|                ofst = value - ofst + shift;
  371|       |
  372|    180|                ps_wt_ofst->i2_chroma_offset_l1_cr[i] = CLIP_S8(ofst);;
  ------------------
  |  |   41|    180|#define CLIP_S8(x) CLIP3((x), -128,  127);
  |  |  ------------------
  |  |  |  |   40|    180|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 14, False: 166]
  |  |  |  |  |  Branch (40:53): [True: 111, False: 55]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|       |
  374|    180|            }
  375|    244|            else
  376|    244|            {
  377|    244|                ps_wt_ofst->i2_chroma_weight_l1_cb[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom);
  378|    244|                ps_wt_ofst->i2_chroma_weight_l1_cr[i] = (1 << ps_wt_ofst->i1_chroma_log2_weight_denom);
  379|       |
  380|    244|                ps_wt_ofst->i2_chroma_offset_l1_cb[i] = 0;
  381|    244|                ps_wt_ofst->i2_chroma_offset_l1_cr[i] = 0;
  382|       |
  383|    244|            }
  384|    455|        }
  385|    334|    }
  386|    376|    return ret;
  387|    407|}
ihevcd_short_term_ref_pic_set:
  422|  8.84k|{
  423|  8.84k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  424|  8.84k|    UWORD32 value;
  425|  8.84k|    stref_picset_t *ps_stref_picset_ref;
  426|  8.84k|    WORD32 delta_idx, delta_rps;
  427|  8.84k|    WORD32 r_idx;
  428|  8.84k|    WORD32 i;
  429|  8.84k|    WORD32 j, k, temp;
  430|  8.84k|    if(idx > 0)
  ------------------
  |  Branch (430:8): [True: 6.95k, False: 1.88k]
  ------------------
  431|  6.95k|    {
  432|  6.95k|        BITS_PARSE("inter_ref_pic_set_prediction_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  6.95k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  433|  6.95k|        ps_stref_picset->i1_inter_ref_pic_set_prediction_flag = value;
  434|  6.95k|    }
  435|  1.88k|    else
  436|  1.88k|        ps_stref_picset->i1_inter_ref_pic_set_prediction_flag = 0;
  437|       |
  438|  8.84k|    if(ps_stref_picset->i1_inter_ref_pic_set_prediction_flag)
  ------------------
  |  Branch (438:8): [True: 6.07k, False: 2.77k]
  ------------------
  439|  6.07k|    {
  440|  6.07k|        WORD32 delta_rps_sign;
  441|  6.07k|        WORD32 abs_delta_rps;
  442|  6.07k|        WORD32 num_neg_pics = 0;
  443|  6.07k|        WORD32 num_pos_pics = 0;
  444|  6.07k|        WORD32 num_pics = 0;
  445|       |
  446|  6.07k|        if(idx == num_short_term_ref_pic_sets)
  ------------------
  |  Branch (446:12): [True: 455, False: 5.61k]
  ------------------
  447|    455|        {
  448|    455|            UEV_PARSE("delta_idx_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|    455|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  449|    455|            if(value > num_short_term_ref_pic_sets - 1)
  ------------------
  |  Branch (449:16): [True: 74, False: 381]
  ------------------
  450|     74|            {
  451|     74|                return IHEVCD_INVALID_PARAMETER;
  452|     74|            }
  453|    381|            delta_idx = value + 1;
  454|    381|        }
  455|  5.61k|        else
  456|  5.61k|        {
  457|  5.61k|            delta_idx = 1;
  458|  5.61k|        }
  459|  5.99k|        r_idx = idx - delta_idx;
  460|  5.99k|        r_idx = CLIP3(r_idx, 0, idx - 1);
  ------------------
  |  |   40|  5.99k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 5.99k]
  |  |  |  Branch (40:53): [True: 0, False: 5.99k]
  |  |  ------------------
  ------------------
  461|       |
  462|  5.99k|        ps_stref_picset_ref = ps_stref_picset_base + r_idx;
  463|       |
  464|  5.99k|        BITS_PARSE("delta_rps_sign", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  5.99k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  465|  5.99k|        delta_rps_sign = value;
  466|       |
  467|  5.99k|        UEV_PARSE("abs_delta_rps_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  5.99k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  468|  5.99k|        if(value > 32767)
  ------------------
  |  Branch (468:12): [True: 3, False: 5.99k]
  ------------------
  469|      3|        {
  470|      3|            return IHEVCD_INVALID_PARAMETER;
  471|      3|        }
  472|  5.99k|        abs_delta_rps = value + 1;
  473|       |
  474|  5.99k|        delta_rps = (1 - 2 * delta_rps_sign) * (abs_delta_rps);
  475|       |
  476|       |
  477|       |
  478|  35.7k|        for(i = 0; i <= ps_stref_picset_ref->i1_num_delta_pocs; i++)
  ------------------
  |  Branch (478:20): [True: 29.7k, False: 5.99k]
  ------------------
  479|  29.7k|        {
  480|  29.7k|            WORD32 ref_idc;
  481|       |
  482|       |            /*****************************************************************/
  483|       |            /* ref_idc is parsed as below                                    */
  484|       |            /* bits "1" ref_idc 1                                            */
  485|       |            /* bits "01" ref_idc 2                                           */
  486|       |            /* bits "00" ref_idc 0                                           */
  487|       |            /*****************************************************************/
  488|  29.7k|            BITS_PARSE("used_by_curr_pic_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  29.7k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  489|  29.7k|            ref_idc = value;
  490|  29.7k|            ps_stref_picset->ai1_used[num_pics] = value;
  491|       |            /* If ref_idc is zero check for next bit */
  492|  29.7k|            if(0 == ref_idc)
  ------------------
  |  Branch (492:16): [True: 4.89k, False: 24.8k]
  ------------------
  493|  4.89k|            {
  494|  4.89k|                BITS_PARSE("use_delta_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.89k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  495|  4.89k|                ref_idc = value << 1;
  496|  4.89k|            }
  497|  29.7k|            if((ref_idc == 1) || (ref_idc == 2))
  ------------------
  |  Branch (497:16): [True: 24.8k, False: 4.89k]
  |  Branch (497:34): [True: 281, False: 4.61k]
  ------------------
  498|  25.0k|            {
  499|  25.0k|                WORD32 delta_poc;
  500|  25.0k|                delta_poc = delta_rps;
  501|  25.0k|                delta_poc +=
  502|  25.0k|                                ((i < ps_stref_picset_ref->i1_num_delta_pocs) ?
  ------------------
  |  Branch (502:34): [True: 21.2k, False: 3.81k]
  ------------------
  503|  21.2k|                                ps_stref_picset_ref->ai2_delta_poc[i] :
  504|  25.0k|                                0);
  505|       |
  506|  25.0k|                ps_stref_picset->ai2_delta_poc[num_pics] = delta_poc;
  507|       |
  508|  25.0k|                if(delta_poc < 0)
  ------------------
  |  Branch (508:20): [True: 13.0k, False: 12.0k]
  ------------------
  509|  13.0k|                {
  510|  13.0k|                    num_neg_pics++;
  511|  13.0k|                }
  512|  12.0k|                else
  513|  12.0k|                {
  514|  12.0k|                    num_pos_pics++;
  515|  12.0k|                }
  516|  25.0k|                num_pics++;
  517|  25.0k|            }
  518|  29.7k|            ps_stref_picset->ai1_ref_idc[i] = ref_idc;
  519|  29.7k|        }
  520|       |
  521|  5.99k|        num_neg_pics = CLIP3(num_neg_pics, 0, MAX_DPB_SIZE - 1);
  ------------------
  |  |   40|  5.99k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 5.99k]
  |  |  |  Branch (40:53): [True: 0, False: 5.99k]
  |  |  ------------------
  ------------------
  522|  5.99k|        num_pos_pics = CLIP3(num_pos_pics, 0, (MAX_DPB_SIZE - 1 - num_neg_pics));
  ------------------
  |  |   40|  5.99k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 5.99k]
  |  |  |  Branch (40:53): [True: 0, False: 5.99k]
  |  |  ------------------
  ------------------
  523|  5.99k|        num_pics = num_neg_pics + num_pos_pics;
  524|       |
  525|  5.99k|        ps_stref_picset->i1_num_ref_idc =
  526|  5.99k|                        ps_stref_picset_ref->i1_num_delta_pocs + 1;
  527|  5.99k|        ps_stref_picset->i1_num_delta_pocs = num_pics;
  528|  5.99k|        ps_stref_picset->i1_num_pos_pics = num_pos_pics;
  529|  5.99k|        ps_stref_picset->i1_num_neg_pics = num_neg_pics;
  530|       |
  531|       |
  532|  25.1k|        for(j = 1; j < num_pics; j++)
  ------------------
  |  Branch (532:20): [True: 19.1k, False: 5.99k]
  ------------------
  533|  19.1k|        {
  534|  19.1k|            WORD32 delta_poc = ps_stref_picset->ai2_delta_poc[j];
  535|  19.1k|            WORD8 i1_used = ps_stref_picset->ai1_used[j];
  536|  62.9k|            for(k = j - 1; k >= 0; k--)
  ------------------
  |  Branch (536:28): [True: 43.8k, False: 19.1k]
  ------------------
  537|  43.8k|            {
  538|  43.8k|                temp = ps_stref_picset->ai2_delta_poc[k];
  539|  43.8k|                if(delta_poc < temp)
  ------------------
  |  Branch (539:20): [True: 11.2k, False: 32.5k]
  ------------------
  540|  11.2k|                {
  541|  11.2k|                    ps_stref_picset->ai2_delta_poc[k + 1] = temp;
  542|  11.2k|                    ps_stref_picset->ai1_used[k + 1] = ps_stref_picset->ai1_used[k];
  543|  11.2k|                    ps_stref_picset->ai2_delta_poc[k] = delta_poc;
  544|  11.2k|                    ps_stref_picset->ai1_used[k] = i1_used;
  545|  11.2k|                }
  546|  43.8k|            }
  547|  19.1k|        }
  548|       |        // flip the negative values to largest first
  549|  11.1k|        for(j = 0, k = num_neg_pics - 1; j < num_neg_pics >> 1; j++, k--)
  ------------------
  |  Branch (549:42): [True: 5.13k, False: 5.99k]
  ------------------
  550|  5.13k|        {
  551|  5.13k|            WORD32 delta_poc = ps_stref_picset->ai2_delta_poc[j];
  552|  5.13k|            WORD8 i1_used = ps_stref_picset->ai1_used[j];
  553|  5.13k|            ps_stref_picset->ai2_delta_poc[j] = ps_stref_picset->ai2_delta_poc[k];
  554|  5.13k|            ps_stref_picset->ai1_used[j] = ps_stref_picset->ai1_used[k];
  555|  5.13k|            ps_stref_picset->ai2_delta_poc[k] = delta_poc;
  556|  5.13k|            ps_stref_picset->ai1_used[k] = i1_used;
  557|  5.13k|        }
  558|       |
  559|  5.99k|    }
  560|  2.77k|    else
  561|  2.77k|    {
  562|  2.77k|        WORD32 prev_poc = 0;
  563|  2.77k|        WORD32 poc;
  564|       |
  565|  2.77k|        UEV_PARSE("num_negative_pics", value, ps_bitstrm);
  ------------------
  |  |  155|  2.77k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  566|  2.77k|        if(value > MAX_DPB_SIZE - 1)
  ------------------
  |  |  281|  2.77k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (566:12): [True: 208, False: 2.56k]
  ------------------
  567|    208|        {
  568|    208|            return IHEVCD_INVALID_PARAMETER;
  569|    208|        }
  570|  2.56k|        ps_stref_picset->i1_num_neg_pics = value;
  571|       |
  572|  2.56k|        UEV_PARSE("num_positive_pics", value, ps_bitstrm);
  ------------------
  |  |  155|  2.56k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  573|  2.56k|        if(value > (MAX_DPB_SIZE - 1 - ps_stref_picset->i1_num_neg_pics))
  ------------------
  |  |  281|  2.56k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (573:12): [True: 41, False: 2.52k]
  ------------------
  574|     41|        {
  575|     41|            return IHEVCD_INVALID_PARAMETER;
  576|     41|        }
  577|  2.52k|        ps_stref_picset->i1_num_pos_pics = value;
  578|       |
  579|  2.52k|        ps_stref_picset->i1_num_delta_pocs =
  580|  2.52k|                        ps_stref_picset->i1_num_neg_pics +
  581|  2.52k|                        ps_stref_picset->i1_num_pos_pics;
  582|       |
  583|       |
  584|  6.21k|        for(i = 0; i < ps_stref_picset->i1_num_neg_pics; i++)
  ------------------
  |  Branch (584:20): [True: 3.69k, False: 2.51k]
  ------------------
  585|  3.69k|        {
  586|  3.69k|            UEV_PARSE("delta_poc_s0_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  3.69k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  587|  3.69k|            if(value > 32767)
  ------------------
  |  Branch (587:16): [True: 9, False: 3.68k]
  ------------------
  588|      9|            {
  589|      9|                return IHEVCD_INVALID_PARAMETER;
  590|      9|            }
  591|  3.68k|            poc = prev_poc - ((WORD32)(value + 1));
  592|  3.68k|            prev_poc = poc;
  593|  3.68k|            ps_stref_picset->ai2_delta_poc[i] = poc;
  594|       |
  595|  3.68k|            BITS_PARSE("used_by_curr_pic_s0_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.68k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  596|  3.68k|            ps_stref_picset->ai1_used[i] = value;
  597|       |
  598|  3.68k|        }
  599|  2.51k|        prev_poc = 0;
  600|  2.51k|        for(i = ps_stref_picset->i1_num_neg_pics;
  601|  3.94k|                        i < ps_stref_picset->i1_num_delta_pocs;
  ------------------
  |  Branch (601:25): [True: 1.46k, False: 2.47k]
  ------------------
  602|  2.51k|                        i++)
  603|  1.46k|        {
  604|  1.46k|            UEV_PARSE("delta_poc_s1_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  1.46k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  605|  1.46k|            if(value > 32767)
  ------------------
  |  Branch (605:16): [True: 39, False: 1.42k]
  ------------------
  606|     39|            {
  607|     39|                return IHEVCD_INVALID_PARAMETER;
  608|     39|            }
  609|  1.42k|            poc = prev_poc + (value + 1);
  610|  1.42k|            prev_poc = poc;
  611|  1.42k|            ps_stref_picset->ai2_delta_poc[i] = poc;
  612|       |
  613|  1.42k|            BITS_PARSE("used_by_curr_pic_s1_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.42k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  614|  1.42k|            ps_stref_picset->ai1_used[i] = value;
  615|       |
  616|  1.42k|        }
  617|       |
  618|  2.51k|    }
  619|       |
  620|  8.46k|    return ret;
  621|  8.84k|}
ihevcd_scaling_list_data:
 1170|  1.06k|{
 1171|  1.06k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1172|  1.06k|    WORD32 size_id;
 1173|  1.06k|    WORD32 matrix_id;
 1174|  1.06k|    WORD32 value, dc_value = 0;
 1175|  1.06k|    UWORD32 u4_value;
 1176|  1.06k|    WORD32 next_coef;
 1177|  1.06k|    WORD32 coef_num;
 1178|  1.06k|    WORD32 i, j, offset;
 1179|  1.06k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
 1180|  1.06k|    WORD16 *pi2_scaling_mat_offset;
 1181|  1.06k|    WORD32 scaling_mat_offset[] = { 0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040 };
 1182|  1.06k|    UWORD8 *scan_table;
 1183|       |
 1184|  2.44k|    for(size_id = 0; size_id < 4; size_id++)
  ------------------
  |  Branch (1184:22): [True: 2.14k, False: 303]
  ------------------
 1185|  2.14k|    {
 1186|  9.48k|        for(matrix_id = 0; matrix_id < ((size_id == 3) ? 2 : 6); matrix_id++)
  ------------------
  |  Branch (1186:28): [True: 8.09k, False: 1.38k]
  |  Branch (1186:41): [True: 956, False: 8.52k]
  ------------------
 1187|  8.09k|        {
 1188|  8.09k|            WORD32 scaling_list_pred_mode_flag;
 1189|  8.09k|            WORD32 scaling_list_delta_coef;
 1190|  8.09k|            BITS_PARSE("scaling_list_pred_mode_flag", scaling_list_pred_mode_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|  8.09k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1191|       |
 1192|  8.09k|            offset = size_id * 6 + matrix_id;
 1193|  8.09k|            pi2_scaling_mat_offset = pi2_scaling_mat + scaling_mat_offset[offset];
 1194|       |
 1195|  8.09k|            if(!scaling_list_pred_mode_flag)
  ------------------
  |  Branch (1195:16): [True: 6.17k, False: 1.92k]
  ------------------
 1196|  6.17k|            {
 1197|  6.17k|                WORD32 num_elements;
 1198|  6.17k|                UEV_PARSE("scaling_list_pred_matrix_id_delta", u4_value,
  ------------------
  |  |  155|  6.17k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1199|  6.17k|                          ps_bitstrm);
 1200|  6.17k|                if(u4_value > matrix_id)
  ------------------
  |  Branch (1200:20): [True: 604, False: 5.56k]
  ------------------
 1201|    604|                {
 1202|    604|                    return IHEVCD_INVALID_PARAMETER;
 1203|    604|                }
 1204|       |
 1205|  5.56k|                num_elements = (1 << (4 + (size_id << 1)));
 1206|  5.56k|                if(0 != u4_value)
  ------------------
  |  Branch (1206:20): [True: 5.50k, False: 60]
  ------------------
 1207|  5.50k|                    memmove(pi2_scaling_mat_offset, pi2_scaling_mat_offset - u4_value * num_elements, num_elements * sizeof(WORD16));
 1208|  5.56k|            }
 1209|  1.92k|            else
 1210|  1.92k|            {
 1211|  1.92k|                next_coef = 8;
 1212|  1.92k|                coef_num = MIN(64, (1 << (4 + (size_id << 1))));
  ------------------
  |  |   43|  1.92k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 734, False: 1.19k]
  |  |  ------------------
  ------------------
 1213|       |
 1214|  1.92k|                if(size_id > 1)
  ------------------
  |  Branch (1214:20): [True: 734, False: 1.19k]
  ------------------
 1215|    734|                {
 1216|    734|                    SEV_PARSE("scaling_list_dc_coef_minus8", value,
  ------------------
  |  |  162|    734|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 1217|    734|                              ps_bitstrm);
 1218|    734|                    if(value < -7 || value > 247)
  ------------------
  |  Branch (1218:24): [True: 2, False: 732]
  |  Branch (1218:38): [True: 0, False: 732]
  ------------------
 1219|      2|                    {
 1220|      2|                        return IHEVCD_INVALID_PARAMETER;
 1221|      2|                    }
 1222|    732|                    next_coef = value + 8;
 1223|    732|                    dc_value = next_coef;
 1224|    732|                }
 1225|  1.92k|                if(size_id < 2)
  ------------------
  |  Branch (1225:20): [True: 1.19k, False: 732]
  ------------------
 1226|  1.19k|                {
 1227|  1.19k|                    scan_table = (UWORD8 *)gapv_ihevc_invscan[size_id + 1];
 1228|       |
 1229|  42.1k|                    for(i = 0; i < coef_num; i++)
  ------------------
  |  Branch (1229:32): [True: 41.0k, False: 1.07k]
  ------------------
 1230|  41.0k|                    {
 1231|  41.0k|                        SEV_PARSE("scaling_list_delta_coef",
  ------------------
  |  |  162|  41.0k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 1232|  41.0k|                                  scaling_list_delta_coef, ps_bitstrm);
 1233|  41.0k|                        if((scaling_list_delta_coef < -256) || (scaling_list_delta_coef > 255))
  ------------------
  |  Branch (1233:28): [True: 67, False: 40.9k]
  |  Branch (1233:64): [True: 46, False: 40.9k]
  ------------------
 1234|    113|                        {
 1235|    113|                            return IHEVCD_INVALID_PARAMETER;
 1236|    113|                        }
 1237|  40.9k|                        next_coef = (next_coef + scaling_list_delta_coef + 256)
 1238|  40.9k|                                        % 256;
 1239|  40.9k|                        pi2_scaling_mat_offset[scan_table[i]] = next_coef;
 1240|  40.9k|                    }
 1241|  1.19k|                }
 1242|    732|                else if(size_id == 2)
  ------------------
  |  Branch (1242:25): [True: 387, False: 345]
  ------------------
 1243|    387|                {
 1244|    387|                    scan_table = (UWORD8 *)gapv_ihevc_invscan[2];
 1245|       |
 1246|  24.2k|                    for(i = 0; i < coef_num; i++)
  ------------------
  |  Branch (1246:32): [True: 23.8k, False: 368]
  ------------------
 1247|  23.8k|                    {
 1248|  23.8k|                        SEV_PARSE("scaling_list_delta_coef",
  ------------------
  |  |  162|  23.8k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 1249|  23.8k|                                  scaling_list_delta_coef, ps_bitstrm);
 1250|  23.8k|                        if((scaling_list_delta_coef < -256) || (scaling_list_delta_coef > 255))
  ------------------
  |  Branch (1250:28): [True: 12, False: 23.8k]
  |  Branch (1250:64): [True: 7, False: 23.8k]
  ------------------
 1251|     19|                        {
 1252|     19|                            return IHEVCD_INVALID_PARAMETER;
 1253|     19|                        }
 1254|  23.8k|                        next_coef = (next_coef + scaling_list_delta_coef + 256)
 1255|  23.8k|                                        % 256;
 1256|       |
 1257|  23.8k|                        offset = scan_table[i];
 1258|  23.8k|                        offset = (offset >> 3) * 16 * 2 + (offset & 0x7) * 2;
 1259|  23.8k|                        pi2_scaling_mat_offset[offset] = next_coef;
 1260|  23.8k|                        pi2_scaling_mat_offset[offset + 1] = next_coef;
 1261|  23.8k|                        pi2_scaling_mat_offset[offset + 16] = next_coef;
 1262|  23.8k|                        pi2_scaling_mat_offset[offset + 16 + 1] = next_coef;
 1263|  23.8k|                    }
 1264|    368|                    pi2_scaling_mat_offset[0] = dc_value;
 1265|    368|                }
 1266|    345|                else
 1267|    345|                {
 1268|    345|                    scan_table = (UWORD8 *)gapv_ihevc_invscan[2];
 1269|       |
 1270|  21.7k|                    for(i = 0; i < coef_num; i++)
  ------------------
  |  Branch (1270:32): [True: 21.4k, False: 325]
  ------------------
 1271|  21.4k|                    {
 1272|  21.4k|                        SEV_PARSE("scaling_list_delta_coef",
  ------------------
  |  |  162|  21.4k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 1273|  21.4k|                                  scaling_list_delta_coef, ps_bitstrm);
 1274|  21.4k|                        if((scaling_list_delta_coef < -256) || (scaling_list_delta_coef > 255))
  ------------------
  |  Branch (1274:28): [True: 9, False: 21.3k]
  |  Branch (1274:64): [True: 11, False: 21.3k]
  ------------------
 1275|     20|                        {
 1276|     20|                            return IHEVCD_INVALID_PARAMETER;
 1277|     20|                        }
 1278|  21.3k|                        next_coef = (next_coef + scaling_list_delta_coef + 256)
 1279|  21.3k|                                        % 256;
 1280|       |
 1281|  21.3k|                        offset = scan_table[i];
 1282|  21.3k|                        offset = (offset >> 3) * 32 * 4 + (offset & 0x7) * 4;
 1283|       |
 1284|   106k|                        for(j = 0; j < 4; j++)
  ------------------
  |  Branch (1284:36): [True: 85.5k, False: 21.3k]
  ------------------
 1285|  85.5k|                        {
 1286|  85.5k|                            pi2_scaling_mat_offset[offset + j * 32] = next_coef;
 1287|  85.5k|                            pi2_scaling_mat_offset[offset + 1 + j * 32] = next_coef;
 1288|  85.5k|                            pi2_scaling_mat_offset[offset + 2 + j * 32] = next_coef;
 1289|  85.5k|                            pi2_scaling_mat_offset[offset + 3 + j * 32] = next_coef;
 1290|  85.5k|                        }
 1291|  21.3k|                        pi2_scaling_mat_offset[0] = dc_value;
 1292|  21.3k|                    }
 1293|    345|                }
 1294|  1.92k|            }
 1295|  8.09k|        }
 1296|  2.14k|    }
 1297|       |
 1298|    303|    return ret;
 1299|  1.06k|}
ihevcd_parse_sps:
 1443|  23.7k|{
 1444|  23.7k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1445|  23.7k|    UWORD32 value;
 1446|       |
 1447|  23.7k|    WORD32 i;
 1448|  23.7k|    WORD32 vps_id;
 1449|  23.7k|    WORD32 sps_max_sub_layers;
 1450|  23.7k|    WORD32 sps_id;
 1451|  23.7k|    WORD32 sps_temporal_id_nesting_flag;
 1452|  23.7k|    sps_t *ps_sps;
 1453|  23.7k|    profile_tier_lvl_info_t s_ptl;
 1454|  23.7k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
 1455|  23.7k|    WORD32 ctb_log2_size_y = 0;
 1456|       |
 1457|       |
 1458|  23.7k|    BITS_PARSE("video_parameter_set_id", value, ps_bitstrm, 4);
  ------------------
  |  |  148|  23.7k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1459|  23.7k|    if(value > MAX_VPS_CNT - 1)
  ------------------
  |  |  289|  23.7k|#define MAX_VPS_CNT         16
  ------------------
  |  Branch (1459:8): [True: 0, False: 23.7k]
  ------------------
 1460|      0|    {
 1461|      0|        return IHEVCD_INVALID_PARAMETER;
 1462|      0|    }
 1463|  23.7k|    vps_id = value;
 1464|       |
 1465|  23.7k|    BITS_PARSE("sps_max_sub_layers_minus1", value, ps_bitstrm, 3);
  ------------------
  |  |  148|  23.7k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1466|  23.7k|    if(value > SPS_MAX_SUB_LAYERS - 1)
  ------------------
  |  |  320|  23.7k|#define SPS_MAX_SUB_LAYERS  7
  ------------------
  |  Branch (1466:8): [True: 107, False: 23.5k]
  ------------------
 1467|    107|    {
 1468|    107|        return IHEVCD_INVALID_PARAMETER;
 1469|    107|    }
 1470|  23.5k|    sps_max_sub_layers = value + 1;
 1471|       |
 1472|  23.5k|    BITS_PARSE("sps_temporal_id_nesting_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  23.5k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1473|  23.5k|    sps_temporal_id_nesting_flag = value;
 1474|       |
 1475|       |    //profile_and_level( 1, sps_max_sub_layers_minus1 )
 1476|  23.5k|    ret = ihevcd_profile_tier_level(ps_bitstrm, &(s_ptl), 1,
 1477|  23.5k|                                    (sps_max_sub_layers - 1));
 1478|       |
 1479|  23.5k|    UEV_PARSE("seq_parameter_set_id", value, ps_bitstrm);
  ------------------
  |  |  155|  23.5k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1480|  23.5k|    sps_id = value;
 1481|  23.5k|    if((sps_id >= MAX_SPS_CNT) || (sps_id < 0))
  ------------------
  |  |  317|  23.5k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  |  Branch (1481:8): [True: 16.2k, False: 7.34k]
  |  Branch (1481:35): [True: 1.20k, False: 6.14k]
  ------------------
 1482|  17.4k|    {
 1483|  17.4k|        if(ps_codec->i4_sps_done)
  ------------------
  |  Branch (1483:12): [True: 10.0k, False: 7.40k]
  ------------------
 1484|  10.0k|            return IHEVCD_UNSUPPORTED_SPS_ID;
 1485|  7.40k|        else
 1486|  7.40k|            sps_id = 0;
 1487|  17.4k|    }
 1488|       |
 1489|       |
 1490|  13.5k|    ps_sps = (ps_codec->s_parse.ps_sps_base + MAX_SPS_CNT - 1);
  ------------------
  |  |  317|  13.5k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
 1491|       |    /* Reset SPS to zero */
 1492|  13.5k|    {
 1493|  13.5k|        WORD16 *pi2_scaling_mat = ps_sps->pi2_scaling_mat;
 1494|  13.5k|        memset(ps_sps, 0, sizeof(sps_t));
 1495|  13.5k|        ps_sps->pi2_scaling_mat = pi2_scaling_mat;
 1496|  13.5k|    }
 1497|  13.5k|    ps_sps->i1_sps_id = sps_id;
 1498|  13.5k|    ps_sps->i1_vps_id = vps_id;
 1499|  13.5k|    ps_sps->i1_sps_max_sub_layers = sps_max_sub_layers;
 1500|  13.5k|    ps_sps->i1_sps_temporal_id_nesting_flag = sps_temporal_id_nesting_flag;
 1501|       |
 1502|  13.5k|    memcpy(&ps_sps->s_ptl, &s_ptl, sizeof(profile_tier_lvl_info_t));
 1503|       |
 1504|  13.5k|    UEV_PARSE("chroma_format_idc", value, ps_bitstrm);
  ------------------
  |  |  155|  13.5k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1505|  13.5k|    if(value > 3)
  ------------------
  |  Branch (1505:8): [True: 3.82k, False: 9.71k]
  ------------------
 1506|  3.82k|    {
 1507|  3.82k|        return IHEVCD_INVALID_PARAMETER;
 1508|  3.82k|    }
 1509|  9.71k|    ps_sps->i1_chroma_format_idc = value;
 1510|       |
 1511|  9.71k|    if(ps_sps->i1_chroma_format_idc != CHROMA_FMT_IDC_YUV420)
  ------------------
  |  Branch (1511:8): [True: 953, False: 8.76k]
  ------------------
 1512|    953|    {
 1513|    953|        ps_codec->s_parse.i4_error_code = IHEVCD_UNSUPPORTED_CHROMA_FMT_IDC;
 1514|    953|        return (IHEVCD_ERROR_T)IHEVCD_UNSUPPORTED_CHROMA_FMT_IDC;
 1515|    953|    }
 1516|       |
 1517|  8.76k|    if(CHROMA_FMT_IDC_YUV444_PLANES == ps_sps->i1_chroma_format_idc)
  ------------------
  |  Branch (1517:8): [True: 0, False: 8.76k]
  ------------------
 1518|      0|    {
 1519|      0|        BITS_PARSE("separate_colour_plane_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1520|      0|        ps_sps->i1_separate_colour_plane_flag = value;
 1521|      0|    }
 1522|  8.76k|    else
 1523|  8.76k|    {
 1524|  8.76k|        ps_sps->i1_separate_colour_plane_flag = 0;
 1525|  8.76k|    }
 1526|       |
 1527|  8.76k|    UEV_PARSE("pic_width_in_luma_samples", value, ps_bitstrm);
  ------------------
  |  |  155|  8.76k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1528|  8.76k|    if(value > INT16_MAX)
  ------------------
  |  Branch (1528:8): [True: 1.25k, False: 7.51k]
  ------------------
 1529|  1.25k|    {
 1530|  1.25k|        return (IHEVCD_ERROR_T)IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED;
 1531|  1.25k|    }
 1532|  7.51k|    ps_sps->i2_pic_width_in_luma_samples = value;
 1533|       |
 1534|  7.51k|    UEV_PARSE("pic_height_in_luma_samples", value, ps_bitstrm);
  ------------------
  |  |  155|  7.51k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1535|  7.51k|    if(value > INT16_MAX)
  ------------------
  |  Branch (1535:8): [True: 762, False: 6.75k]
  ------------------
 1536|    762|    {
 1537|    762|        return (IHEVCD_ERROR_T)IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED;
 1538|    762|    }
 1539|  6.75k|    ps_sps->i2_pic_height_in_luma_samples = value;
 1540|       |
 1541|  6.75k|    if((0 >= ps_sps->i2_pic_width_in_luma_samples) || (0 >= ps_sps->i2_pic_height_in_luma_samples))
  ------------------
  |  Branch (1541:8): [True: 621, False: 6.13k]
  |  Branch (1541:55): [True: 25, False: 6.10k]
  ------------------
 1542|    646|        return IHEVCD_INVALID_PARAMETER;
 1543|       |
 1544|  6.10k|    BITS_PARSE("pic_cropping_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  6.10k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1545|  6.10k|    ps_sps->i1_pic_cropping_flag = value;
 1546|       |
 1547|  6.10k|    if(ps_sps->i1_pic_cropping_flag)
  ------------------
  |  Branch (1547:8): [True: 3.64k, False: 2.46k]
  ------------------
 1548|  3.64k|    {
 1549|       |
 1550|  3.64k|        UEV_PARSE("pic_crop_left_offset", value, ps_bitstrm);
  ------------------
  |  |  155|  3.64k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1551|  3.64k|        if (value >= ps_sps->i2_pic_width_in_luma_samples)
  ------------------
  |  Branch (1551:13): [True: 8, False: 3.63k]
  ------------------
 1552|      8|        {
 1553|      8|            return IHEVCD_INVALID_PARAMETER;
 1554|      8|        }
 1555|  3.63k|        ps_sps->i2_pic_crop_left_offset = value;
 1556|       |
 1557|  3.63k|        UEV_PARSE("pic_crop_right_offset", value, ps_bitstrm);
  ------------------
  |  |  155|  3.63k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1558|  3.63k|        if (value >= ps_sps->i2_pic_width_in_luma_samples)
  ------------------
  |  Branch (1558:13): [True: 17, False: 3.62k]
  ------------------
 1559|     17|        {
 1560|     17|            return IHEVCD_INVALID_PARAMETER;
 1561|     17|        }
 1562|  3.62k|        ps_sps->i2_pic_crop_right_offset = value;
 1563|       |
 1564|  3.62k|        UEV_PARSE("pic_crop_top_offset", value, ps_bitstrm);
  ------------------
  |  |  155|  3.62k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1565|  3.62k|        if (value >= ps_sps->i2_pic_height_in_luma_samples)
  ------------------
  |  Branch (1565:13): [True: 97, False: 3.52k]
  ------------------
 1566|     97|        {
 1567|     97|            return IHEVCD_INVALID_PARAMETER;
 1568|     97|        }
 1569|  3.52k|        ps_sps->i2_pic_crop_top_offset = value;
 1570|       |
 1571|  3.52k|        UEV_PARSE("pic_crop_bottom_offset", value, ps_bitstrm);
  ------------------
  |  |  155|  3.52k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1572|  3.52k|        if (value >= ps_sps->i2_pic_height_in_luma_samples)
  ------------------
  |  Branch (1572:13): [True: 1, False: 3.52k]
  ------------------
 1573|      1|        {
 1574|      1|            return IHEVCD_INVALID_PARAMETER;
 1575|      1|        }
 1576|  3.52k|        ps_sps->i2_pic_crop_bottom_offset = value;
 1577|  3.52k|    }
 1578|  2.46k|    else
 1579|  2.46k|    {
 1580|  2.46k|        ps_sps->i2_pic_crop_left_offset = 0;
 1581|  2.46k|        ps_sps->i2_pic_crop_right_offset = 0;
 1582|  2.46k|        ps_sps->i2_pic_crop_top_offset = 0;
 1583|  2.46k|        ps_sps->i2_pic_crop_bottom_offset = 0;
 1584|  2.46k|    }
 1585|       |
 1586|       |
 1587|  5.98k|    UEV_PARSE("bit_depth_luma_minus8", value, ps_bitstrm);
  ------------------
  |  |  155|  5.98k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1588|  5.98k|    if(0 != value)
  ------------------
  |  Branch (1588:8): [True: 570, False: 5.41k]
  ------------------
 1589|    570|        return IHEVCD_UNSUPPORTED_BIT_DEPTH;
 1590|       |
 1591|  5.41k|    UEV_PARSE("bit_depth_chroma_minus8", value, ps_bitstrm);
  ------------------
  |  |  155|  5.41k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1592|  5.41k|    if(0 != value)
  ------------------
  |  Branch (1592:8): [True: 524, False: 4.89k]
  ------------------
 1593|    524|        return IHEVCD_UNSUPPORTED_BIT_DEPTH;
 1594|       |
 1595|  4.89k|    UEV_PARSE("log2_max_pic_order_cnt_lsb_minus4", value, ps_bitstrm);
  ------------------
  |  |  155|  4.89k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1596|  4.89k|    if(value > 12)
  ------------------
  |  Branch (1596:8): [True: 0, False: 4.89k]
  ------------------
 1597|      0|        return IHEVCD_INVALID_PARAMETER;
 1598|  4.89k|    ps_sps->i1_log2_max_pic_order_cnt_lsb = value + 4;
 1599|       |
 1600|  4.89k|    BITS_PARSE("sps_sub_layer_ordering_info_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.89k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1601|       |
 1602|  4.89k|    ps_sps->i1_sps_sub_layer_ordering_info_present_flag = value;
 1603|       |
 1604|       |
 1605|  4.89k|    i = (ps_sps->i1_sps_sub_layer_ordering_info_present_flag ? 0 : (ps_sps->i1_sps_max_sub_layers - 1));
  ------------------
  |  Branch (1605:10): [True: 4.15k, False: 734]
  ------------------
 1606|  12.2k|    for(; i < ps_sps->i1_sps_max_sub_layers; i++)
  ------------------
  |  Branch (1606:11): [True: 7.97k, False: 4.25k]
  ------------------
 1607|  7.97k|    {
 1608|  7.97k|        UEV_PARSE("max_dec_pic_buffering", value, ps_bitstrm);
  ------------------
  |  |  155|  7.97k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1609|  7.97k|        if(value > (MAX_DPB_SIZE - 1))
  ------------------
  |  |  281|  7.97k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (1609:12): [True: 496, False: 7.47k]
  ------------------
 1610|    496|        {
 1611|    496|            return IHEVCD_INVALID_PARAMETER;
 1612|    496|        }
 1613|  7.47k|        ps_sps->ai1_sps_max_dec_pic_buffering[i] = value + 1;
 1614|       |
 1615|  7.47k|        UEV_PARSE("num_reorder_pics", value, ps_bitstrm);
  ------------------
  |  |  155|  7.47k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1616|  7.47k|        if(value >= ps_sps->ai1_sps_max_dec_pic_buffering[i])
  ------------------
  |  Branch (1616:12): [True: 141, False: 7.33k]
  ------------------
 1617|    141|        {
 1618|    141|            return IHEVCD_INVALID_PARAMETER;
 1619|    141|        }
 1620|  7.33k|        ps_sps->ai1_sps_max_num_reorder_pics[i] = value;
 1621|       |
 1622|  7.33k|        UEV_PARSE("max_latency_increase", value, ps_bitstrm);
  ------------------
  |  |  155|  7.33k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1623|  7.33k|        if(value > UINT_MAX - 2)
  ------------------
  |  Branch (1623:12): [True: 0, False: 7.33k]
  ------------------
 1624|      0|        {
 1625|      0|            return IHEVCD_INVALID_PARAMETER;
 1626|      0|        }
 1627|  7.33k|        ps_sps->ai1_sps_max_latency_increase[i] = value;
 1628|  7.33k|    }
 1629|       |
 1630|       |    /* Check if sps_max_dec_pic_buffering or sps_max_num_reorder_pics
 1631|       |       has changed */
 1632|  4.25k|    if(0 != ps_codec->u4_allocate_dynamic_done)
  ------------------
  |  Branch (1632:8): [True: 1.29k, False: 2.96k]
  ------------------
 1633|  1.29k|    {
 1634|  1.29k|        sps_t *ps_sps_old = ps_codec->s_parse.ps_sps;
 1635|  1.29k|        if(ps_sps_old->ai1_sps_max_dec_pic_buffering[ps_sps_old->i1_sps_max_sub_layers - 1] !=
  ------------------
  |  Branch (1635:12): [True: 235, False: 1.05k]
  ------------------
 1636|  1.29k|                    ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1])
 1637|    235|        {
 1638|    235|            if(0 == ps_codec->i4_first_pic_done)
  ------------------
  |  Branch (1638:16): [True: 51, False: 184]
  ------------------
 1639|     51|            {
 1640|     51|                return IHEVCD_INVALID_PARAMETER;
 1641|     51|            }
 1642|    184|            ps_codec->i4_reset_flag = 1;
 1643|    184|            return (IHEVCD_ERROR_T)IVD_RES_CHANGED;
 1644|    235|        }
 1645|       |
 1646|  1.05k|        if(ps_sps_old->ai1_sps_max_num_reorder_pics[ps_sps_old->i1_sps_max_sub_layers - 1] !=
  ------------------
  |  Branch (1646:12): [True: 0, False: 1.05k]
  ------------------
 1647|  1.05k|                    ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1])
 1648|      0|        {
 1649|      0|            if(0 == ps_codec->i4_first_pic_done)
  ------------------
  |  Branch (1649:16): [True: 0, False: 0]
  ------------------
 1650|      0|            {
 1651|      0|                return IHEVCD_INVALID_PARAMETER;
 1652|      0|            }
 1653|      0|            ps_codec->i4_reset_flag = 1;
 1654|      0|            return (IHEVCD_ERROR_T)IVD_RES_CHANGED;
 1655|      0|        }
 1656|  1.05k|    }
 1657|       |
 1658|  4.01k|    UEV_PARSE("log2_min_coding_block_size_minus3", value, ps_bitstrm);
  ------------------
  |  |  155|  4.01k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1659|  4.01k|    if(value > (LOG2_MAX_CU_SIZE - 3))
  ------------------
  |  |  364|  4.01k|#define LOG2_MAX_CU_SIZE    6
  ------------------
  |  Branch (1659:8): [True: 22, False: 3.99k]
  ------------------
 1660|     22|    {
 1661|     22|        return IHEVCD_INVALID_PARAMETER;
 1662|     22|    }
 1663|  3.99k|    ps_sps->i1_log2_min_coding_block_size = value + 3;
 1664|  3.99k|    if((ps_sps->i2_pic_width_in_luma_samples % (1 << ps_sps->i1_log2_min_coding_block_size) != 0) ||
  ------------------
  |  Branch (1664:8): [True: 12, False: 3.98k]
  ------------------
 1665|  3.99k|                    (ps_sps->i2_pic_height_in_luma_samples % (1 << ps_sps->i1_log2_min_coding_block_size) != 0))
  ------------------
  |  Branch (1665:21): [True: 33, False: 3.95k]
  ------------------
 1666|     45|    {
 1667|     45|        return IHEVCD_INVALID_PARAMETER;
 1668|     45|    }
 1669|       |
 1670|  3.95k|    UEV_PARSE("log2_diff_max_min_coding_block_size", value, ps_bitstrm);
  ------------------
  |  |  155|  3.95k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1671|  3.95k|    if(value > (LOG2_MAX_CU_SIZE - ps_sps->i1_log2_min_coding_block_size))
  ------------------
  |  |  364|  3.95k|#define LOG2_MAX_CU_SIZE    6
  ------------------
  |  Branch (1671:8): [True: 5, False: 3.94k]
  ------------------
 1672|      5|    {
 1673|      5|        return IHEVCD_INVALID_PARAMETER;
 1674|      5|    }
 1675|  3.94k|    ps_sps->i1_log2_diff_max_min_coding_block_size = value;
 1676|       |
 1677|  3.94k|    ctb_log2_size_y = ps_sps->i1_log2_min_coding_block_size + ps_sps->i1_log2_diff_max_min_coding_block_size;
 1678|       |
 1679|  3.94k|    if((ctb_log2_size_y < LOG2_MIN_CTB_SIZE) || (ctb_log2_size_y > LOG2_MAX_CTB_SIZE))
  ------------------
  |  |  344|  3.94k|#define LOG2_MIN_CTB_SIZE   4
  ------------------
                  if((ctb_log2_size_y < LOG2_MIN_CTB_SIZE) || (ctb_log2_size_y > LOG2_MAX_CTB_SIZE))
  ------------------
  |  |  343|  3.93k|#define LOG2_MAX_CTB_SIZE   6
  ------------------
  |  Branch (1679:8): [True: 10, False: 3.93k]
  |  Branch (1679:49): [True: 0, False: 3.93k]
  ------------------
 1680|     10|    {
 1681|     10|        return IHEVCD_INVALID_PARAMETER;
 1682|     10|    }
 1683|       |    /* Check if CTB size is different in case of multiple SPS with same ID */
 1684|  3.93k|    {
 1685|  3.93k|        sps_t *ps_sps_old = (ps_codec->s_parse.ps_sps_base + sps_id);
 1686|  3.93k|        if(ps_sps_old->i1_sps_valid && ps_sps_old->i1_log2_ctb_size != ctb_log2_size_y)
  ------------------
  |  Branch (1686:12): [True: 926, False: 3.01k]
  |  Branch (1686:40): [True: 54, False: 872]
  ------------------
 1687|     54|        {
 1688|     54|            if(0 == ps_codec->i4_first_pic_done)
  ------------------
  |  Branch (1688:16): [True: 35, False: 19]
  ------------------
 1689|     35|            {
 1690|     35|                return IHEVCD_INVALID_PARAMETER;
 1691|     35|            }
 1692|     19|            ps_codec->i4_reset_flag = 1;
 1693|     19|            return (IHEVCD_ERROR_T)IVD_RES_CHANGED;
 1694|     54|        }
 1695|  3.93k|    }
 1696|  3.88k|    ps_sps->i1_log2_ctb_size = ctb_log2_size_y;
 1697|       |
 1698|  3.88k|    UEV_PARSE("log2_min_transform_block_size_minus2", value, ps_bitstrm);
  ------------------
  |  |  155|  3.88k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1699|  3.88k|    if(value > (LOG2_MAX_TU_SIZE - 2))
  ------------------
  |  |  349|  3.88k|#define LOG2_MAX_TU_SIZE    5
  ------------------
  |  Branch (1699:8): [True: 214, False: 3.66k]
  ------------------
 1700|    214|    {
 1701|    214|        return IHEVCD_INVALID_PARAMETER;
 1702|    214|    }
 1703|  3.66k|    ps_sps->i1_log2_min_transform_block_size = value + 2;
 1704|  3.66k|    if(ps_sps->i1_log2_min_transform_block_size >= ps_sps->i1_log2_min_coding_block_size)
  ------------------
  |  Branch (1704:8): [True: 12, False: 3.65k]
  ------------------
 1705|     12|    {
 1706|     12|        return IHEVCD_INVALID_PARAMETER;
 1707|     12|    }
 1708|       |
 1709|  3.65k|    UEV_PARSE("log2_diff_max_min_transform_block_size", value, ps_bitstrm);
  ------------------
  |  |  155|  3.65k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1710|  3.65k|    if(value > (LOG2_MAX_TU_SIZE - ps_sps->i1_log2_min_transform_block_size))
  ------------------
  |  |  349|  3.65k|#define LOG2_MAX_TU_SIZE    5
  ------------------
  |  Branch (1710:8): [True: 52, False: 3.60k]
  ------------------
 1711|     52|    {
 1712|     52|        return IHEVCD_INVALID_PARAMETER;
 1713|     52|    }
 1714|  3.60k|    ps_sps->i1_log2_diff_max_min_transform_block_size = value;
 1715|       |
 1716|  3.60k|    ps_sps->i1_log2_max_transform_block_size = ps_sps->i1_log2_min_transform_block_size +
 1717|  3.60k|                    ps_sps->i1_log2_diff_max_min_transform_block_size;
 1718|       |
 1719|  3.60k|    if(ps_sps->i1_log2_max_transform_block_size > ps_sps->i1_log2_ctb_size)
  ------------------
  |  Branch (1719:8): [True: 0, False: 3.60k]
  ------------------
 1720|      0|    {
 1721|      0|        return IHEVCD_INVALID_PARAMETER;
 1722|      0|    }
 1723|       |
 1724|  3.60k|    ps_sps->i1_log2_min_pcm_coding_block_size = 0;
 1725|  3.60k|    ps_sps->i1_log2_diff_max_min_pcm_coding_block_size = 0;
 1726|       |
 1727|  3.60k|    UEV_PARSE("max_transform_hierarchy_depth_inter", value, ps_bitstrm);
  ------------------
  |  |  155|  3.60k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1728|  3.60k|    if(value > (ps_sps->i1_log2_ctb_size - ps_sps->i1_log2_min_transform_block_size))
  ------------------
  |  Branch (1728:8): [True: 36, False: 3.56k]
  ------------------
 1729|     36|    {
 1730|     36|        return IHEVCD_INVALID_PARAMETER;
 1731|     36|    }
 1732|  3.56k|    ps_sps->i1_max_transform_hierarchy_depth_inter = value;
 1733|       |
 1734|  3.56k|    UEV_PARSE("max_transform_hierarchy_depth_intra", value, ps_bitstrm);
  ------------------
  |  |  155|  3.56k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1735|  3.56k|    if(value > (ps_sps->i1_log2_ctb_size - ps_sps->i1_log2_min_transform_block_size))
  ------------------
  |  Branch (1735:8): [True: 802, False: 2.76k]
  ------------------
 1736|    802|    {
 1737|    802|        return IHEVCD_INVALID_PARAMETER;
 1738|    802|    }
 1739|  2.76k|    ps_sps->i1_max_transform_hierarchy_depth_intra = value;
 1740|       |
 1741|       |    /* String has a d (enabled) in order to match with HM */
 1742|  2.76k|    BITS_PARSE("scaling_list_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.76k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1743|  2.76k|    ps_sps->i1_scaling_list_enable_flag = value;
 1744|       |
 1745|  2.76k|    if(ps_sps->i1_scaling_list_enable_flag)
  ------------------
  |  Branch (1745:8): [True: 1.47k, False: 1.29k]
  ------------------
 1746|  1.47k|    {
 1747|  1.47k|        COPY_DEFAULT_SCALING_LIST(ps_sps->pi2_scaling_mat);
  ------------------
  |  |   76|  1.47k|#define COPY_DEFAULT_SCALING_LIST(pi2_scaling_mat)                                                                                      \
  |  |   77|  1.47k|{                                                                                                                                       \
  |  |   78|  1.47k|    WORD32 scaling_mat_offset[]={0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040};      \
  |  |   79|  1.47k|                                                                                                                                        \
  |  |   80|  1.47k|    /* scaling matrix for 4x4 */                                                                                                        \
  |  |   81|  1.47k|    memcpy(pi2_scaling_mat, gi2_flat_scale_mat_32x32, 6*16*sizeof(WORD16));                                                             \
  |  |   82|  1.47k|/* scaling matrix for 8x8 */                                                                                                            \
  |  |   83|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[6], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   84|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[7], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   85|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[8], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   86|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[9], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   87|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[10], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16));                               \
  |  |   88|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[11], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16));                               \
  |  |   89|  1.47k|    /* scaling matrix for 16x16 */                                                                                                      \
  |  |   90|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[12], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   91|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[13], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   92|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[14], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   93|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[15], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   94|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[16], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   95|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[17], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   96|  1.47k|    /* scaling matrix for 32x32 */                                                                                                      \
  |  |   97|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[18], gi2_intra_default_scale_mat_32x32, 1024*sizeof(WORD16));                           \
  |  |   98|  1.47k|    memcpy(pi2_scaling_mat + scaling_mat_offset[19], gi2_inter_default_scale_mat_32x32, 1024*sizeof(WORD16));                           \
  |  |   99|  1.47k|}
  ------------------
 1748|  1.47k|        BITS_PARSE("sps_scaling_list_data_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.47k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1749|  1.47k|        ps_sps->i1_sps_scaling_list_data_present_flag = value;
 1750|       |
 1751|  1.47k|        if(ps_sps->i1_sps_scaling_list_data_present_flag)
  ------------------
  |  Branch (1751:12): [True: 432, False: 1.03k]
  ------------------
 1752|    432|            ihevcd_scaling_list_data(ps_codec, ps_sps->pi2_scaling_mat);
 1753|  1.47k|    }
 1754|  1.29k|    else
 1755|  1.29k|    {
 1756|  1.29k|        COPY_FLAT_SCALING_LIST(ps_sps->pi2_scaling_mat);
  ------------------
  |  |  101|  1.29k|#define COPY_FLAT_SCALING_LIST(pi2_scaling_mat)                                                                                         \
  |  |  102|  1.29k|{                                                                                                                                       \
  |  |  103|  1.29k|    WORD32 scaling_mat_offset[]={0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040};      \
  |  |  104|  1.29k|                                                                                                                                        \
  |  |  105|  1.29k|    /* scaling matrix for 4x4 */                                                                                                        \
  |  |  106|  1.29k|    memcpy(pi2_scaling_mat, gi2_flat_scale_mat_32x32, 6*16*sizeof(WORD16));                                                             \
  |  |  107|  1.29k|    /* scaling matrix for 8x8 */                                                                                                        \
  |  |  108|  1.29k|    memcpy(pi2_scaling_mat + scaling_mat_offset[6], gi2_flat_scale_mat_32x32, 6*64*sizeof(WORD16));                                     \
  |  |  109|  1.29k|    /* scaling matrix for 16x16 */                                                                                                      \
  |  |  110|  1.29k|    memcpy(pi2_scaling_mat + scaling_mat_offset[12], gi2_flat_scale_mat_32x32, 3*256*sizeof(WORD16));                                   \
  |  |  111|  1.29k|    memcpy(pi2_scaling_mat + scaling_mat_offset[15], gi2_flat_scale_mat_32x32, 3*256*sizeof(WORD16));                                   \
  |  |  112|  1.29k|    /* scaling matrix for 32x32 */                                                                                                      \
  |  |  113|  1.29k|    memcpy(pi2_scaling_mat + scaling_mat_offset[18], gi2_flat_scale_mat_32x32, 1024*sizeof(WORD16));                                    \
  |  |  114|  1.29k|    memcpy(pi2_scaling_mat + scaling_mat_offset[19], gi2_flat_scale_mat_32x32, 1024*sizeof(WORD16));                                    \
  |  |  115|  1.29k|}
  ------------------
 1757|  1.29k|    }
 1758|       |    /* String is asymmetric_motion_partitions_enabled_flag instead of amp_enabled_flag in order to match with HM */
 1759|  2.76k|    BITS_PARSE("asymmetric_motion_partitions_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.76k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1760|  2.76k|    ps_sps->i1_amp_enabled_flag = value;
 1761|       |
 1762|  2.76k|    BITS_PARSE("sample_adaptive_offset_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.76k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1763|  2.76k|    ps_sps->i1_sample_adaptive_offset_enabled_flag = value;
 1764|       |
 1765|  2.76k|    BITS_PARSE("pcm_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.76k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1766|  2.76k|    ps_sps->i1_pcm_enabled_flag = value;
 1767|       |
 1768|  2.76k|    if(ps_sps->i1_pcm_enabled_flag)
  ------------------
  |  Branch (1768:8): [True: 704, False: 2.06k]
  ------------------
 1769|    704|    {
 1770|    704|        BITS_PARSE("pcm_sample_bit_depth_luma", value, ps_bitstrm, 4);
  ------------------
  |  |  148|    704|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1771|    704|        ps_sps->i1_pcm_sample_bit_depth_luma = value + 1;
 1772|       |
 1773|    704|        BITS_PARSE("pcm_sample_bit_depth_chroma", value, ps_bitstrm, 4);
  ------------------
  |  |  148|    704|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1774|    704|        ps_sps->i1_pcm_sample_bit_depth_chroma = value + 1;
 1775|       |
 1776|    704|        UEV_PARSE("log2_min_pcm_coding_block_size_minus3", value, ps_bitstrm);
  ------------------
  |  |  155|    704|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1777|    704|        if(value < (ps_sps->i1_log2_min_coding_block_size - 3) || value > (MIN(ctb_log2_size_y, 5) - 3))
  ------------------
  |  |   43|    704|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 147, False: 557]
  |  |  ------------------
  ------------------
  |  Branch (1777:12): [True: 0, False: 704]
  |  Branch (1777:67): [True: 3, False: 701]
  ------------------
 1778|      3|        {
 1779|      3|            return IHEVCD_INVALID_PARAMETER;
 1780|      3|        }
 1781|    701|        ps_sps->i1_log2_min_pcm_coding_block_size = value + 3;
 1782|       |
 1783|    701|        UEV_PARSE("log2_diff_max_min_pcm_coding_block_size", value, ps_bitstrm);
  ------------------
  |  |  155|    701|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1784|    701|        if(value > MIN(ctb_log2_size_y, 5) - ps_sps->i1_log2_min_pcm_coding_block_size)
  ------------------
  |  |   43|    701|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 147, False: 554]
  |  |  ------------------
  ------------------
  |  Branch (1784:12): [True: 1, False: 700]
  ------------------
 1785|      1|        {
 1786|      1|            return IHEVCD_INVALID_PARAMETER;
 1787|      1|        }
 1788|    700|        ps_sps->i1_log2_diff_max_min_pcm_coding_block_size = value;
 1789|    700|        BITS_PARSE("pcm_loop_filter_disable_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    700|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1790|    700|        ps_sps->i1_pcm_loop_filter_disable_flag = value;
 1791|       |
 1792|    700|    }
 1793|  2.76k|    UEV_PARSE("num_short_term_ref_pic_sets", value, ps_bitstrm);
  ------------------
  |  |  155|  2.76k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1794|  2.76k|    if(value > MAX_STREF_PICS_SPS)
  ------------------
  |  |  325|  2.76k|#define MAX_STREF_PICS_SPS 64
  ------------------
  |  Branch (1794:8): [True: 454, False: 2.30k]
  ------------------
 1795|    454|    {
 1796|    454|        return IHEVCD_INVALID_PARAMETER;
 1797|    454|    }
 1798|  2.30k|    ps_sps->i1_num_short_term_ref_pic_sets = value;
 1799|       |
 1800|  9.14k|    for(i = 0; i < ps_sps->i1_num_short_term_ref_pic_sets; i++)
  ------------------
  |  Branch (1800:16): [True: 6.85k, False: 2.28k]
  ------------------
 1801|  6.85k|    {
 1802|  6.85k|        ret = ihevcd_short_term_ref_pic_set(ps_bitstrm, &ps_sps->as_stref_picset[0], ps_sps->i1_num_short_term_ref_pic_sets, i, &ps_sps->as_stref_picset[i]);
 1803|  6.85k|        if (ret != IHEVCD_SUCCESS)
  ------------------
  |  Branch (1803:13): [True: 24, False: 6.83k]
  ------------------
 1804|     24|        {
 1805|     24|            return ret;
 1806|     24|        }
 1807|  6.85k|    }
 1808|       |
 1809|  2.28k|    BITS_PARSE("long_term_ref_pics_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.28k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1810|  2.28k|    ps_sps->i1_long_term_ref_pics_present_flag = value;
 1811|       |
 1812|  2.28k|    if(ps_sps->i1_long_term_ref_pics_present_flag)
  ------------------
  |  Branch (1812:8): [True: 1.00k, False: 1.27k]
  ------------------
 1813|  1.00k|    {
 1814|  1.00k|        UEV_PARSE("num_long_term_ref_pics_sps", value, ps_bitstrm);
  ------------------
  |  |  155|  1.00k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 1815|  1.00k|        if(value > MAX_LTREF_PICS_SPS)
  ------------------
  |  |  323|  1.00k|#define MAX_LTREF_PICS_SPS 32
  ------------------
  |  Branch (1815:12): [True: 0, False: 1.00k]
  ------------------
 1816|      0|        {
 1817|      0|            return IHEVCD_INVALID_PARAMETER;
 1818|      0|        }
 1819|  1.00k|        ps_sps->i1_num_long_term_ref_pics_sps = value;
 1820|       |
 1821|  1.71k|        for(i = 0; i < ps_sps->i1_num_long_term_ref_pics_sps; i++)
  ------------------
  |  Branch (1821:20): [True: 707, False: 1.00k]
  ------------------
 1822|    707|        {
 1823|    707|            BITS_PARSE("lt_ref_pic_poc_lsb_sps[ i ]", value, ps_bitstrm, ps_sps->i1_log2_max_pic_order_cnt_lsb);
  ------------------
  |  |  148|    707|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1824|    707|            ps_sps->au2_lt_ref_pic_poc_lsb_sps[i] = value;
 1825|       |
 1826|    707|            BITS_PARSE("used_by_curr_pic_lt_sps_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    707|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1827|    707|            ps_sps->ai1_used_by_curr_pic_lt_sps_flag[i] = value;
 1828|    707|        }
 1829|  1.00k|    }
 1830|       |
 1831|  2.28k|    BITS_PARSE("sps_temporal_mvp_enable_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.28k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1832|  2.28k|    ps_sps->i1_sps_temporal_mvp_enable_flag = value;
 1833|       |
 1834|       |    /* Print matches HM 8-2 */
 1835|  2.28k|    BITS_PARSE("sps_strong_intra_smoothing_enable_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.28k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1836|  2.28k|    ps_sps->i1_strong_intra_smoothing_enable_flag = value;
 1837|       |
 1838|  2.28k|    BITS_PARSE("vui_parameters_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.28k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1839|  2.28k|    ps_sps->i1_vui_parameters_present_flag = value;
 1840|       |
 1841|  2.28k|    if(ps_sps->i1_vui_parameters_present_flag)
  ------------------
  |  Branch (1841:8): [True: 656, False: 1.62k]
  ------------------
 1842|    656|    {
 1843|    656|        ret = ihevcd_parse_vui_parameters(ps_bitstrm,
 1844|    656|                                          &ps_sps->s_vui_parameters,
 1845|    656|                                          ps_sps->i1_sps_max_sub_layers - 1);
 1846|    656|        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|    656|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 14, False: 642]
  |  |  ------------------
  ------------------
 1847|    642|    }
 1848|       |
 1849|  2.27k|    BITS_PARSE("sps_extension_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.27k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1850|       |
 1851|  2.27k|    if((UWORD8 *)ps_bitstrm->pu4_buf > ps_bitstrm->pu1_buf_max)
  ------------------
  |  Branch (1851:8): [True: 45, False: 2.22k]
  ------------------
 1852|     45|    {
 1853|     45|        return IHEVCD_INVALID_PARAMETER;
 1854|     45|    }
 1855|       |
 1856|  2.22k|    {
 1857|  2.22k|        WORD32 numerator;
 1858|  2.22k|        WORD32 ceil_offset;
 1859|       |
 1860|  2.22k|        ceil_offset = (1 << ps_sps->i1_log2_ctb_size) - 1;
 1861|  2.22k|        numerator = ps_sps->i2_pic_width_in_luma_samples;
 1862|       |
 1863|  2.22k|        ps_sps->i2_pic_wd_in_ctb = ((numerator + ceil_offset) /
 1864|  2.22k|                        (1 << ps_sps->i1_log2_ctb_size));
 1865|       |
 1866|  2.22k|        numerator = ps_sps->i2_pic_height_in_luma_samples;
 1867|  2.22k|        ps_sps->i2_pic_ht_in_ctb = ((numerator + ceil_offset) /
 1868|  2.22k|                        (1 << ps_sps->i1_log2_ctb_size));
 1869|       |
 1870|  2.22k|        ps_sps->i4_pic_size_in_ctb = ps_sps->i2_pic_ht_in_ctb *
 1871|  2.22k|                        ps_sps->i2_pic_wd_in_ctb;
 1872|       |
 1873|  2.22k|        if(0 == ps_codec->i4_sps_done)
  ------------------
  |  Branch (1873:12): [True: 1.32k, False: 903]
  ------------------
 1874|  1.32k|            ps_codec->s_parse.i4_next_ctb_indx = ps_sps->i4_pic_size_in_ctb;
 1875|       |
 1876|  2.22k|        numerator = ps_sps->i2_pic_width_in_luma_samples;
 1877|  2.22k|        ps_sps->i2_pic_wd_in_min_cb = numerator  /
 1878|  2.22k|                        (1 << ps_sps->i1_log2_min_coding_block_size);
 1879|       |
 1880|  2.22k|        numerator = ps_sps->i2_pic_height_in_luma_samples;
 1881|  2.22k|        ps_sps->i2_pic_ht_in_min_cb = numerator  /
 1882|  2.22k|                        (1 << ps_sps->i1_log2_min_coding_block_size);
 1883|  2.22k|    }
 1884|  2.22k|    if((0 != ps_codec->u4_allocate_dynamic_done) &&
  ------------------
  |  Branch (1884:8): [True: 903, False: 1.32k]
  ------------------
 1885|  2.22k|                    ((ps_codec->i4_wd != ps_sps->i2_pic_width_in_luma_samples) ||
  ------------------
  |  Branch (1885:22): [True: 63, False: 840]
  ------------------
 1886|    903|                    (ps_codec->i4_ht != ps_sps->i2_pic_height_in_luma_samples)))
  ------------------
  |  Branch (1886:21): [True: 0, False: 840]
  ------------------
 1887|     63|    {
 1888|     63|        if(0 == ps_codec->i4_first_pic_done)
  ------------------
  |  Branch (1888:12): [True: 1, False: 62]
  ------------------
 1889|      1|        {
 1890|      1|            return IHEVCD_INVALID_PARAMETER;
 1891|      1|        }
 1892|     62|        ps_codec->i4_reset_flag = 1;
 1893|     62|        return (IHEVCD_ERROR_T)IVD_RES_CHANGED;
 1894|     63|    }
 1895|       |
 1896|  2.16k|    if((ps_sps->i2_pic_width_in_luma_samples > MAX_WD) ||
  ------------------
  |  |   53|  2.16k|#define MAX_WD   8448
  ------------------
  |  Branch (1896:8): [True: 128, False: 2.03k]
  ------------------
 1897|  2.16k|                    ((ps_sps->i2_pic_width_in_luma_samples * ps_sps->i2_pic_height_in_luma_samples) >
  ------------------
  |  Branch (1897:21): [True: 128, False: 1.90k]
  ------------------
 1898|  2.03k|                    (MAX_WD * MAX_HT)))
  ------------------
  |  |   53|  2.03k|#define MAX_WD   8448
  ------------------
                                  (MAX_WD * MAX_HT)))
  ------------------
  |  |   64|  2.03k|#define MAX_HT   4320
  ------------------
 1899|    256|    {
 1900|    256|        return (IHEVCD_ERROR_T)IVD_STREAM_WIDTH_HEIGHT_NOT_SUPPORTED;
 1901|    256|    }
 1902|       |
 1903|       |    /* Update display width and display height */
 1904|  1.90k|    {
 1905|  1.90k|        WORD32 disp_wd, disp_ht;
 1906|  1.90k|        WORD32 crop_unit_x, crop_unit_y;
 1907|  1.90k|        crop_unit_x = 1;
 1908|  1.90k|        crop_unit_y = 1;
 1909|       |
 1910|  1.90k|        if(CHROMA_FMT_IDC_YUV420 == ps_sps->i1_chroma_format_idc)
  ------------------
  |  Branch (1910:12): [True: 1.90k, False: 0]
  ------------------
 1911|  1.90k|        {
 1912|  1.90k|            crop_unit_x = 2;
 1913|  1.90k|            crop_unit_y = 2;
 1914|  1.90k|        }
 1915|       |
 1916|  1.90k|        disp_wd = ps_sps->i2_pic_width_in_luma_samples;
 1917|  1.90k|        disp_wd -= ps_sps->i2_pic_crop_left_offset * crop_unit_x;
 1918|  1.90k|        disp_wd -= ps_sps->i2_pic_crop_right_offset * crop_unit_x;
 1919|       |
 1920|       |
 1921|  1.90k|        disp_ht = ps_sps->i2_pic_height_in_luma_samples;
 1922|  1.90k|        disp_ht -= ps_sps->i2_pic_crop_top_offset * crop_unit_y;
 1923|  1.90k|        disp_ht -= ps_sps->i2_pic_crop_bottom_offset * crop_unit_y;
 1924|       |
 1925|  1.90k|        if((0 >= disp_wd) || (0 >= disp_ht))
  ------------------
  |  Branch (1925:12): [True: 134, False: 1.77k]
  |  Branch (1925:30): [True: 0, False: 1.77k]
  ------------------
 1926|    134|            return IHEVCD_INVALID_PARAMETER;
 1927|       |
 1928|  1.77k|        if((0 != ps_codec->u4_allocate_dynamic_done) &&
  ------------------
  |  Branch (1928:12): [True: 840, False: 932]
  ------------------
 1929|  1.77k|                            ((ps_codec->i4_disp_wd != disp_wd) ||
  ------------------
  |  Branch (1929:30): [True: 1, False: 839]
  ------------------
 1930|    840|                            (ps_codec->i4_disp_ht != disp_ht)))
  ------------------
  |  Branch (1930:29): [True: 59, False: 780]
  ------------------
 1931|     60|        {
 1932|     60|            if(0 == ps_codec->i4_first_pic_done)
  ------------------
  |  Branch (1932:16): [True: 4, False: 56]
  ------------------
 1933|      4|            {
 1934|      4|                return IHEVCD_INVALID_PARAMETER;
 1935|      4|            }
 1936|     56|            ps_codec->i4_reset_flag = 1;
 1937|     56|            return (IHEVCD_ERROR_T)IVD_RES_CHANGED;
 1938|     60|        }
 1939|       |
 1940|  1.71k|        ps_codec->i4_disp_wd = disp_wd;
 1941|  1.71k|        ps_codec->i4_disp_ht = disp_ht;
 1942|       |
 1943|       |
 1944|  1.71k|        ps_codec->i4_wd = ps_sps->i2_pic_width_in_luma_samples;
 1945|  1.71k|        ps_codec->i4_ht = ps_sps->i2_pic_height_in_luma_samples;
 1946|  1.71k|        ps_codec->u4_num_8x8_blks = ALIGN64(ps_codec->i4_wd) * ALIGN64(ps_codec->i4_ht) >> 6;
  ------------------
  |  |   50|  1.71k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
                      ps_codec->u4_num_8x8_blks = ALIGN64(ps_codec->i4_wd) * ALIGN64(ps_codec->i4_ht) >> 6;
  ------------------
  |  |   50|  1.71k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1947|       |
 1948|  1.71k|        {
 1949|  1.71k|            WORD32 ref_strd;
 1950|  1.71k|            ref_strd = ALIGN32(ps_sps->i2_pic_width_in_luma_samples + PAD_WD);
  ------------------
  |  |   51|  1.71k|#define ALIGN32(x)  ((((x) + 31) >> 5) << 5)
  ------------------
 1951|  1.71k|            if(ps_codec->i4_strd < ref_strd)
  ------------------
  |  Branch (1951:16): [True: 932, False: 780]
  ------------------
 1952|    932|            {
 1953|    932|                ps_codec->i4_strd = ref_strd;
 1954|    932|            }
 1955|  1.71k|        }
 1956|       |
 1957|  1.71k|        if(0 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (1957:12): [True: 1.71k, False: 0]
  ------------------
 1958|  1.71k|        {
 1959|  1.71k|            if(ps_codec->i4_disp_strd < ps_codec->i4_disp_wd)
  ------------------
  |  Branch (1959:16): [True: 932, False: 780]
  ------------------
 1960|    932|            {
 1961|    932|                ps_codec->i4_disp_strd = ps_codec->i4_disp_wd;
 1962|    932|            }
 1963|  1.71k|        }
 1964|      0|        else
 1965|      0|        {
 1966|      0|            if(ps_codec->i4_disp_strd < ps_codec->i4_strd)
  ------------------
  |  Branch (1966:16): [True: 0, False: 0]
  ------------------
 1967|      0|            {
 1968|      0|                ps_codec->i4_disp_strd = ps_codec->i4_strd;
 1969|      0|            }
 1970|      0|        }
 1971|  1.71k|    }
 1972|       |
 1973|       |    /* This is used only during initialization to get reorder count etc */
 1974|      0|    ps_codec->i4_sps_id = sps_id;
 1975|       |
 1976|  1.71k|    ps_codec->i4_sps_done = 1;
 1977|  1.71k|    return ret;
 1978|  1.77k|}
ihevcd_copy_sps:
 1996|  1.71k|{
 1997|  1.71k|    sps_t *ps_sps, *ps_sps_ref;
 1998|  1.71k|    WORD16 *pi2_scaling_mat_backup;
 1999|  1.71k|    WORD32 scaling_mat_size;
 2000|       |
 2001|  1.71k|    SCALING_MAT_SIZE(scaling_mat_size);
  ------------------
  |  |  194|  1.71k|#define SCALING_MAT_SIZE(m_scaling_mat_size)                                 \
  |  |  195|  1.71k|{                                                                            \
  |  |  196|  1.71k|    m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|  1.71k|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |                   m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|  1.71k|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |  197|  1.71k|    m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|  1.71k|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|  1.71k|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |  198|  1.71k|    m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|  1.71k|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|  1.71k|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |  199|  1.71k|    m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|  1.71k|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |                   m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|  1.71k|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |  200|  1.71k|}
  ------------------
 2002|  1.71k|    ps_sps_ref = ps_codec->ps_sps_base + sps_id_ref;
 2003|  1.71k|    ps_sps = ps_codec->ps_sps_base + sps_id;
 2004|       |
 2005|  1.71k|    if(ps_sps->i1_sps_valid)
  ------------------
  |  Branch (2005:8): [True: 762, False: 950]
  ------------------
 2006|    762|    {
 2007|    762|        if((ps_sps->i1_log2_ctb_size != ps_sps_ref->i1_log2_ctb_size) ||
  ------------------
  |  Branch (2007:12): [True: 0, False: 762]
  ------------------
 2008|    762|                        (ps_sps->i2_pic_wd_in_ctb != ps_sps_ref->i2_pic_wd_in_ctb) ||
  ------------------
  |  Branch (2008:25): [True: 0, False: 762]
  ------------------
 2009|    762|                        (ps_sps->i2_pic_ht_in_ctb != ps_sps_ref->i2_pic_ht_in_ctb))
  ------------------
  |  Branch (2009:25): [True: 0, False: 762]
  ------------------
 2010|      0|        {
 2011|      0|            ihevcd_unmark_pps(ps_codec, sps_id);
 2012|      0|        }
 2013|    762|    }
 2014|       |
 2015|  1.71k|    pi2_scaling_mat_backup = ps_sps->pi2_scaling_mat;
 2016|       |
 2017|  1.71k|    memcpy(ps_sps, ps_sps_ref, sizeof(sps_t));
 2018|  1.71k|    ps_sps->pi2_scaling_mat = pi2_scaling_mat_backup;
 2019|  1.71k|    memcpy(ps_sps->pi2_scaling_mat, ps_sps_ref->pi2_scaling_mat, scaling_mat_size * sizeof(WORD16));
 2020|  1.71k|    ps_sps->i1_sps_valid = 1;
 2021|       |
 2022|  1.71k|    ps_codec->s_parse.ps_sps = ps_sps;
 2023|  1.71k|}
ihevcd_parse_pps:
 2048|  6.14k|{
 2049|  6.14k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2050|  6.14k|    UWORD32 value;
 2051|  6.14k|    WORD32 i4_value;
 2052|  6.14k|    WORD32 pps_id;
 2053|       |
 2054|  6.14k|    pps_t *ps_pps;
 2055|  6.14k|    sps_t *ps_sps;
 2056|  6.14k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
 2057|       |
 2058|       |
 2059|  6.14k|    if(0 == ps_codec->i4_sps_done)
  ------------------
  |  Branch (2059:8): [True: 1.41k, False: 4.73k]
  ------------------
 2060|  1.41k|        return IHEVCD_INVALID_HEADER;
 2061|       |
 2062|  4.73k|    UEV_PARSE("pic_parameter_set_id", value, ps_bitstrm);
  ------------------
  |  |  155|  4.73k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2063|       |
 2064|  4.73k|    pps_id = value;
 2065|  4.73k|    if((pps_id >= MAX_PPS_CNT) || (pps_id < 0))
  ------------------
  |  |  334|  4.73k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  |  Branch (2065:8): [True: 222, False: 4.51k]
  |  Branch (2065:35): [True: 36, False: 4.47k]
  ------------------
 2066|    258|    {
 2067|    258|        if(ps_codec->i4_pps_done)
  ------------------
  |  Branch (2067:12): [True: 237, False: 21]
  ------------------
 2068|    237|            return IHEVCD_UNSUPPORTED_PPS_ID;
 2069|     21|        else
 2070|     21|            pps_id = 0;
 2071|    258|    }
 2072|       |
 2073|       |
 2074|  4.49k|    ps_pps = (ps_codec->s_parse.ps_pps_base + MAX_PPS_CNT - 1);
  ------------------
  |  |  334|  4.49k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
 2075|       |
 2076|  4.49k|    ps_pps->i1_pps_id = pps_id;
 2077|       |
 2078|  4.49k|    UEV_PARSE("seq_parameter_set_id", value, ps_bitstrm);
  ------------------
  |  |  155|  4.49k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2079|  4.49k|    if(value > MAX_SPS_CNT - 2)
  ------------------
  |  |  317|  4.49k|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  |  Branch (2079:8): [True: 21, False: 4.47k]
  ------------------
 2080|     21|    {
 2081|     21|        return IHEVCD_INVALID_PARAMETER;
 2082|     21|    }
 2083|  4.47k|    ps_pps->i1_sps_id = value;
 2084|       |
 2085|  4.47k|    ps_sps = (ps_codec->s_parse.ps_sps_base + ps_pps->i1_sps_id);
 2086|       |
 2087|       |    /* If the SPS that is being referred to has not been parsed,
 2088|       |     * copy an existing SPS to the current location */
 2089|  4.47k|    if(0 == ps_sps->i1_sps_valid)
  ------------------
  |  Branch (2089:8): [True: 432, False: 4.04k]
  ------------------
 2090|    432|    {
 2091|    432|        return IHEVCD_INVALID_HEADER;
 2092|       |
 2093|       |/*
 2094|       |        sps_t *ps_sps_ref = ps_codec->ps_sps_base;
 2095|       |        while(0 == ps_sps_ref->i1_sps_valid)
 2096|       |            ps_sps_ref++;
 2097|       |        ihevcd_copy_sps(ps_codec, ps_pps->i1_sps_id, ps_sps_ref->i1_sps_id);
 2098|       |*/
 2099|    432|    }
 2100|       |
 2101|  4.04k|    BITS_PARSE("dependent_slices_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.04k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2102|  4.04k|    ps_pps->i1_dependent_slice_enabled_flag = value;
 2103|       |
 2104|  4.04k|    BITS_PARSE("output_flag_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.04k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2105|  4.04k|    ps_pps->i1_output_flag_present_flag = value;
 2106|       |
 2107|  4.04k|    BITS_PARSE("num_extra_slice_header_bits", value, ps_bitstrm, 3);
  ------------------
  |  |  148|  4.04k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2108|  4.04k|    ps_pps->i1_num_extra_slice_header_bits = value;
 2109|       |
 2110|       |
 2111|  4.04k|    BITS_PARSE("sign_data_hiding_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.04k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2112|  4.04k|    ps_pps->i1_sign_data_hiding_flag = value;
 2113|       |
 2114|  4.04k|    BITS_PARSE("cabac_init_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.04k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2115|  4.04k|    ps_pps->i1_cabac_init_present_flag = value;
 2116|       |
 2117|  4.04k|    UEV_PARSE("num_ref_idx_l0_default_active_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  4.04k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2118|  4.04k|    if(value > MAX_DPB_SIZE - 2)
  ------------------
  |  |  281|  4.04k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (2118:8): [True: 12, False: 4.03k]
  ------------------
 2119|     12|    {
 2120|     12|         return IHEVCD_INVALID_PARAMETER;
 2121|     12|    }
 2122|  4.03k|    ps_pps->i1_num_ref_idx_l0_default_active = value + 1;
 2123|       |
 2124|  4.03k|    UEV_PARSE("num_ref_idx_l1_default_active_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  4.03k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2125|  4.03k|    if(value > MAX_DPB_SIZE - 2)
  ------------------
  |  |  281|  4.03k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (2125:8): [True: 3, False: 4.02k]
  ------------------
 2126|      3|    {
 2127|      3|        return IHEVCD_INVALID_PARAMETER;
 2128|      3|    }
 2129|  4.02k|    ps_pps->i1_num_ref_idx_l1_default_active = value + 1;
 2130|       |
 2131|  4.02k|    SEV_PARSE("pic_init_qp_minus26", i4_value, ps_bitstrm);
  ------------------
  |  |  162|  4.02k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 2132|  4.02k|    if(i4_value < -26 || i4_value > 25)
  ------------------
  |  Branch (2132:8): [True: 1, False: 4.02k]
  |  Branch (2132:26): [True: 2, False: 4.02k]
  ------------------
 2133|      3|    {
 2134|      3|        return IHEVCD_INVALID_PARAMETER;
 2135|      3|    }
 2136|  4.02k|    ps_pps->i1_pic_init_qp = i4_value + 26;
 2137|       |
 2138|  4.02k|    BITS_PARSE("constrained_intra_pred_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.02k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2139|  4.02k|    ps_pps->i1_constrained_intra_pred_flag = value;
 2140|       |
 2141|  4.02k|    BITS_PARSE("transform_skip_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.02k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2142|  4.02k|    ps_pps->i1_transform_skip_enabled_flag = value;
 2143|       |
 2144|  4.02k|    BITS_PARSE("cu_qp_delta_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.02k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2145|  4.02k|    ps_pps->i1_cu_qp_delta_enabled_flag = value;
 2146|       |
 2147|  4.02k|    if(ps_pps->i1_cu_qp_delta_enabled_flag)
  ------------------
  |  Branch (2147:8): [True: 2.11k, False: 1.90k]
  ------------------
 2148|  2.11k|    {
 2149|  2.11k|        UEV_PARSE("diff_cu_qp_delta_depth", value, ps_bitstrm);
  ------------------
  |  |  155|  2.11k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2150|  2.11k|        if(value > ps_sps->i1_log2_diff_max_min_coding_block_size)
  ------------------
  |  Branch (2150:12): [True: 198, False: 1.92k]
  ------------------
 2151|    198|        {
 2152|    198|            return IHEVCD_INVALID_PARAMETER;
 2153|    198|        }
 2154|  1.92k|        ps_pps->i1_diff_cu_qp_delta_depth = value;
 2155|  1.92k|    }
 2156|  1.90k|    else
 2157|  1.90k|    {
 2158|  1.90k|        ps_pps->i1_diff_cu_qp_delta_depth = 0;
 2159|  1.90k|    }
 2160|  3.82k|    ps_pps->i1_log2_min_cu_qp_delta_size = ps_sps->i1_log2_ctb_size - ps_pps->i1_diff_cu_qp_delta_depth;
 2161|       |    /* Print different */
 2162|  3.82k|    SEV_PARSE("cb_qp_offset", i4_value, ps_bitstrm);
  ------------------
  |  |  162|  3.82k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 2163|  3.82k|    if(i4_value < -12 || i4_value > 12)
  ------------------
  |  Branch (2163:8): [True: 2, False: 3.82k]
  |  Branch (2163:26): [True: 13, False: 3.81k]
  ------------------
 2164|     15|    {
 2165|     15|        return IHEVCD_INVALID_PARAMETER;
 2166|     15|    }
 2167|  3.81k|    ps_pps->i1_pic_cb_qp_offset = i4_value;
 2168|       |
 2169|       |    /* Print different */
 2170|  3.81k|    SEV_PARSE("cr_qp_offset", i4_value, ps_bitstrm);
  ------------------
  |  |  162|  3.81k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 2171|  3.81k|    if(i4_value < -12 || i4_value > 12)
  ------------------
  |  Branch (2171:8): [True: 0, False: 3.81k]
  |  Branch (2171:26): [True: 1, False: 3.81k]
  ------------------
 2172|      1|    {
 2173|      1|        return IHEVCD_INVALID_PARAMETER;
 2174|      1|    }
 2175|  3.81k|    ps_pps->i1_pic_cr_qp_offset = i4_value;
 2176|       |
 2177|       |    /* Print different */
 2178|  3.81k|    BITS_PARSE("slicelevel_chroma_qp_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2179|  3.81k|    ps_pps->i1_pic_slice_level_chroma_qp_offsets_present_flag = value;
 2180|       |
 2181|  3.81k|    BITS_PARSE("weighted_pred_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2182|  3.81k|    ps_pps->i1_weighted_pred_flag = value;
 2183|       |
 2184|  3.81k|    BITS_PARSE("weighted_bipred_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2185|  3.81k|    ps_pps->i1_weighted_bipred_flag = value;
 2186|       |
 2187|  3.81k|    BITS_PARSE("transquant_bypass_enable_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2188|  3.81k|    ps_pps->i1_transquant_bypass_enable_flag = value;
 2189|       |
 2190|  3.81k|    BITS_PARSE("tiles_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2191|  3.81k|    ps_pps->i1_tiles_enabled_flag = value;
 2192|       |
 2193|       |    /* When tiles are enabled and width or height is >= 4096,
 2194|       |     * CTB Size should at least be 32 while if width or height is >= 8192,
 2195|       |     * CTB Size should at least be 64 and so on. 16x16 CTBs can result
 2196|       |     * in tile position greater than 255 for 4096 while 32x32 CTBs can result
 2197|       |     * in tile position greater than 255 for 8192,
 2198|       |     * which decoder does not support.
 2199|       |     */
 2200|  3.81k|    if (ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (2200:9): [True: 1.09k, False: 2.71k]
  ------------------
 2201|  1.09k|    {
 2202|  1.09k|        if((ps_sps->i1_log2_ctb_size == 4) &&
  ------------------
  |  Branch (2202:12): [True: 270, False: 826]
  ------------------
 2203|  1.09k|            ((ps_sps->i2_pic_width_in_luma_samples >= 4096) ||
  ------------------
  |  Branch (2203:14): [True: 0, False: 270]
  ------------------
 2204|    270|            (ps_sps->i2_pic_height_in_luma_samples >= 4096)))
  ------------------
  |  Branch (2204:13): [True: 1, False: 269]
  ------------------
 2205|      1|        {
 2206|      1|            return IHEVCD_INVALID_HEADER;
 2207|      1|        }
 2208|  1.09k|        if((ps_sps->i1_log2_ctb_size == 5) &&
  ------------------
  |  Branch (2208:12): [True: 366, False: 729]
  ------------------
 2209|  1.09k|            ((ps_sps->i2_pic_width_in_luma_samples >= 8192) ||
  ------------------
  |  Branch (2209:14): [True: 0, False: 366]
  ------------------
 2210|    366|            (ps_sps->i2_pic_height_in_luma_samples >= 8192)))
  ------------------
  |  Branch (2210:13): [True: 0, False: 366]
  ------------------
 2211|      0|        {
 2212|      0|            return IHEVCD_INVALID_HEADER;
 2213|      0|        }
 2214|  1.09k|        if((ps_sps->i1_log2_ctb_size == 6) &&
  ------------------
  |  Branch (2214:12): [True: 460, False: 635]
  ------------------
 2215|  1.09k|            ((ps_sps->i2_pic_width_in_luma_samples >= 16384) ||
  ------------------
  |  Branch (2215:14): [True: 0, False: 460]
  ------------------
 2216|    460|            (ps_sps->i2_pic_height_in_luma_samples >= 16384)))
  ------------------
  |  Branch (2216:13): [True: 0, False: 460]
  ------------------
 2217|      0|        {
 2218|      0|            return IHEVCD_INVALID_HEADER;
 2219|      0|        }
 2220|  1.09k|    }
 2221|       |
 2222|  3.81k|    BITS_PARSE("entropy_coding_sync_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2223|  3.81k|    ps_pps->i1_entropy_coding_sync_enabled_flag = value;
 2224|       |
 2225|  3.81k|    ps_pps->i1_loop_filter_across_tiles_enabled_flag = 0;
 2226|  3.81k|    if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (2226:8): [True: 1.09k, False: 2.71k]
  ------------------
 2227|  1.09k|    {
 2228|  1.09k|        WORD32 wd = ALIGN64(ps_codec->i4_wd);
  ------------------
  |  |   50|  1.09k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 2229|  1.09k|        WORD32 ht = ALIGN64(ps_codec->i4_ht);
  ------------------
  |  |   50|  1.09k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 2230|       |
 2231|  1.09k|        WORD32 max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
  ------------------
  |  |  305|  1.09k|#define MIN_TILE_WD  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  1.09k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
                      WORD32 max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
  ------------------
  |  |  305|  1.09k|#define MIN_TILE_WD  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  1.09k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
 2232|  1.09k|        WORD32 max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
  ------------------
  |  |  308|  1.09k|#define MIN_TILE_HT  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  1.09k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
                      WORD32 max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
  ------------------
  |  |  308|  1.09k|#define MIN_TILE_HT  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  1.09k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
 2233|       |
 2234|  1.09k|        UEV_PARSE("num_tile_columns_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  1.09k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2235|  1.09k|        ps_pps->i1_num_tile_columns = value + 1;
 2236|       |
 2237|  1.09k|        UEV_PARSE("num_tile_rows_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  1.09k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2238|  1.09k|        ps_pps->i1_num_tile_rows = value + 1;
 2239|       |
 2240|  1.09k|        if((ps_pps->i1_num_tile_columns < 1) ||
  ------------------
  |  Branch (2240:12): [True: 6, False: 1.08k]
  ------------------
 2241|  1.09k|                        (ps_pps->i1_num_tile_columns > max_tile_cols) ||
  ------------------
  |  Branch (2241:25): [True: 2, False: 1.08k]
  ------------------
 2242|  1.09k|                        (ps_pps->i1_num_tile_rows < 1) ||
  ------------------
  |  Branch (2242:25): [True: 0, False: 1.08k]
  ------------------
 2243|  1.09k|                        (ps_pps->i1_num_tile_rows > max_tile_rows))
  ------------------
  |  Branch (2243:25): [True: 8, False: 1.07k]
  ------------------
 2244|     16|            return IHEVCD_INVALID_HEADER;
 2245|       |
 2246|  1.07k|        BITS_PARSE("uniform_spacing_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2247|  1.07k|        ps_pps->i1_uniform_spacing_flag = value;
 2248|       |
 2249|       |
 2250|  1.07k|        {
 2251|       |
 2252|  1.07k|            UWORD32 start;
 2253|  1.07k|            WORD32 i, j;
 2254|       |
 2255|       |
 2256|  1.07k|            start = 0;
 2257|  2.65k|            for(i = 0; i < ps_pps->i1_num_tile_columns; i++)
  ------------------
  |  Branch (2257:24): [True: 1.57k, False: 1.07k]
  ------------------
 2258|  1.57k|            {
 2259|  1.57k|                tile_t *ps_tile;
 2260|  1.57k|                if(!ps_pps->i1_uniform_spacing_flag)
  ------------------
  |  Branch (2260:20): [True: 626, False: 950]
  ------------------
 2261|    626|                {
 2262|    626|                    if(i < (ps_pps->i1_num_tile_columns - 1))
  ------------------
  |  Branch (2262:24): [True: 112, False: 514]
  ------------------
 2263|    112|                    {
 2264|    112|                        UEV_PARSE("column_width_minus1[ i ]", value, ps_bitstrm);
  ------------------
  |  |  155|    112|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2265|    112|                        value += 1;
 2266|    112|                        if (value >= ps_sps->i2_pic_wd_in_ctb - start)
  ------------------
  |  Branch (2266:29): [True: 3, False: 109]
  ------------------
 2267|      3|                        {
 2268|      3|                            return IHEVCD_INVALID_HEADER;
 2269|      3|                        }
 2270|    112|                    }
 2271|    514|                    else
 2272|    514|                    {
 2273|    514|                        value = ps_sps->i2_pic_wd_in_ctb - start;
 2274|    514|                    }
 2275|    626|                }
 2276|    950|                else
 2277|    950|                {
 2278|    950|                    value = ((i + 1) * ps_sps->i2_pic_wd_in_ctb) / ps_pps->i1_num_tile_columns -
 2279|    950|                                    (i * ps_sps->i2_pic_wd_in_ctb) / ps_pps->i1_num_tile_columns;
 2280|    950|                }
 2281|       |
 2282|  6.95k|                for(j = 0; j < ps_pps->i1_num_tile_rows; j++)
  ------------------
  |  Branch (2282:28): [True: 5.37k, False: 1.57k]
  ------------------
 2283|  5.37k|                {
 2284|  5.37k|                    ps_tile = ps_pps->ps_tile + j * ps_pps->i1_num_tile_columns + i;
 2285|  5.37k|                    ps_tile->u1_pos_x = start;
 2286|  5.37k|                    ps_tile->u2_wd = value;
 2287|  5.37k|                }
 2288|  1.57k|                start += value;
 2289|       |
 2290|  1.57k|                if((start > ps_sps->i2_pic_wd_in_ctb) ||
  ------------------
  |  Branch (2290:20): [True: 0, False: 1.57k]
  ------------------
 2291|  1.57k|                                (value == 0))
  ------------------
  |  Branch (2291:33): [True: 0, False: 1.57k]
  ------------------
 2292|      0|                    return IHEVCD_INVALID_HEADER;
 2293|  1.57k|            }
 2294|       |
 2295|  1.07k|            start = 0;
 2296|  4.25k|            for(i = 0; i < (ps_pps->i1_num_tile_rows); i++)
  ------------------
  |  Branch (2296:24): [True: 3.18k, False: 1.07k]
  ------------------
 2297|  3.18k|            {
 2298|  3.18k|                tile_t *ps_tile;
 2299|  3.18k|                if(!ps_pps->i1_uniform_spacing_flag)
  ------------------
  |  Branch (2299:20): [True: 657, False: 2.52k]
  ------------------
 2300|    657|                {
 2301|    657|                    if(i < (ps_pps->i1_num_tile_rows - 1))
  ------------------
  |  Branch (2301:24): [True: 146, False: 511]
  ------------------
 2302|    146|                    {
 2303|       |
 2304|    146|                        UEV_PARSE("row_height_minus1[ i ]", value, ps_bitstrm);
  ------------------
  |  |  155|    146|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2305|    146|                        value += 1;
 2306|    146|                        if (value >= ps_sps->i2_pic_ht_in_ctb - start)
  ------------------
  |  Branch (2306:29): [True: 3, False: 143]
  ------------------
 2307|      3|                        {
 2308|      3|                            return IHEVCD_INVALID_HEADER;
 2309|      3|                        }
 2310|    146|                    }
 2311|    511|                    else
 2312|    511|                    {
 2313|    511|                        value = ps_sps->i2_pic_ht_in_ctb - start;
 2314|    511|                    }
 2315|    657|                }
 2316|  2.52k|                else
 2317|  2.52k|                {
 2318|  2.52k|                    value = ((i + 1) * ps_sps->i2_pic_ht_in_ctb) / ps_pps->i1_num_tile_rows -
 2319|  2.52k|                                    (i * ps_sps->i2_pic_ht_in_ctb) / ps_pps->i1_num_tile_rows;
 2320|  2.52k|                }
 2321|       |
 2322|  8.53k|                for(j = 0; j < ps_pps->i1_num_tile_columns; j++)
  ------------------
  |  Branch (2322:28): [True: 5.35k, False: 3.18k]
  ------------------
 2323|  5.35k|                {
 2324|  5.35k|                    ps_tile = ps_pps->ps_tile + i * ps_pps->i1_num_tile_columns + j;
 2325|  5.35k|                    ps_tile->u1_pos_y = start;
 2326|  5.35k|                    ps_tile->u2_ht = value;
 2327|  5.35k|                }
 2328|  3.18k|                start += value;
 2329|       |
 2330|  3.18k|                if((start > ps_sps->i2_pic_ht_in_ctb) ||
  ------------------
  |  Branch (2330:20): [True: 0, False: 3.18k]
  ------------------
 2331|  3.18k|                                (value == 0))
  ------------------
  |  Branch (2331:33): [True: 0, False: 3.18k]
  ------------------
 2332|      0|                    return IHEVCD_INVALID_HEADER;
 2333|  3.18k|            }
 2334|  1.07k|        }
 2335|       |
 2336|       |
 2337|  1.07k|        BITS_PARSE("loop_filter_across_tiles_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2338|  1.07k|        ps_pps->i1_loop_filter_across_tiles_enabled_flag = value;
 2339|       |
 2340|  1.07k|    }
 2341|  2.71k|    else
 2342|  2.71k|    {
 2343|       |        /* If tiles are not present, set first tile in each PPS to have tile
 2344|       |        width and height equal to picture width and height */
 2345|  2.71k|        ps_pps->i1_num_tile_columns = 1;
 2346|  2.71k|        ps_pps->i1_num_tile_rows = 1;
 2347|  2.71k|        ps_pps->i1_uniform_spacing_flag = 1;
 2348|       |
 2349|  2.71k|        ps_pps->ps_tile->u1_pos_x = 0;
 2350|  2.71k|        ps_pps->ps_tile->u1_pos_y = 0;
 2351|  2.71k|        ps_pps->ps_tile->u2_wd = ps_sps->i2_pic_wd_in_ctb;
 2352|  2.71k|        ps_pps->ps_tile->u2_ht = ps_sps->i2_pic_ht_in_ctb;
 2353|  2.71k|    }
 2354|       |
 2355|  3.78k|    BITS_PARSE("loop_filter_across_slices_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.78k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2356|  3.78k|    ps_pps->i1_loop_filter_across_slices_enabled_flag = value;
 2357|       |
 2358|  3.78k|    BITS_PARSE("deblocking_filter_control_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.78k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2359|  3.78k|    ps_pps->i1_deblocking_filter_control_present_flag = value;
 2360|       |
 2361|       |    /* Default values */
 2362|  3.78k|    ps_pps->i1_pic_disable_deblocking_filter_flag = 0;
 2363|  3.78k|    ps_pps->i1_deblocking_filter_override_enabled_flag = 0;
 2364|  3.78k|    ps_pps->i1_beta_offset_div2 = 0;
 2365|  3.78k|    ps_pps->i1_tc_offset_div2 = 0;
 2366|       |
 2367|  3.78k|    if(ps_pps->i1_deblocking_filter_control_present_flag)
  ------------------
  |  Branch (2367:8): [True: 559, False: 3.23k]
  ------------------
 2368|    559|    {
 2369|       |
 2370|    559|        BITS_PARSE("deblocking_filter_override_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    559|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2371|    559|        ps_pps->i1_deblocking_filter_override_enabled_flag = value;
 2372|       |
 2373|    559|        BITS_PARSE("pic_disable_deblocking_filter_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    559|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2374|    559|        ps_pps->i1_pic_disable_deblocking_filter_flag = value;
 2375|       |
 2376|    559|        if(!ps_pps->i1_pic_disable_deblocking_filter_flag)
  ------------------
  |  Branch (2376:12): [True: 361, False: 198]
  ------------------
 2377|    361|        {
 2378|       |
 2379|    361|            SEV_PARSE("pps_beta_offset_div2", i4_value, ps_bitstrm);
  ------------------
  |  |  162|    361|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 2380|    361|            if(i4_value < -6 || i4_value > 6)
  ------------------
  |  Branch (2380:16): [True: 0, False: 361]
  |  Branch (2380:33): [True: 1, False: 360]
  ------------------
 2381|      1|            {
 2382|      1|                return IHEVCD_INVALID_PARAMETER;
 2383|      1|            }
 2384|    360|            ps_pps->i1_beta_offset_div2 = i4_value;
 2385|       |
 2386|    360|            SEV_PARSE("pps_tc_offset_div2", i4_value, ps_bitstrm);
  ------------------
  |  |  162|    360|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
 2387|    360|            if(i4_value < -6 || i4_value > 6)
  ------------------
  |  Branch (2387:16): [True: 0, False: 360]
  |  Branch (2387:33): [True: 1, False: 359]
  ------------------
 2388|      1|            {
 2389|      1|                return IHEVCD_INVALID_PARAMETER;
 2390|      1|            }
 2391|    359|            ps_pps->i1_tc_offset_div2 = i4_value;
 2392|       |
 2393|    359|        }
 2394|    559|    }
 2395|       |
 2396|  3.78k|    BITS_PARSE("pps_scaling_list_data_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.78k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2397|  3.78k|    ps_pps->i1_pps_scaling_list_data_present_flag = value;
 2398|       |
 2399|  3.78k|    if(ps_pps->i1_pps_scaling_list_data_present_flag)
  ------------------
  |  Branch (2399:8): [True: 629, False: 3.15k]
  ------------------
 2400|    629|    {
 2401|    629|        COPY_DEFAULT_SCALING_LIST(ps_pps->pi2_scaling_mat);
  ------------------
  |  |   76|    629|#define COPY_DEFAULT_SCALING_LIST(pi2_scaling_mat)                                                                                      \
  |  |   77|    629|{                                                                                                                                       \
  |  |   78|    629|    WORD32 scaling_mat_offset[]={0, 16, 32, 48, 64, 80, 96, 160, 224, 288, 352, 416, 480, 736, 992, 1248, 1504, 1760, 2016, 3040};      \
  |  |   79|    629|                                                                                                                                        \
  |  |   80|    629|    /* scaling matrix for 4x4 */                                                                                                        \
  |  |   81|    629|    memcpy(pi2_scaling_mat, gi2_flat_scale_mat_32x32, 6*16*sizeof(WORD16));                                                             \
  |  |   82|    629|/* scaling matrix for 8x8 */                                                                                                            \
  |  |   83|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[6], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   84|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[7], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   85|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[8], gi2_intra_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   86|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[9], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16));                                \
  |  |   87|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[10], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16));                               \
  |  |   88|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[11], gi2_inter_default_scale_mat_8x8, 64*sizeof(WORD16));                               \
  |  |   89|    629|    /* scaling matrix for 16x16 */                                                                                                      \
  |  |   90|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[12], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   91|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[13], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   92|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[14], gi2_intra_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   93|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[15], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   94|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[16], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   95|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[17], gi2_inter_default_scale_mat_16x16, 256*sizeof(WORD16));                            \
  |  |   96|    629|    /* scaling matrix for 32x32 */                                                                                                      \
  |  |   97|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[18], gi2_intra_default_scale_mat_32x32, 1024*sizeof(WORD16));                           \
  |  |   98|    629|    memcpy(pi2_scaling_mat + scaling_mat_offset[19], gi2_inter_default_scale_mat_32x32, 1024*sizeof(WORD16));                           \
  |  |   99|    629|}
  ------------------
 2402|    629|        ihevcd_scaling_list_data(ps_codec, ps_pps->pi2_scaling_mat);
 2403|    629|    }
 2404|       |
 2405|  3.78k|    BITS_PARSE("lists_modification_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.78k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2406|  3.78k|    ps_pps->i1_lists_modification_present_flag = value;
 2407|  3.78k|    UEV_PARSE("log2_parallel_merge_level_minus2", value, ps_bitstrm);
  ------------------
  |  |  155|  3.78k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2408|  3.78k|    if(value > (ps_sps->i1_log2_min_coding_block_size + ps_sps->i1_log2_diff_max_min_coding_block_size))
  ------------------
  |  Branch (2408:8): [True: 40, False: 3.74k]
  ------------------
 2409|     40|    {
 2410|     40|        return IHEVCD_INVALID_PARAMETER;
 2411|     40|    }
 2412|  3.74k|    ps_pps->i1_log2_parallel_merge_level = value + 2;
 2413|       |
 2414|  3.74k|    BITS_PARSE("slice_header_extension_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.74k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2415|  3.74k|    ps_pps->i1_slice_header_extension_present_flag = value;
 2416|       |    /* Not present in HM */
 2417|  3.74k|    BITS_PARSE("pps_extension_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.74k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2418|       |
 2419|  3.74k|    if((UWORD8 *)ps_bitstrm->pu4_buf > ps_bitstrm->pu1_buf_max)
  ------------------
  |  Branch (2419:8): [True: 14, False: 3.73k]
  ------------------
 2420|     14|        return IHEVCD_INVALID_PARAMETER;
 2421|       |
 2422|  3.73k|    ps_codec->i4_pps_done = 1;
 2423|  3.73k|    return ret;
 2424|  3.74k|}
ihevcd_copy_pps:
 2428|  4.88k|{
 2429|  4.88k|    pps_t *ps_pps, *ps_pps_ref;
 2430|  4.88k|    WORD16 *pi2_scaling_mat_backup;
 2431|  4.88k|    WORD32 scaling_mat_size;
 2432|  4.88k|    tile_t *ps_tile_backup;
 2433|  4.88k|    WORD32 max_tile_cols, max_tile_rows;
 2434|  4.88k|    WORD32 wd, ht;
 2435|  4.88k|    wd = ALIGN64(ps_codec->i4_wd);
  ------------------
  |  |   50|  4.88k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 2436|  4.88k|    ht = ALIGN64(ps_codec->i4_ht);
  ------------------
  |  |   50|  4.88k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 2437|       |
 2438|  4.88k|    SCALING_MAT_SIZE(scaling_mat_size);
  ------------------
  |  |  194|  4.88k|#define SCALING_MAT_SIZE(m_scaling_mat_size)                                 \
  |  |  195|  4.88k|{                                                                            \
  |  |  196|  4.88k|    m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|  4.88k|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |                   m_scaling_mat_size = 6 * TRANS_SIZE_4 * TRANS_SIZE_4;                    \
  |  |  ------------------
  |  |  |  |  419|  4.88k|#define TRANS_SIZE_4   4
  |  |  ------------------
  |  |  197|  4.88k|    m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|  4.88k|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_8 * TRANS_SIZE_8;                   \
  |  |  ------------------
  |  |  |  |  420|  4.88k|#define TRANS_SIZE_8   8
  |  |  ------------------
  |  |  198|  4.88k|    m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|  4.88k|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |                   m_scaling_mat_size += 6 * TRANS_SIZE_16 * TRANS_SIZE_16;                 \
  |  |  ------------------
  |  |  |  |  421|  4.88k|#define TRANS_SIZE_16 16
  |  |  ------------------
  |  |  199|  4.88k|    m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|  4.88k|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |                   m_scaling_mat_size += 2 * TRANS_SIZE_32 * TRANS_SIZE_32;                 \
  |  |  ------------------
  |  |  |  |  422|  4.88k|#define TRANS_SIZE_32 32
  |  |  ------------------
  |  |  200|  4.88k|}
  ------------------
 2439|  4.88k|    max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
  ------------------
  |  |  305|  4.88k|#define MIN_TILE_WD  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  4.88k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
                  max_tile_cols = (wd + MIN_TILE_WD - 1) / MIN_TILE_WD;
  ------------------
  |  |  305|  4.88k|#define MIN_TILE_WD  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  4.88k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
 2440|  4.88k|    max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
  ------------------
  |  |  308|  4.88k|#define MIN_TILE_HT  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  4.88k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
                  max_tile_rows = (ht + MIN_TILE_HT - 1) / MIN_TILE_HT;
  ------------------
  |  |  308|  4.88k|#define MIN_TILE_HT  MAX_CTB_SIZE
  |  |  ------------------
  |  |  |  |  341|  4.88k|#define MAX_CTB_SIZE        64
  |  |  ------------------
  ------------------
 2441|       |
 2442|  4.88k|    ps_pps_ref = ps_codec->ps_pps_base + pps_id_ref;
 2443|  4.88k|    ps_pps = ps_codec->ps_pps_base + pps_id;
 2444|       |
 2445|  4.88k|    pi2_scaling_mat_backup = ps_pps->pi2_scaling_mat;
 2446|  4.88k|    ps_tile_backup = ps_pps->ps_tile;
 2447|       |
 2448|  4.88k|    memcpy(ps_pps, ps_pps_ref, sizeof(pps_t));
 2449|  4.88k|    ps_pps->pi2_scaling_mat = pi2_scaling_mat_backup;
 2450|  4.88k|    ps_pps->ps_tile = ps_tile_backup;
 2451|  4.88k|    memcpy(ps_pps->pi2_scaling_mat, ps_pps_ref->pi2_scaling_mat, scaling_mat_size * sizeof(WORD16));
 2452|  4.88k|    memcpy(ps_pps->ps_tile, ps_pps_ref->ps_tile, max_tile_cols * max_tile_rows * sizeof(tile_t));
 2453|       |
 2454|  4.88k|    ps_pps->i1_pps_valid = 1;
 2455|       |
 2456|  4.88k|    ps_codec->s_parse.ps_pps = ps_pps;
 2457|  4.88k|}
ihevcd_parse_buffering_period_sei:
 2462|     12|{
 2463|     12|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 2464|     12|    bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm;
 2465|     12|    UWORD32 value;
 2466|     12|    vui_t *ps_vui;
 2467|     12|    buf_period_sei_params_t *ps_buf_period_sei_params;
 2468|     12|    UWORD32 i;
 2469|     12|    hrd_params_t *ps_vui_hdr;
 2470|     12|    UWORD32 u4_cpb_cnt;
 2471|       |
 2472|     12|    ps_vui = &ps_sps->s_vui_parameters;
 2473|     12|    ps_vui_hdr = &ps_vui->s_vui_hrd_parameters;
 2474|       |
 2475|     12|    ps_buf_period_sei_params = &ps_parse->s_sei_params.s_buf_period_sei_params;
 2476|       |
 2477|     12|    ps_parse->s_sei_params.i1_buf_period_params_present_flag = 1;
 2478|       |
 2479|     12|    UEV_PARSE("bp_seq_parameter_set_id", value, ps_bitstrm);
  ------------------
  |  |  155|     12|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2480|     12|    if(value > MAX_SPS_CNT - 2)
  ------------------
  |  |  317|     12|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  |  Branch (2480:8): [True: 2, False: 10]
  ------------------
 2481|      2|    {
 2482|      2|        return IHEVCD_INVALID_PARAMETER;
 2483|      2|    }
 2484|     10|    ps_buf_period_sei_params->u1_bp_seq_parameter_set_id = value;
 2485|       |
 2486|     10|    if(!ps_vui_hdr->u1_sub_pic_cpb_params_present_flag)
  ------------------
  |  Branch (2486:8): [True: 10, False: 0]
  ------------------
 2487|     10|    {
 2488|     10|        BITS_PARSE("irap_cpb_params_present_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|     10|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2489|     10|        ps_buf_period_sei_params->u1_rap_cpb_params_present_flag = value;
 2490|     10|    }
 2491|       |
 2492|     10|    if(ps_buf_period_sei_params->u1_rap_cpb_params_present_flag)
  ------------------
  |  Branch (2492:8): [True: 6, False: 4]
  ------------------
 2493|      6|    {
 2494|      6|        BITS_PARSE("cpb_delay_offset",
  ------------------
  |  |  148|      6|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2495|      6|                   value,
 2496|      6|                   ps_bitstrm,
 2497|      6|                   (ps_vui_hdr->u1_au_cpb_removal_delay_length_minus1
 2498|      6|                                   + 1));
 2499|      6|        ps_buf_period_sei_params->u4_cpb_delay_offset = value;
 2500|       |
 2501|      6|        BITS_PARSE("dpb_delay_offset",
  ------------------
  |  |  148|      6|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2502|      6|                   value,
 2503|      6|                   ps_bitstrm,
 2504|      6|                   (ps_vui_hdr->u1_dpb_output_delay_length_minus1
 2505|      6|                                   + 1));
 2506|      6|        ps_buf_period_sei_params->u4_dpb_delay_offset = value;
 2507|      6|    }
 2508|      4|    else
 2509|      4|    {
 2510|      4|        ps_buf_period_sei_params->u4_cpb_delay_offset = 0;
 2511|      4|        ps_buf_period_sei_params->u4_dpb_delay_offset = 0;
 2512|      4|    }
 2513|       |
 2514|     10|    BITS_PARSE("concatenation_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|     10|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2515|     10|    ps_buf_period_sei_params->u1_concatenation_flag = value;
 2516|       |
 2517|     10|    BITS_PARSE("au_cpb_removal_delay_delta_minus1",
  ------------------
  |  |  148|     10|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2518|     10|               value,
 2519|     10|               ps_bitstrm,
 2520|     10|               (ps_vui_hdr->u1_au_cpb_removal_delay_length_minus1
 2521|     10|                               + 1));
 2522|     10|    ps_buf_period_sei_params->u4_au_cpb_removal_delay_delta_minus1 = value;
 2523|       |
 2524|     10|    if(ps_vui_hdr->u1_nal_hrd_parameters_present_flag)
  ------------------
  |  Branch (2524:8): [True: 0, False: 10]
  ------------------
 2525|      0|    {
 2526|      0|        u4_cpb_cnt = ps_vui_hdr->au1_cpb_cnt_minus1[0];
 2527|       |
 2528|      0|        for(i = 0; i <= u4_cpb_cnt; i++)
  ------------------
  |  Branch (2528:20): [True: 0, False: 0]
  ------------------
 2529|      0|        {
 2530|      0|            BITS_PARSE("nal_initial_cpb_removal_delay[i]",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2531|      0|                       value,
 2532|      0|                       ps_bitstrm,
 2533|      0|                       (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2534|      0|                                       + 1));
 2535|      0|            ps_buf_period_sei_params->au4_nal_initial_cpb_removal_delay[i] =
 2536|      0|                            value;
 2537|       |
 2538|      0|            BITS_PARSE("nal_initial_cpb_removal_delay_offset",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2539|      0|                       value,
 2540|      0|                       ps_bitstrm,
 2541|      0|                       (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2542|      0|                                       + 1));
 2543|      0|            ps_buf_period_sei_params->au4_nal_initial_cpb_removal_delay_offset[i] =
 2544|      0|                            value;
 2545|       |
 2546|      0|            if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag
  ------------------
  |  Branch (2546:16): [True: 0, False: 0]
  ------------------
 2547|      0|                            || ps_buf_period_sei_params->u1_rap_cpb_params_present_flag)
  ------------------
  |  Branch (2547:32): [True: 0, False: 0]
  ------------------
 2548|      0|            {
 2549|      0|                BITS_PARSE("nal_initial_alt_cpb_removal_delay[i]",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2550|      0|                           value,
 2551|      0|                           ps_bitstrm,
 2552|      0|                           (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2553|      0|                                           + 1));
 2554|      0|                ps_buf_period_sei_params->au4_nal_initial_alt_cpb_removal_delay[i] =
 2555|      0|                                value;
 2556|       |
 2557|      0|                BITS_PARSE("nal_initial_alt_cpb_removal_delay_offset",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2558|      0|                           value,
 2559|      0|                           ps_bitstrm,
 2560|      0|                           (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2561|      0|                                           + 1));
 2562|      0|                ps_buf_period_sei_params->au4_nal_initial_alt_cpb_removal_delay_offset[i] =
 2563|      0|                                value;
 2564|      0|            }
 2565|      0|        }
 2566|      0|    }
 2567|       |
 2568|     10|    if(ps_vui_hdr->u1_vcl_hrd_parameters_present_flag)
  ------------------
  |  Branch (2568:8): [True: 0, False: 10]
  ------------------
 2569|      0|    {
 2570|      0|        u4_cpb_cnt = ps_vui_hdr->au1_cpb_cnt_minus1[0];
 2571|       |
 2572|      0|        for(i = 0; i <= u4_cpb_cnt; i++)
  ------------------
  |  Branch (2572:20): [True: 0, False: 0]
  ------------------
 2573|      0|        {
 2574|      0|            BITS_PARSE("vcl_initial_cpb_removal_delay[i]",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2575|      0|                       value,
 2576|      0|                       ps_bitstrm,
 2577|      0|                       (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2578|      0|                                       + 1));
 2579|      0|            ps_buf_period_sei_params->au4_vcl_initial_cpb_removal_delay[i] =
 2580|      0|                            value;
 2581|       |
 2582|      0|            BITS_PARSE("vcl_initial_cpb_removal_delay_offset",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2583|      0|                       value,
 2584|      0|                       ps_bitstrm,
 2585|      0|                       (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2586|      0|                                       + 1));
 2587|      0|            ps_buf_period_sei_params->au4_vcl_initial_cpb_removal_delay_offset[i] =
 2588|      0|                            value;
 2589|       |
 2590|      0|            if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag
  ------------------
  |  Branch (2590:16): [True: 0, False: 0]
  ------------------
 2591|      0|                            || ps_buf_period_sei_params->u1_rap_cpb_params_present_flag)
  ------------------
  |  Branch (2591:32): [True: 0, False: 0]
  ------------------
 2592|      0|            {
 2593|      0|                BITS_PARSE("vcl_initial_alt_cpb_removal_delay[i]",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2594|      0|                           value,
 2595|      0|                           ps_bitstrm,
 2596|      0|                           (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2597|      0|                                           + 1));
 2598|      0|                ps_buf_period_sei_params->au4_vcl_initial_alt_cpb_removal_delay[i] =
 2599|      0|                                value;
 2600|       |
 2601|      0|                BITS_PARSE("vcl_initial_alt_cpb_removal_delay_offset",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2602|      0|                           value,
 2603|      0|                           ps_bitstrm,
 2604|      0|                           (ps_vui_hdr->u1_initial_cpb_removal_delay_length_minus1
 2605|      0|                                           + 1));
 2606|      0|                ps_buf_period_sei_params->au4_vcl_initial_alt_cpb_removal_delay_offset[i] =
 2607|      0|                                value;
 2608|      0|            }
 2609|      0|        }
 2610|      0|    }
 2611|       |
 2612|     10|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2613|     12|}
ihevcd_parse_pic_timing_sei:
 2616|     66|{
 2617|     66|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 2618|     66|    bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm;
 2619|     66|    UWORD32 value;
 2620|     66|    vui_t *ps_vui;
 2621|     66|    UWORD32 i;
 2622|     66|    hrd_params_t *ps_vui_hdr;
 2623|     66|    UWORD32 u4_cpb_dpb_delays_present_flag = 0;
 2624|     66|    pic_timing_sei_params_t *ps_pic_timing;
 2625|       |
 2626|     66|    ps_pic_timing = &ps_parse->s_sei_params.s_pic_timing_sei_params;
 2627|     66|    ps_vui = &ps_sps->s_vui_parameters;
 2628|     66|    ps_vui_hdr = &ps_vui->s_vui_hrd_parameters;
 2629|     66|    ps_parse->s_sei_params.i1_pic_timing_params_present_flag = 1;
 2630|     66|    if(ps_vui->u1_frame_field_info_present_flag)
  ------------------
  |  Branch (2630:8): [True: 0, False: 66]
  ------------------
 2631|      0|    {
 2632|      0|        BITS_PARSE("pic_struct", value, ps_bitstrm, 4);
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2633|      0|        ps_pic_timing->u4_pic_struct = value;
 2634|       |
 2635|      0|        BITS_PARSE("source_scan_type", value, ps_bitstrm, 2);
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2636|      0|        ps_pic_timing->u4_source_scan_type = value;
 2637|       |
 2638|      0|        BITS_PARSE("duplicate_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2639|      0|        ps_pic_timing->u1_duplicate_flag = value;
 2640|      0|    }
 2641|       |
 2642|     66|    if(ps_vui_hdr->u1_nal_hrd_parameters_present_flag
  ------------------
  |  Branch (2642:8): [True: 4, False: 62]
  ------------------
 2643|     66|                    || ps_vui_hdr->u1_vcl_hrd_parameters_present_flag)
  ------------------
  |  Branch (2643:24): [True: 0, False: 62]
  ------------------
 2644|      4|    {
 2645|      4|        u4_cpb_dpb_delays_present_flag = 1;
 2646|      4|    }
 2647|     62|    else
 2648|     62|    {
 2649|     62|        u4_cpb_dpb_delays_present_flag = 0;
 2650|     62|    }
 2651|       |
 2652|     66|    if(u4_cpb_dpb_delays_present_flag)
  ------------------
  |  Branch (2652:8): [True: 4, False: 62]
  ------------------
 2653|      4|    {
 2654|      4|        BITS_PARSE("au_cpb_removal_delay_minus1", value, ps_bitstrm,
  ------------------
  |  |  148|      4|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2655|      4|                   (ps_vui_hdr->u1_au_cpb_removal_delay_length_minus1 + 1));
 2656|      4|        ps_pic_timing->u4_au_cpb_removal_delay_minus1 = value;
 2657|       |
 2658|      4|        BITS_PARSE("pic_dpb_output_delay", value, ps_bitstrm,
  ------------------
  |  |  148|      4|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2659|      4|                   (ps_vui_hdr->u1_dpb_output_delay_length_minus1 + 1));
 2660|      4|        ps_pic_timing->u4_pic_dpb_output_delay = value;
 2661|       |
 2662|      4|        if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag)
  ------------------
  |  Branch (2662:12): [True: 4, False: 0]
  ------------------
 2663|      4|        {
 2664|      4|            BITS_PARSE("pic_dpb_output_du_delay", value, ps_bitstrm,
  ------------------
  |  |  148|      4|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2665|      4|                       (ps_vui_hdr->u1_dpb_output_delay_du_length_minus1 + 1));
 2666|      4|            ps_pic_timing->u4_pic_dpb_output_du_delay = value;
 2667|      4|        }
 2668|       |
 2669|      4|        if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag
  ------------------
  |  Branch (2669:12): [True: 4, False: 0]
  ------------------
 2670|      4|                        && ps_vui_hdr->u1_sub_pic_cpb_params_in_pic_timing_sei_flag)
  ------------------
  |  Branch (2670:28): [True: 4, False: 0]
  ------------------
 2671|      4|        {
 2672|      4|            UWORD32 num_units_minus1;
 2673|      4|            UWORD32 array_size;
 2674|       |
 2675|      4|            UEV_PARSE("num_decoding_units_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|      4|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2676|      4|            if(value > (ps_sps->i4_pic_size_in_ctb -1))
  ------------------
  |  Branch (2676:16): [True: 0, False: 4]
  ------------------
 2677|      0|            {
 2678|      0|                return IHEVCD_INVALID_PARAMETER;
 2679|      0|            }
 2680|      4|            ps_pic_timing->u4_num_decoding_units_minus1 = value;
 2681|       |
 2682|      4|            num_units_minus1 = ps_pic_timing->u4_num_decoding_units_minus1;
 2683|      4|            array_size = (sizeof(ps_pic_timing->au4_num_nalus_in_du_minus1)
 2684|      4|                       / sizeof(ps_pic_timing->au4_num_nalus_in_du_minus1[0]));
 2685|      4|            num_units_minus1 = CLIP3(num_units_minus1, 0,(array_size - 1));
  ------------------
  |  |   40|      4|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 4]
  |  |  |  Branch (40:53): [True: 0, False: 4]
  |  |  ------------------
  ------------------
 2686|      4|            ps_pic_timing->u4_num_decoding_units_minus1 = num_units_minus1;
 2687|       |
 2688|      4|            BITS_PARSE("du_common_cpb_removal_delay_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|      4|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2689|      4|            ps_pic_timing->u1_du_common_cpb_removal_delay_flag = value;
 2690|       |
 2691|      4|            if(ps_pic_timing->u1_du_common_cpb_removal_delay_flag)
  ------------------
  |  Branch (2691:16): [True: 0, False: 4]
  ------------------
 2692|      0|            {
 2693|      0|                BITS_PARSE("du_common_cpb_removal_delay_increment_minus1",
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2694|      0|                           value,
 2695|      0|                           ps_bitstrm,
 2696|      0|                           (ps_vui_hdr->u1_du_cpb_removal_delay_increment_length_minus1
 2697|      0|                                           + 1));
 2698|      0|                ps_pic_timing->u4_du_common_cpb_removal_delay_increment_minus1 =
 2699|      0|                                value;
 2700|      0|            }
 2701|       |
 2702|      8|            for(i = 0; i <= ps_pic_timing->u4_num_decoding_units_minus1; i++)
  ------------------
  |  Branch (2702:24): [True: 6, False: 2]
  ------------------
 2703|      6|            {
 2704|      6|                UEV_PARSE("num_nalus_in_du_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|      6|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
 2705|      6|                if(value > (ps_sps->i4_pic_size_in_ctb -1))
  ------------------
  |  Branch (2705:20): [True: 2, False: 4]
  ------------------
 2706|      2|                {
 2707|      2|                    return IHEVCD_INVALID_PARAMETER;
 2708|      2|                }
 2709|      4|                ps_pic_timing->au4_num_nalus_in_du_minus1[i] = value;
 2710|       |
 2711|      4|                if((!ps_pic_timing->u1_du_common_cpb_removal_delay_flag)
  ------------------
  |  Branch (2711:20): [True: 4, False: 0]
  ------------------
 2712|      4|                                && (i < ps_pic_timing->u4_num_decoding_units_minus1))
  ------------------
  |  Branch (2712:36): [True: 2, False: 2]
  ------------------
 2713|      2|                {
 2714|      2|                    BITS_PARSE("du_common_cpb_removal_delay_increment_minus1",
  ------------------
  |  |  148|      2|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2715|      2|                               value,
 2716|      2|                               ps_bitstrm,
 2717|      2|                               (ps_vui_hdr->u1_du_cpb_removal_delay_increment_length_minus1
 2718|      2|                                               + 1));
 2719|      2|                    ps_pic_timing->au4_du_cpb_removal_delay_increment_minus1[i] =
 2720|      2|                                    value;
 2721|      2|                }
 2722|      4|            }
 2723|      4|        }
 2724|      4|    }
 2725|       |
 2726|     64|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2727|     66|}
ihevcd_parse_time_code_sei:
 2730|  1.08k|{
 2731|  1.08k|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 2732|  1.08k|    bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm;
 2733|  1.08k|    UWORD32 value;
 2734|  1.08k|    time_code_t *ps_time_code;
 2735|  1.08k|    WORD32 i;
 2736|       |
 2737|  1.08k|    ps_parse->s_sei_params.i1_time_code_present_flag = 1;
 2738|  1.08k|    ps_time_code = &ps_parse->s_sei_params.s_time_code;
 2739|       |
 2740|  1.08k|    BITS_PARSE("num_clock_ts", value, ps_bitstrm, 2);
  ------------------
  |  |  148|  1.08k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2741|  1.08k|    ps_time_code->u1_num_clock_ts = value;
 2742|       |
 2743|  3.76k|    for(i = 0; i < ps_time_code->u1_num_clock_ts; i++)
  ------------------
  |  Branch (2743:16): [True: 2.68k, False: 1.08k]
  ------------------
 2744|  2.68k|    {
 2745|  2.68k|        BITS_PARSE("clock_timestamp_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.68k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2746|  2.68k|        ps_time_code->au1_clock_timestamp_flag[i] = value;
 2747|       |
 2748|  2.68k|        if(ps_time_code->au1_clock_timestamp_flag[i])
  ------------------
  |  Branch (2748:12): [True: 2.07k, False: 603]
  ------------------
 2749|  2.07k|        {
 2750|  2.07k|            BITS_PARSE("units_field_based_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2751|  2.07k|            ps_time_code->au1_units_field_based_flag[i] = value;
 2752|       |
 2753|  2.07k|            BITS_PARSE("counting_type[i]", value, ps_bitstrm, 5);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2754|  2.07k|            ps_time_code->au1_counting_type[i] = value;
 2755|       |
 2756|  2.07k|            BITS_PARSE("full_timestamp_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2757|  2.07k|            ps_time_code->au1_full_timestamp_flag[i] = value;
 2758|       |
 2759|  2.07k|            BITS_PARSE("discontinuity_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2760|  2.07k|            ps_time_code->au1_discontinuity_flag[i] = value;
 2761|       |
 2762|  2.07k|            BITS_PARSE("cnt_dropped_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2763|  2.07k|            ps_time_code->au1_cnt_dropped_flag[i] = value;
 2764|       |
 2765|  2.07k|            BITS_PARSE("n_frames[i]", value, ps_bitstrm, 9);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2766|  2.07k|            ps_time_code->au2_n_frames[i] = value;
 2767|       |
 2768|  2.07k|            if(ps_time_code->au1_full_timestamp_flag[i])
  ------------------
  |  Branch (2768:16): [True: 499, False: 1.57k]
  ------------------
 2769|    499|            {
 2770|    499|                BITS_PARSE("seconds_value[i]", value, ps_bitstrm, 6);
  ------------------
  |  |  148|    499|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2771|    499|                ps_time_code->au1_seconds_value[i] = value;
 2772|       |
 2773|    499|                BITS_PARSE("minutes_value[i]", value, ps_bitstrm, 6);
  ------------------
  |  |  148|    499|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2774|    499|                ps_time_code->au1_minutes_value[i] = value;
 2775|       |
 2776|    499|                BITS_PARSE("hours_value[i]", value, ps_bitstrm, 5);
  ------------------
  |  |  148|    499|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2777|    499|                ps_time_code->au1_hours_value[i] = value;
 2778|    499|            }
 2779|  1.57k|            else
 2780|  1.57k|            {
 2781|  1.57k|                BITS_PARSE("seconds_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.57k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2782|  1.57k|                ps_time_code->au1_seconds_flag[i] = value;
 2783|       |
 2784|  1.57k|                if(ps_time_code->au1_seconds_flag[i])
  ------------------
  |  Branch (2784:20): [True: 1.26k, False: 318]
  ------------------
 2785|  1.26k|                {
 2786|  1.26k|                    BITS_PARSE("seconds_value[i]", value, ps_bitstrm, 6);
  ------------------
  |  |  148|  1.26k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2787|  1.26k|                    ps_time_code->au1_seconds_value[i] = value;
 2788|       |
 2789|  1.26k|                    BITS_PARSE("minutes_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.26k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2790|  1.26k|                    ps_time_code->au1_minutes_flag[i] = value;
 2791|       |
 2792|  1.26k|                    if(ps_time_code->au1_minutes_flag[i])
  ------------------
  |  Branch (2792:24): [True: 1.18k, False: 75]
  ------------------
 2793|  1.18k|                    {
 2794|  1.18k|                        BITS_PARSE("minutes_value[i]", value, ps_bitstrm, 6);
  ------------------
  |  |  148|  1.18k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2795|  1.18k|                        ps_time_code->au1_minutes_value[i] = value;
 2796|       |
 2797|  1.18k|                        BITS_PARSE("hours_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.18k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2798|  1.18k|                        ps_time_code->au1_hours_flag[i] = value;
 2799|       |
 2800|  1.18k|                        if(ps_time_code->au1_hours_flag[i])
  ------------------
  |  Branch (2800:28): [True: 369, False: 816]
  ------------------
 2801|    369|                        {
 2802|    369|                            BITS_PARSE("hours_value[i]", value, ps_bitstrm, 5);
  ------------------
  |  |  148|    369|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2803|    369|                            ps_time_code->au1_hours_value[i] = value;
 2804|    369|                        }
 2805|  1.18k|                    }
 2806|  1.26k|                }
 2807|  1.57k|            }
 2808|       |
 2809|  2.07k|            BITS_PARSE("time_offset_length[i]", value, ps_bitstrm, 5);
  ------------------
  |  |  148|  2.07k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2810|  2.07k|            ps_time_code->au1_time_offset_length[i] = value;
 2811|       |
 2812|  2.07k|            if(ps_time_code->au1_time_offset_length[i] > 0)
  ------------------
  |  Branch (2812:16): [True: 1.91k, False: 161]
  ------------------
 2813|  1.91k|            {
 2814|  1.91k|                BITS_PARSE("time_offset_value[i]", value, ps_bitstrm,
  ------------------
  |  |  148|  1.91k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2815|  1.91k|                           ps_time_code->au1_time_offset_length[i]);
 2816|  1.91k|                ps_time_code->au1_time_offset_value[i] = value;
 2817|  1.91k|            }
 2818|    161|            else
 2819|    161|            {
 2820|    161|                ps_time_code->au1_time_offset_value[i] = 0;
 2821|    161|            }
 2822|  2.07k|        }
 2823|  2.68k|    }
 2824|       |
 2825|  1.08k|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2826|  1.08k|}
ihevcd_parse_user_data_registered_itu_t_t35:
 2866|      1|{
 2867|      1|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 2868|      1|    bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm;
 2869|      1|    UWORD32 value;
 2870|      1|    user_data_registered_itu_t_t35_t *ps_user_data_registered_itu_t_t35;
 2871|      1|    UWORD32 i;
 2872|      1|    UWORD32 j = 0;
 2873|       |
 2874|      1|    ps_parse->s_sei_params.i1_user_data_registered_present_flag = 1;
 2875|      1|    ps_user_data_registered_itu_t_t35 =
 2876|      1|                    &ps_parse->s_sei_params.as_user_data_registered_itu_t_t35[ps_parse->s_sei_params.i4_sei_user_data_cnt];
 2877|      1|    ps_parse->s_sei_params.i4_sei_user_data_cnt++;
 2878|       |
 2879|      1|    ps_user_data_registered_itu_t_t35->i4_payload_size = u4_payload_size;
 2880|       |
 2881|      1|    if(u4_payload_size > MAX_USERDATA_PAYLOAD)
  ------------------
  |  |  521|      1|#define MAX_USERDATA_PAYLOAD 256
  ------------------
  |  Branch (2881:8): [True: 0, False: 1]
  ------------------
 2882|      0|    {
 2883|      0|        u4_payload_size = MAX_USERDATA_PAYLOAD;
  ------------------
  |  |  521|      0|#define MAX_USERDATA_PAYLOAD 256
  ------------------
 2884|      0|    }
 2885|       |
 2886|      1|    ps_user_data_registered_itu_t_t35->i4_valid_payload_size = u4_payload_size;
 2887|       |
 2888|      1|    BITS_PARSE("itu_t_t35_country_code", value, ps_bitstrm, 8);
  ------------------
  |  |  148|      1|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2889|      1|    ps_user_data_registered_itu_t_t35->u1_itu_t_t35_country_code = value;
 2890|       |
 2891|      1|    if(0xFF != ps_user_data_registered_itu_t_t35->u1_itu_t_t35_country_code)
  ------------------
  |  Branch (2891:8): [True: 1, False: 0]
  ------------------
 2892|      1|    {
 2893|      1|        i = 1;
 2894|      1|    }
 2895|      0|    else
 2896|      0|    {
 2897|      0|        BITS_PARSE("itu_t_t35_country_code_extension_byte", value, ps_bitstrm,
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2898|      0|                   8);
 2899|      0|        ps_user_data_registered_itu_t_t35->u1_itu_t_t35_country_code_extension_byte =
 2900|      0|                        value;
 2901|       |
 2902|      0|        i = 2;
 2903|      0|    }
 2904|       |
 2905|      1|    do
 2906|      7|    {
 2907|      7|        BITS_PARSE("itu_t_t35_payload_byte", value, ps_bitstrm, 8);
  ------------------
  |  |  148|      7|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 2908|      7|        ps_user_data_registered_itu_t_t35->u1_itu_t_t35_payload_byte[j++] =
 2909|      7|                        value;
 2910|       |
 2911|      7|        i++;
 2912|      7|    }while(i < u4_payload_size);
  ------------------
  |  Branch (2912:12): [True: 6, False: 1]
  ------------------
 2913|       |
 2914|      1|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2915|      1|}
ihevcd_parse_sei_payload:
 2921|   742k|{
 2922|   742k|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 2923|   742k|    bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm;
 2924|   742k|    WORD32 payload_bits_remaining = 0;
 2925|   742k|    sps_t *ps_sps;
 2926|       |
 2927|   742k|    UWORD32 i;
 2928|       |
 2929|  13.3M|    for(i = 0; i < MAX_SPS_CNT; i++)
  ------------------
  |  |  317|  13.3M|#define MAX_SPS_CNT         (16 + 1)
  ------------------
  |  Branch (2929:16): [True: 12.5M, False: 740k]
  ------------------
 2930|  12.5M|    {
 2931|  12.5M|        ps_sps = ps_codec->ps_sps_base + i;
 2932|  12.5M|        if(ps_sps->i1_sps_valid)
  ------------------
  |  Branch (2932:12): [True: 1.48k, False: 12.5M]
  ------------------
 2933|  1.48k|        {
 2934|  1.48k|            break;
 2935|  1.48k|        }
 2936|  12.5M|    }
 2937|   742k|    if(!ps_sps->i1_sps_valid)
  ------------------
  |  Branch (2937:8): [True: 740k, False: 1.48k]
  ------------------
 2938|   740k|    {
 2939|   740k|        return;
 2940|   740k|    }
 2941|       |
 2942|  1.48k|    if(NAL_PREFIX_SEI == i1_nal_type)
  ------------------
  |  Branch (2942:8): [True: 1.38k, False: 98]
  ------------------
 2943|  1.38k|    {
 2944|  1.38k|        switch(u4_payload_type)
 2945|  1.38k|        {
 2946|     12|            case SEI_BUFFERING_PERIOD:
  ------------------
  |  Branch (2946:13): [True: 12, False: 1.37k]
  ------------------
 2947|     12|                ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1;
 2948|     12|                ihevcd_parse_buffering_period_sei(ps_codec, ps_sps);
 2949|     12|                break;
 2950|       |
 2951|     66|            case SEI_PICTURE_TIMING:
  ------------------
  |  Branch (2951:13): [True: 66, False: 1.31k]
  ------------------
 2952|     66|                ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1;
 2953|     66|                ihevcd_parse_pic_timing_sei(ps_codec, ps_sps);
 2954|     66|                break;
 2955|       |
 2956|  1.08k|            case SEI_TIME_CODE:
  ------------------
  |  Branch (2956:13): [True: 1.08k, False: 302]
  ------------------
 2957|  1.08k|                ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1;
 2958|  1.08k|                ihevcd_parse_time_code_sei(ps_codec);
 2959|  1.08k|                break;
 2960|       |
 2961|      0|            case SEI_MASTERING_DISPLAY_COLOUR_VOLUME:
  ------------------
  |  Branch (2961:13): [True: 0, False: 1.38k]
  ------------------
 2962|      0|                ps_parse->s_sei_params.i4_sei_mastering_disp_colour_vol_params_present_flags = 1;
 2963|      0|                ihevcd_parse_mastering_disp_params_sei(ps_codec);
 2964|      0|                break;
 2965|       |
 2966|      0|            case SEI_USER_DATA_REGISTERED_ITU_T_T35:
  ------------------
  |  Branch (2966:13): [True: 0, False: 1.38k]
  ------------------
 2967|      0|                ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1;
 2968|      0|                if(ps_parse->s_sei_params.i4_sei_user_data_cnt >= USER_DATA_MAX)
  ------------------
  |  Branch (2968:20): [True: 0, False: 0]
  ------------------
 2969|      0|                {
 2970|      0|                    for(i = 0; i < u4_payload_size / 4; i++)
  ------------------
  |  Branch (2970:32): [True: 0, False: 0]
  ------------------
 2971|      0|                    {
 2972|      0|                        ihevcd_bits_flush(ps_bitstrm, 4 * 8);
 2973|      0|                    }
 2974|       |
 2975|      0|                    ihevcd_bits_flush(ps_bitstrm, (u4_payload_size - i * 4) * 8);
 2976|      0|                }
 2977|      0|                else
 2978|      0|                {
 2979|      0|                    ihevcd_parse_user_data_registered_itu_t_t35(ps_codec,
 2980|      0|                                                                u4_payload_size);
 2981|      0|                }
 2982|      0|                break;
 2983|       |
 2984|    224|            default:
  ------------------
  |  Branch (2984:13): [True: 224, False: 1.16k]
  ------------------
 2985|  14.1k|                for(i = 0; i < u4_payload_size; i++)
  ------------------
  |  Branch (2985:28): [True: 13.9k, False: 224]
  ------------------
 2986|  13.9k|                {
 2987|  13.9k|                    ihevcd_bits_flush(ps_bitstrm, 8);
 2988|  13.9k|                }
 2989|    224|                break;
 2990|  1.38k|        }
 2991|  1.38k|    }
 2992|     98|    else /* NAL_SUFFIX_SEI */
 2993|     98|    {
 2994|     98|        switch(u4_payload_type)
 2995|     98|        {
 2996|      1|            case SEI_USER_DATA_REGISTERED_ITU_T_T35:
  ------------------
  |  Branch (2996:13): [True: 1, False: 97]
  ------------------
 2997|      1|                ps_parse->s_sei_params.i1_sei_parameters_present_flag = 1;
 2998|      1|                if(ps_parse->s_sei_params.i4_sei_user_data_cnt >= USER_DATA_MAX)
  ------------------
  |  Branch (2998:20): [True: 0, False: 1]
  ------------------
 2999|      0|                {
 3000|      0|                    for(i = 0; i < u4_payload_size / 4; i++)
  ------------------
  |  Branch (3000:32): [True: 0, False: 0]
  ------------------
 3001|      0|                    {
 3002|      0|                        ihevcd_bits_flush(ps_bitstrm, 4 * 8);
 3003|      0|                    }
 3004|       |
 3005|      0|                    ihevcd_bits_flush(ps_bitstrm, (u4_payload_size - i * 4) * 8);
 3006|      0|                }
 3007|      1|                else
 3008|      1|                {
 3009|      1|                    ihevcd_parse_user_data_registered_itu_t_t35(ps_codec,
 3010|      1|                                                                u4_payload_size);
 3011|      1|                }
 3012|      1|                break;
 3013|       |
 3014|     97|            default:
  ------------------
  |  Branch (3014:13): [True: 97, False: 1]
  ------------------
 3015|  26.3k|                for(i = 0; i < u4_payload_size; i++)
  ------------------
  |  Branch (3015:28): [True: 26.2k, False: 97]
  ------------------
 3016|  26.2k|                {
 3017|  26.2k|                    ihevcd_bits_flush(ps_bitstrm, 8);
 3018|  26.2k|                }
 3019|     97|                break;
 3020|     98|        }
 3021|     98|    }
 3022|       |
 3023|       |    /**
 3024|       |     * By definition the underlying bitstream terminates in a byte-aligned manner.
 3025|       |     * 1. Extract all bar the last MIN(bitsremaining,nine) bits as reserved_payload_extension_data
 3026|       |     * 2. Examine the final 8 bits to determine the payload_bit_equal_to_one marker
 3027|       |     * 3. Extract the remainingreserved_payload_extension_data bits.
 3028|       |     *
 3029|       |     * If there are fewer than 9 bits available, extract them.
 3030|       |     */
 3031|       |
 3032|  1.48k|    payload_bits_remaining = ihevcd_bits_num_bits_remaining(ps_bitstrm);
 3033|  1.48k|    if(payload_bits_remaining) /* more_data_in_payload() */
  ------------------
  |  Branch (3033:8): [True: 899, False: 583]
  ------------------
 3034|    899|    {
 3035|    899|        WORD32 final_bits;
 3036|    899|        WORD32 final_payload_bits = 0;
 3037|    899|        WORD32 mask = 0xFF;
 3038|    899|        UWORD32 u4_dummy;
 3039|    899|        UWORD32 u4_reserved_payload_extension_data;
 3040|    899|        UNUSED(u4_dummy);
  ------------------
  |  |   38|    899|#define UNUSED(x) ((void)(x))
  ------------------
 3041|    899|        UNUSED(u4_reserved_payload_extension_data);
  ------------------
  |  |   38|    899|#define UNUSED(x) ((void)(x))
  ------------------
 3042|       |
 3043|  1.80M|        while(payload_bits_remaining > 9)
  ------------------
  |  Branch (3043:15): [True: 1.80M, False: 899]
  ------------------
 3044|  1.80M|        {
 3045|  1.80M|            BITS_PARSE("reserved_payload_extension_data",
  ------------------
  |  |  148|  1.80M|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3046|  1.80M|                       u4_reserved_payload_extension_data, ps_bitstrm, 1);
 3047|  1.80M|            payload_bits_remaining--;
 3048|  1.80M|        }
 3049|       |
 3050|    899|        final_bits = ihevcd_bits_nxt(ps_bitstrm, payload_bits_remaining);
 3051|       |
 3052|  7.55k|        while(final_bits & (mask >> final_payload_bits))
  ------------------
  |  Branch (3052:15): [True: 6.65k, False: 899]
  ------------------
 3053|  6.65k|        {
 3054|  6.65k|            final_payload_bits++;
 3055|  6.65k|            continue;
 3056|  6.65k|        }
 3057|       |
 3058|  7.22k|        while(payload_bits_remaining > (9 - final_payload_bits))
  ------------------
  |  Branch (3058:15): [True: 6.32k, False: 899]
  ------------------
 3059|  6.32k|        {
 3060|  6.32k|            BITS_PARSE("reserved_payload_extension_data",
  ------------------
  |  |  148|  6.32k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3061|  6.32k|                       u4_reserved_payload_extension_data, ps_bitstrm, 1);
 3062|  6.32k|            payload_bits_remaining--;
 3063|  6.32k|        }
 3064|       |
 3065|    899|        BITS_PARSE("payload_bit_equal_to_one", u4_dummy, ps_bitstrm, 1);
  ------------------
  |  |  148|    899|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3066|    899|        payload_bits_remaining--;
 3067|  1.43k|        while(payload_bits_remaining)
  ------------------
  |  Branch (3067:15): [True: 539, False: 899]
  ------------------
 3068|    539|        {
 3069|    539|            BITS_PARSE("payload_bit_equal_to_zero", u4_dummy, ps_bitstrm, 1);
  ------------------
  |  |  148|    539|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3070|    539|            payload_bits_remaining--;
 3071|    539|        }
 3072|    899|    }
 3073|       |
 3074|  1.48k|    return;
 3075|  1.48k|}
ihevcd_read_rbsp_trailing_bits:
 3079|     21|{
 3080|     21|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 3081|     21|    UWORD32 value;
 3082|     21|    WORD32 cnt = 0;
 3083|     21|    BITS_PARSE("rbsp_stop_one_bit", value, &ps_parse->s_bitstrm, 1);
  ------------------
  |  |  148|     21|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3084|     21|    u4_bits_left--;
 3085|     21|    if(value != 1)
  ------------------
  |  Branch (3085:8): [True: 4, False: 17]
  ------------------
 3086|      4|    {
 3087|      4|        return (IHEVCD_ERROR_T)IHEVCD_FAIL;
 3088|      4|    }
 3089|    136|    while(u4_bits_left)
  ------------------
  |  Branch (3089:11): [True: 119, False: 17]
  ------------------
 3090|    119|    {
 3091|    119|        BITS_PARSE("rbsp_alignment_zero_bit", value, &ps_parse->s_bitstrm, 1);
  ------------------
  |  |  148|    119|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3092|    119|        u4_bits_left--;
 3093|    119|        cnt++;
 3094|    119|    }
 3095|     17|    ASSERT(cnt < 8);
  ------------------
  |  |   55|     17|#define ASSERT(x) assert((x))
  ------------------
 3096|       |
 3097|     17|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 3098|     17|}
ihevcd_parse_sei:
 3119|  1.58k|{
 3120|  1.58k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 3121|  1.58k|    parse_ctxt_t *ps_parse = &ps_codec->s_parse;
 3122|  1.58k|    UWORD32 u4_payload_type = 0, u4_last_payload_type_byte = 0;
 3123|  1.58k|    UWORD32 u4_payload_size = 0, u4_last_payload_size_byte = 0;
 3124|  1.58k|    UWORD32 value;
 3125|  1.58k|    bitstrm_t *ps_bitstrm = &ps_parse->s_bitstrm;
 3126|  1.58k|    UWORD32 u4_bits_left;
 3127|       |
 3128|  1.58k|    u4_bits_left = ihevcd_bits_num_bits_remaining(ps_bitstrm);
 3129|       |
 3130|   743k|    while(u4_bits_left > 8)
  ------------------
  |  Branch (3130:11): [True: 742k, False: 1.58k]
  ------------------
 3131|   742k|    {
 3132|   914k|        while(ihevcd_bits_nxt(ps_bitstrm, 8) == 0xFF)
  ------------------
  |  Branch (3132:15): [True: 172k, False: 742k]
  ------------------
 3133|   172k|        {
 3134|   172k|            ihevcd_bits_flush(ps_bitstrm, 8); /* equal to 0xFF */
 3135|   172k|            u4_payload_type += 255;
 3136|   172k|        }
 3137|       |
 3138|   742k|        BITS_PARSE("last_payload_type_byte", value, ps_bitstrm, 8);
  ------------------
  |  |  148|   742k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3139|   742k|        u4_last_payload_type_byte = value;
 3140|       |
 3141|   742k|        u4_payload_type += u4_last_payload_type_byte;
 3142|       |
 3143|   954k|        while(ihevcd_bits_nxt(ps_bitstrm, 8) == 0xFF)
  ------------------
  |  Branch (3143:15): [True: 212k, False: 742k]
  ------------------
 3144|   212k|        {
 3145|   212k|            ihevcd_bits_flush(ps_bitstrm, 8); /* equal to 0xFF */
 3146|   212k|            u4_payload_size += 255;
 3147|   212k|        }
 3148|       |
 3149|   742k|        BITS_PARSE("last_payload_size_byte", value, ps_bitstrm, 8);
  ------------------
  |  |  148|   742k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 3150|   742k|        u4_last_payload_size_byte = value;
 3151|       |
 3152|   742k|        u4_payload_size += u4_last_payload_size_byte;
 3153|   742k|        u4_bits_left = ihevcd_bits_num_bits_remaining(ps_bitstrm);
 3154|   742k|        u4_payload_size = MIN(u4_payload_size, u4_bits_left / 8);
  ------------------
  |  |   43|   742k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 706k, False: 35.4k]
  |  |  ------------------
  ------------------
 3155|   742k|        ihevcd_parse_sei_payload(ps_codec, u4_payload_type, u4_payload_size,
 3156|   742k|                                 ps_nal->i1_nal_unit_type);
 3157|       |
 3158|       |        /* Calculate the bits left in the current payload */
 3159|   742k|        u4_bits_left = ihevcd_bits_num_bits_remaining(ps_bitstrm);
 3160|   742k|    }
 3161|       |
 3162|       |    // read rbsp_trailing_bits
 3163|  1.58k|    if(u4_bits_left)
  ------------------
  |  Branch (3163:8): [True: 21, False: 1.56k]
  ------------------
 3164|     21|    {
 3165|     21|        ihevcd_read_rbsp_trailing_bits(ps_codec, u4_bits_left);
 3166|     21|    }
 3167|       |
 3168|  1.58k|    return ret;
 3169|  1.58k|}
ihevcd_calc_poc:
 3231|  8.54k|{
 3232|  8.54k|    WORD32 i4_abs_poc, i4_poc_msb;
 3233|  8.54k|    WORD32 max_poc_lsb;
 3234|  8.54k|    WORD8 i1_nal_unit_type = ps_nal->i1_nal_unit_type;
 3235|  8.54k|    max_poc_lsb = (1 << i1_log2_max_poc_lsb);
 3236|       |
 3237|  8.54k|    if((!ps_codec->i4_first_pic_done) && (!ps_codec->i4_pic_present))
  ------------------
  |  Branch (3237:8): [True: 1.68k, False: 6.85k]
  |  Branch (3237:42): [True: 1.68k, False: 0]
  ------------------
 3238|  1.68k|        ps_codec->i4_prev_poc_msb = -2 * max_poc_lsb;
 3239|       |
 3240|  8.54k|    if(NAL_IDR_N_LP == i1_nal_unit_type
  ------------------
  |  Branch (3240:8): [True: 3.54k, False: 5.00k]
  ------------------
 3241|  8.54k|                    || NAL_IDR_W_LP == i1_nal_unit_type
  ------------------
  |  Branch (3241:24): [True: 1.37k, False: 3.62k]
  ------------------
 3242|  8.54k|                    || NAL_BLA_N_LP == i1_nal_unit_type
  ------------------
  |  Branch (3242:24): [True: 378, False: 3.24k]
  ------------------
 3243|  8.54k|                    || NAL_BLA_W_DLP == i1_nal_unit_type
  ------------------
  |  Branch (3243:24): [True: 153, False: 3.09k]
  ------------------
 3244|  8.54k|                    || NAL_BLA_W_LP == i1_nal_unit_type
  ------------------
  |  Branch (3244:24): [True: 102, False: 2.99k]
  ------------------
 3245|  8.54k|                    || (NAL_CRA == i1_nal_unit_type && !ps_codec->i4_first_pic_done))
  ------------------
  |  Branch (3245:25): [True: 791, False: 2.20k]
  |  Branch (3245:56): [True: 589, False: 202]
  ------------------
 3246|  6.13k|    {
 3247|  6.13k|        i4_poc_msb = ps_codec->i4_prev_poc_msb + 2 * max_poc_lsb;
 3248|  6.13k|        ps_codec->i4_prev_poc_lsb = 0;
 3249|  6.13k|        ps_codec->i4_max_prev_poc_lsb = 0;
 3250|       |//        ps_codec->i4_prev_poc_msb = 0;
 3251|  6.13k|    }
 3252|  2.40k|    else
 3253|  2.40k|    {
 3254|       |
 3255|  2.40k|        if((i2_poc_lsb < ps_codec->i4_prev_poc_lsb)
  ------------------
  |  Branch (3255:12): [True: 259, False: 2.14k]
  ------------------
 3256|  2.40k|                        && ((ps_codec->i4_prev_poc_lsb - i2_poc_lsb) >= max_poc_lsb / 2))
  ------------------
  |  Branch (3256:28): [True: 4, False: 255]
  ------------------
 3257|      4|        {
 3258|      4|            i4_poc_msb = ps_codec->i4_prev_poc_msb + max_poc_lsb;
 3259|      4|        }
 3260|  2.40k|        else if((i2_poc_lsb > ps_codec->i4_prev_poc_lsb)
  ------------------
  |  Branch (3260:17): [True: 2.07k, False: 323]
  ------------------
 3261|  2.40k|                        && ((i2_poc_lsb - ps_codec->i4_prev_poc_lsb) > max_poc_lsb / 2))
  ------------------
  |  Branch (3261:28): [True: 1.23k, False: 841]
  ------------------
 3262|  1.23k|        {
 3263|  1.23k|            i4_poc_msb = ps_codec->i4_prev_poc_msb - max_poc_lsb;
 3264|  1.23k|        }
 3265|  1.16k|        else
 3266|  1.16k|        {
 3267|  1.16k|            i4_poc_msb = ps_codec->i4_prev_poc_msb;
 3268|  1.16k|        }
 3269|       |
 3270|       |
 3271|  2.40k|    }
 3272|       |
 3273|  8.54k|    i4_abs_poc = i4_poc_msb + i2_poc_lsb;
 3274|  8.54k|    ps_codec->i4_max_prev_poc_lsb = MAX(ps_codec->i4_max_prev_poc_lsb, i2_poc_lsb);
  ------------------
  |  |   42|  8.54k|#define MAX(x,y)    (((x) > (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (42:22): [True: 976, False: 7.56k]
  |  |  ------------------
  ------------------
 3275|       |
 3276|  8.54k|    {
 3277|  8.54k|        WORD32 is_reference_nal = ((i1_nal_unit_type <= NAL_RSV_VCL_R15) && (i1_nal_unit_type % 2 != 0)) || ((i1_nal_unit_type >= NAL_BLA_W_LP) && (i1_nal_unit_type <= NAL_RSV_RAP_VCL23));
  ------------------
  |  Branch (3277:36): [True: 2.20k, False: 6.34k]
  |  Branch (3277:77): [True: 359, False: 1.84k]
  |  Branch (3277:110): [True: 6.34k, False: 1.84k]
  |  Branch (3277:148): [True: 6.34k, False: 0]
  ------------------
 3278|  8.54k|        WORD32 update_prev_poc = ((is_reference_nal) && ((i1_nal_unit_type < NAL_RADL_N) || (i1_nal_unit_type > NAL_RASL_R)));
  ------------------
  |  Branch (3278:35): [True: 6.70k, False: 1.84k]
  |  Branch (3278:58): [True: 288, False: 6.41k]
  |  Branch (3278:93): [True: 6.34k, False: 71]
  ------------------
 3279|       |
 3280|  8.54k|        if((0 == ps_nal->i1_nuh_temporal_id) &&
  ------------------
  |  Branch (3280:12): [True: 3.83k, False: 4.71k]
  ------------------
 3281|  8.54k|                        (update_prev_poc))
  ------------------
  |  Branch (3281:25): [True: 3.68k, False: 142]
  ------------------
 3282|  3.68k|        {
 3283|  3.68k|            ps_codec->i4_prev_poc_lsb = i2_poc_lsb;
 3284|  3.68k|            ps_codec->i4_prev_poc_msb = i4_poc_msb;
 3285|  3.68k|        }
 3286|  8.54k|    }
 3287|       |
 3288|  8.54k|    return i4_abs_poc;
 3289|  8.54k|}
ihevcd_copy_slice_hdr:
 3293|  2.37k|{
 3294|  2.37k|    slice_header_t *ps_slice_hdr, *ps_slice_hdr_ref;
 3295|  2.37k|    WORD32 *pu4_entry_offset_backup;
 3296|       |
 3297|  2.37k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base + slice_idx;
 3298|  2.37k|    ps_slice_hdr_ref = ps_codec->s_parse.ps_slice_hdr_base + slice_idx_ref;
 3299|       |
 3300|  2.37k|    pu4_entry_offset_backup = ps_slice_hdr->pu4_entry_point_offset;
 3301|  2.37k|    memcpy(ps_slice_hdr, ps_slice_hdr_ref, sizeof(slice_header_t));
 3302|  2.37k|    ps_slice_hdr->pu4_entry_point_offset = pu4_entry_offset_backup;
 3303|  2.37k|}
ihevcd_parse_headers.c:ihevcd_profile_tier_level:
 1095|  23.5k|{
 1096|  23.5k|    WORD32 value;
 1097|  23.5k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1098|  23.5k|    WORD32 i;
 1099|       |
 1100|  23.5k|    if(profile_present)
  ------------------
  |  Branch (1100:8): [True: 23.5k, False: 0]
  ------------------
 1101|  23.5k|    {
 1102|  23.5k|        ret = ihevcd_parse_profile_tier_level_layer(ps_bitstrm, &ps_ptl->s_ptl_gen);
 1103|  23.5k|        if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
  ------------------
  |  Branch (1103:12): [True: 0, False: 23.5k]
  ------------------
 1104|      0|        {
 1105|      0|            return ret;
 1106|      0|        }
 1107|  23.5k|    }
 1108|       |
 1109|  23.5k|    BITS_PARSE("general_level_idc", value, ps_bitstrm, 8);
  ------------------
  |  |  148|  23.5k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1110|  23.5k|    ps_ptl->s_ptl_gen.u1_level_idc = value;
 1111|       |
 1112|       |
 1113|  31.8k|    for(i = 0; i < max_num_sub_layers; i++)
  ------------------
  |  Branch (1113:16): [True: 8.24k, False: 23.5k]
  ------------------
 1114|  8.24k|    {
 1115|  8.24k|        BITS_PARSE("sub_layer_profile_present_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  8.24k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1116|  8.24k|        ps_ptl->ai1_sub_layer_profile_present_flag[i] = value;
 1117|       |
 1118|  8.24k|        BITS_PARSE("sub_layer_level_present_flag[i]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  8.24k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1119|  8.24k|        ps_ptl->ai1_sub_layer_level_present_flag[i] = value;
 1120|  8.24k|    }
 1121|       |
 1122|  23.5k|    if(max_num_sub_layers > 0)
  ------------------
  |  Branch (1122:8): [True: 1.99k, False: 21.5k]
  ------------------
 1123|  1.99k|    {
 1124|  9.73k|        for(i = max_num_sub_layers; i < 8; i++)
  ------------------
  |  Branch (1124:37): [True: 7.73k, False: 1.99k]
  ------------------
 1125|  7.73k|        {
 1126|  7.73k|            BITS_PARSE("reserved_zero_2bits", value, ps_bitstrm, 2);
  ------------------
  |  |  148|  7.73k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1127|  7.73k|        }
 1128|  1.99k|    }
 1129|       |
 1130|  31.8k|    for(i = 0; i < max_num_sub_layers; i++)
  ------------------
  |  Branch (1130:16): [True: 8.24k, False: 23.5k]
  ------------------
 1131|  8.24k|    {
 1132|  8.24k|        if(ps_ptl->ai1_sub_layer_profile_present_flag[i])
  ------------------
  |  Branch (1132:12): [True: 858, False: 7.39k]
  ------------------
 1133|    858|        {
 1134|    858|            ret = ihevcd_parse_profile_tier_level_layer(ps_bitstrm,
 1135|    858|                                                        &ps_ptl->as_ptl_sub[i]);
 1136|    858|        }
 1137|  8.24k|        if(ps_ptl->ai1_sub_layer_level_present_flag[i])
  ------------------
  |  Branch (1137:12): [True: 871, False: 7.37k]
  ------------------
 1138|    871|        {
 1139|    871|            BITS_PARSE("sub_layer_level_idc[i]", value, ps_bitstrm, 8);
  ------------------
  |  |  148|    871|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1140|    871|            ps_ptl->as_ptl_sub[i].u1_level_idc = value;
 1141|       |
 1142|    871|        }
 1143|  8.24k|    }
 1144|       |
 1145|       |
 1146|       |
 1147|  23.5k|    return ret;
 1148|  23.5k|}
ihevcd_parse_headers.c:ihevcd_parse_profile_tier_level_layer:
 1020|  24.4k|{
 1021|  24.4k|    WORD32 value;
 1022|  24.4k|    WORD32 i;
 1023|  24.4k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1024|       |
 1025|  24.4k|    BITS_PARSE("XXX_profile_space[]", value, ps_bitstrm, 2);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1026|  24.4k|    ps_ptl->i1_profile_space = value;
 1027|       |
 1028|  24.4k|    BITS_PARSE("XXX_tier_flag[]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1029|  24.4k|    ps_ptl->i1_tier_flag = value;
 1030|       |
 1031|  24.4k|    BITS_PARSE("XXX_profile_idc[]", value, ps_bitstrm, 5);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1032|  24.4k|    ps_ptl->i1_profile_idc = value;
 1033|       |
 1034|   806k|    for(i = 0; i < MAX_PROFILE_COMPATBLTY; i++)
  ------------------
  |  |  275|   806k|#define MAX_PROFILE_COMPATBLTY 32
  ------------------
  |  Branch (1034:16): [True: 782k, False: 24.4k]
  ------------------
 1035|   782k|    {
 1036|   782k|        BITS_PARSE("XXX_profile_compatibility_flag[][j]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|   782k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1037|   782k|        ps_ptl->ai1_profile_compatibility_flag[i] = value;
 1038|   782k|    }
 1039|       |
 1040|  24.4k|    BITS_PARSE("general_progressive_source_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1041|  24.4k|    ps_ptl->i1_general_progressive_source_flag = value;
 1042|       |
 1043|  24.4k|    BITS_PARSE("general_interlaced_source_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1044|  24.4k|    ps_ptl->i1_general_interlaced_source_flag = value;
 1045|       |
 1046|  24.4k|    BITS_PARSE("general_non_packed_constraint_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1047|  24.4k|    ps_ptl->i1_general_non_packed_constraint_flag = value;
 1048|       |
 1049|  24.4k|    BITS_PARSE("general_frame_only_constraint_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1050|  24.4k|    ps_ptl->i1_frame_only_constraint_flag = value;
 1051|       |
 1052|  24.4k|    BITS_PARSE("XXX_reserved_zero_44bits[0..15]", value, ps_bitstrm, 16);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1053|       |
 1054|  24.4k|    BITS_PARSE("XXX_reserved_zero_44bits[16..31]", value, ps_bitstrm, 16);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1055|       |
 1056|  24.4k|    BITS_PARSE("XXX_reserved_zero_44bits[32..43]", value, ps_bitstrm, 12);
  ------------------
  |  |  148|  24.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
 1057|  24.4k|    return ret;
 1058|  24.4k|}
ihevcd_parse_headers.c:ihevcd_parse_vui_parameters:
  772|    656|{
  773|    656|    WORD32 ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  774|    656|    UWORD16 u2_sar_width = 0;
  775|    656|    UWORD16 u2_sar_height = 0;
  776|       |
  777|    656|    BITS_PARSE("aspect_ratio_info_present_flag", ps_vui->u1_aspect_ratio_info_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    656|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  778|       |
  779|    656|    ps_vui->u1_aspect_ratio_idc = SAR_UNUSED;
  780|    656|    u2_sar_width = 0;
  781|    656|    u2_sar_height = 0;
  782|    656|    if(ps_vui->u1_aspect_ratio_info_present_flag)
  ------------------
  |  Branch (782:8): [True: 166, False: 490]
  ------------------
  783|    166|    {
  784|    166|        BITS_PARSE("aspect_ratio_idc", ps_vui->u1_aspect_ratio_idc, ps_bitstrm, 8);
  ------------------
  |  |  148|    166|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  785|    166|        switch(ps_vui->u1_aspect_ratio_idc)
  786|    166|        {
  787|      3|            case SAR_1_1:
  ------------------
  |  Branch (787:13): [True: 3, False: 163]
  ------------------
  788|      3|                u2_sar_width = 1;
  789|      3|                u2_sar_height = 1;
  790|      3|                break;
  791|      0|            case SAR_12_11:
  ------------------
  |  Branch (791:13): [True: 0, False: 166]
  ------------------
  792|      0|                u2_sar_width = 12;
  793|      0|                u2_sar_height = 11;
  794|      0|                break;
  795|      0|            case SAR_10_11:
  ------------------
  |  Branch (795:13): [True: 0, False: 166]
  ------------------
  796|      0|                u2_sar_width = 10;
  797|      0|                u2_sar_height = 11;
  798|      0|                break;
  799|      0|            case SAR_16_11:
  ------------------
  |  Branch (799:13): [True: 0, False: 166]
  ------------------
  800|      0|                u2_sar_width = 16;
  801|      0|                u2_sar_height = 11;
  802|      0|                break;
  803|      0|            case SAR_40_33:
  ------------------
  |  Branch (803:13): [True: 0, False: 166]
  ------------------
  804|      0|                u2_sar_width = 40;
  805|      0|                u2_sar_height = 33;
  806|      0|                break;
  807|      0|            case SAR_24_11:
  ------------------
  |  Branch (807:13): [True: 0, False: 166]
  ------------------
  808|      0|                u2_sar_width = 24;
  809|      0|                u2_sar_height = 11;
  810|      0|                break;
  811|      0|            case SAR_20_11:
  ------------------
  |  Branch (811:13): [True: 0, False: 166]
  ------------------
  812|      0|                u2_sar_width = 20;
  813|      0|                u2_sar_height = 11;
  814|      0|                break;
  815|      0|            case SAR_32_11:
  ------------------
  |  Branch (815:13): [True: 0, False: 166]
  ------------------
  816|      0|                u2_sar_width = 32;
  817|      0|                u2_sar_height = 11;
  818|      0|                break;
  819|      0|            case SAR_80_33:
  ------------------
  |  Branch (819:13): [True: 0, False: 166]
  ------------------
  820|      0|                u2_sar_width = 80;
  821|      0|                u2_sar_height = 33;
  822|      0|                break;
  823|      0|            case SAR_18_11:
  ------------------
  |  Branch (823:13): [True: 0, False: 166]
  ------------------
  824|      0|                u2_sar_width = 18;
  825|      0|                u2_sar_height = 11;
  826|      0|                break;
  827|      0|            case SAR_15_11:
  ------------------
  |  Branch (827:13): [True: 0, False: 166]
  ------------------
  828|      0|                u2_sar_width = 15;
  829|      0|                u2_sar_height = 11;
  830|      0|                break;
  831|      0|            case SAR_64_33:
  ------------------
  |  Branch (831:13): [True: 0, False: 166]
  ------------------
  832|      0|                u2_sar_width = 64;
  833|      0|                u2_sar_height = 33;
  834|      0|                break;
  835|      0|            case SAR_160_99:
  ------------------
  |  Branch (835:13): [True: 0, False: 166]
  ------------------
  836|      0|                u2_sar_width = 160;
  837|      0|                u2_sar_height = 99;
  838|      0|                break;
  839|      0|            case SAR_4_3:
  ------------------
  |  Branch (839:13): [True: 0, False: 166]
  ------------------
  840|      0|                u2_sar_width = 4;
  841|      0|                u2_sar_height = 3;
  842|      0|                break;
  843|      0|            case SAR_3_2:
  ------------------
  |  Branch (843:13): [True: 0, False: 166]
  ------------------
  844|      0|                u2_sar_width = 3;
  845|      0|                u2_sar_height = 2;
  846|      0|                break;
  847|      0|            case SAR_2_1:
  ------------------
  |  Branch (847:13): [True: 0, False: 166]
  ------------------
  848|      0|                u2_sar_width = 2;
  849|      0|                u2_sar_height = 1;
  850|      0|                break;
  851|     42|            case EXTENDED_SAR:
  ------------------
  |  Branch (851:13): [True: 42, False: 124]
  ------------------
  852|     42|                BITS_PARSE("sar_width", u2_sar_width, ps_bitstrm, 16);
  ------------------
  |  |  148|     42|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  853|     42|                BITS_PARSE("sar_height", u2_sar_height, ps_bitstrm, 16);
  ------------------
  |  |  148|     42|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  854|     42|                break;
  855|    121|            default:
  ------------------
  |  Branch (855:13): [True: 121, False: 45]
  ------------------
  856|    121|                u2_sar_width = 0;
  857|    121|                u2_sar_height = 0;
  858|    121|                break;
  859|    166|        }
  860|    166|    }
  861|       |
  862|    656|    ps_vui->u2_sar_width    = u2_sar_width;
  863|    656|    ps_vui->u2_sar_height   = u2_sar_height;
  864|       |
  865|    656|    BITS_PARSE("overscan_info_present_flag", ps_vui->u1_overscan_info_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    656|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  866|    656|    ps_vui->u1_overscan_appropriate_flag = 0;
  867|    656|    if(ps_vui->u1_overscan_info_present_flag)
  ------------------
  |  Branch (867:8): [True: 146, False: 510]
  ------------------
  868|    146|        BITS_PARSE("overscan_appropriate_flag", ps_vui->u1_overscan_appropriate_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    146|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  869|       |
  870|    656|    BITS_PARSE("video_signal_type_present_flag", ps_vui->u1_video_signal_type_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    656|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  871|    656|    ps_vui->u1_video_format = VID_FMT_UNSPECIFIED;
  872|    656|    ps_vui->u1_video_full_range_flag = 0;
  873|    656|    ps_vui->u1_colour_description_present_flag = 0;
  874|    656|    ps_vui->u1_colour_primaries = 2;
  875|    656|    ps_vui->u1_transfer_characteristics = 2;
  876|    656|    ps_vui->u1_matrix_coefficients = 2;
  877|       |
  878|    656|    if(ps_vui->u1_video_signal_type_present_flag)
  ------------------
  |  Branch (878:8): [True: 98, False: 558]
  ------------------
  879|     98|    {
  880|     98|        BITS_PARSE("video_format", ps_vui->u1_video_format, ps_bitstrm, 3);
  ------------------
  |  |  148|     98|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  881|     98|        BITS_PARSE("video_full_range_flag", ps_vui->u1_video_full_range_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     98|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  882|     98|        BITS_PARSE("colour_description_present_flag", ps_vui->u1_colour_description_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     98|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  883|     98|        if(ps_vui->u1_colour_description_present_flag)
  ------------------
  |  Branch (883:12): [True: 77, False: 21]
  ------------------
  884|     77|        {
  885|     77|            BITS_PARSE("colour_primaries", ps_vui->u1_colour_primaries, ps_bitstrm, 8);
  ------------------
  |  |  148|     77|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  886|     77|            BITS_PARSE("transfer_characteristics", ps_vui->u1_transfer_characteristics, ps_bitstrm, 8);
  ------------------
  |  |  148|     77|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  887|     77|            BITS_PARSE("matrix_coeffs", ps_vui->u1_matrix_coefficients, ps_bitstrm, 8);
  ------------------
  |  |  148|     77|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  888|     77|        }
  889|     98|    }
  890|       |
  891|    656|    BITS_PARSE("chroma_loc_info_present_flag", ps_vui->u1_chroma_loc_info_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    656|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  892|    656|    ps_vui->u1_chroma_sample_loc_type_top_field = 0;
  893|    656|    ps_vui->u1_chroma_sample_loc_type_bottom_field = 0;
  894|    656|    if(ps_vui->u1_chroma_loc_info_present_flag)
  ------------------
  |  Branch (894:8): [True: 28, False: 628]
  ------------------
  895|     28|    {
  896|     28|        UEV_PARSE("chroma_sample_loc_type_top_field", ps_vui->u1_chroma_sample_loc_type_top_field, ps_bitstrm);
  ------------------
  |  |  155|     28|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  897|     28|        if(ps_vui->u1_chroma_sample_loc_type_top_field > CHROMA_FMT_IDC_YUV444_PLANES + 1)
  ------------------
  |  Branch (897:12): [True: 0, False: 28]
  ------------------
  898|      0|        {
  899|      0|            return IHEVCD_INVALID_PARAMETER;
  900|      0|        }
  901|     28|        UEV_PARSE("chroma_sample_loc_type_bottom_field", ps_vui->u1_chroma_sample_loc_type_bottom_field, ps_bitstrm);
  ------------------
  |  |  155|     28|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  902|     28|        if(ps_vui->u1_chroma_sample_loc_type_bottom_field > CHROMA_FMT_IDC_YUV444_PLANES + 1)
  ------------------
  |  Branch (902:12): [True: 4, False: 24]
  ------------------
  903|      4|        {
  904|      4|            return IHEVCD_INVALID_PARAMETER;
  905|      4|        }
  906|     28|    }
  907|       |
  908|    652|    BITS_PARSE("neutral_chroma_indication_flag", ps_vui->u1_neutral_chroma_indication_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    652|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  909|    652|    BITS_PARSE("field_seq_flag", ps_vui->u1_field_seq_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    652|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  910|    652|    BITS_PARSE("frame_field_info_present_flag", ps_vui->u1_frame_field_info_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    652|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  911|    652|    BITS_PARSE("default_display_window_flag", ps_vui->u1_default_display_window_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    652|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  912|    652|    ps_vui->u4_def_disp_win_left_offset = 0;
  913|    652|    ps_vui->u4_def_disp_win_right_offset = 0;
  914|    652|    ps_vui->u4_def_disp_win_top_offset = 0;
  915|    652|    ps_vui->u4_def_disp_win_bottom_offset = 0;
  916|    652|    if(ps_vui->u1_default_display_window_flag)
  ------------------
  |  Branch (916:8): [True: 37, False: 615]
  ------------------
  917|     37|    {
  918|     37|        UEV_PARSE("def_disp_win_left_offset", ps_vui->u4_def_disp_win_left_offset, ps_bitstrm);
  ------------------
  |  |  155|     37|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  919|     37|        UEV_PARSE("def_disp_win_right_offset", ps_vui->u4_def_disp_win_right_offset, ps_bitstrm);
  ------------------
  |  |  155|     37|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  920|     37|        UEV_PARSE("def_disp_win_top_offset", ps_vui->u4_def_disp_win_top_offset, ps_bitstrm);
  ------------------
  |  |  155|     37|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  921|     37|        UEV_PARSE("def_disp_win_bottom_offset", ps_vui->u4_def_disp_win_bottom_offset, ps_bitstrm);
  ------------------
  |  |  155|     37|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  922|     37|    }
  923|       |
  924|    652|    BITS_PARSE("vui_timing_info_present_flag", ps_vui->u1_vui_timing_info_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    652|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  925|    652|    if(ps_vui->u1_vui_timing_info_present_flag)
  ------------------
  |  Branch (925:8): [True: 78, False: 574]
  ------------------
  926|     78|    {
  927|     78|        BITS_PARSE("vui_num_units_in_tick", ps_vui->u4_vui_num_units_in_tick, ps_bitstrm, 32);
  ------------------
  |  |  148|     78|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  928|     78|        BITS_PARSE("vui_time_scale", ps_vui->u4_vui_time_scale, ps_bitstrm, 32);
  ------------------
  |  |  148|     78|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  929|     78|        BITS_PARSE("vui_poc_proportional_to_timing_flag", ps_vui->u1_poc_proportional_to_timing_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     78|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  930|     78|        if(ps_vui->u1_poc_proportional_to_timing_flag)
  ------------------
  |  Branch (930:12): [True: 38, False: 40]
  ------------------
  931|     38|        {
  932|     38|            UEV_PARSE("vui_num_ticks_poc_diff_one_minus1", ps_vui->u4_num_ticks_poc_diff_one_minus1, ps_bitstrm);
  ------------------
  |  |  155|     38|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  933|     38|            if(ps_vui->u4_num_ticks_poc_diff_one_minus1 > UINT_MAX - 1)
  ------------------
  |  Branch (933:16): [True: 0, False: 38]
  ------------------
  934|      0|            {
  935|      0|                return IHEVCD_INVALID_PARAMETER;
  936|      0|            }
  937|     38|        }
  938|     78|        BITS_PARSE("vui_hrd_parameters_present_flag", ps_vui->u1_vui_hrd_parameters_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     78|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  939|     78|        if(ps_vui->u1_vui_hrd_parameters_present_flag)
  ------------------
  |  Branch (939:12): [True: 27, False: 51]
  ------------------
  940|     27|        {
  941|     27|            ret = ihevcd_parse_hrd_parameters(ps_bitstrm, &ps_vui->s_vui_hrd_parameters, 1, sps_max_sub_layers_minus1);
  942|     27|            RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|     27|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 5, False: 22]
  |  |  ------------------
  ------------------
  943|     22|        }
  944|     78|    }
  945|       |
  946|    647|    BITS_PARSE("bitstream_restriction_flag", ps_vui->u1_bitstream_restriction_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|    647|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  947|    647|    ps_vui->u1_tiles_fixed_structure_flag = 0;
  948|    647|    ps_vui->u1_motion_vectors_over_pic_boundaries_flag = 1;
  949|    647|    ps_vui->u1_restricted_ref_pic_lists_flag = 0;
  950|    647|    ps_vui->u4_min_spatial_segmentation_idc = 0;
  951|    647|    ps_vui->u1_max_bytes_per_pic_denom = 2;
  952|    647|    ps_vui->u1_max_bits_per_mincu_denom = 1;
  953|    647|    ps_vui->u1_log2_max_mv_length_horizontal = 15;
  954|    647|    ps_vui->u1_log2_max_mv_length_vertical = 15;
  955|    647|    if(ps_vui->u1_bitstream_restriction_flag)
  ------------------
  |  Branch (955:8): [True: 27, False: 620]
  ------------------
  956|     27|    {
  957|     27|        BITS_PARSE("tiles_fixed_structure_flag", ps_vui->u1_tiles_fixed_structure_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     27|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  958|     27|        BITS_PARSE("motion_vectors_over_pic_boundaries_flag", ps_vui->u1_motion_vectors_over_pic_boundaries_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     27|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  959|     27|        BITS_PARSE("restricted_ref_pic_lists_flag", ps_vui->u1_restricted_ref_pic_lists_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     27|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  960|       |
  961|     27|        UEV_PARSE("min_spatial_segmentation_idc", ps_vui->u4_min_spatial_segmentation_idc, ps_bitstrm);
  ------------------
  |  |  155|     27|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  962|     27|        if(ps_vui->u4_min_spatial_segmentation_idc > 4095)
  ------------------
  |  Branch (962:12): [True: 2, False: 25]
  ------------------
  963|      2|        {
  964|      2|            return IHEVCD_INVALID_PARAMETER;
  965|      2|        }
  966|     25|        UEV_PARSE("max_bytes_per_pic_denom", ps_vui->u1_max_bytes_per_pic_denom, ps_bitstrm);
  ------------------
  |  |  155|     25|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  967|     25|        if(ps_vui->u1_max_bytes_per_pic_denom > 16)
  ------------------
  |  Branch (967:12): [True: 0, False: 25]
  ------------------
  968|      0|        {
  969|      0|            return IHEVCD_INVALID_PARAMETER;
  970|      0|        }
  971|     25|        UEV_PARSE("max_bits_per_min_cu_denom", ps_vui->u1_max_bits_per_mincu_denom, ps_bitstrm);
  ------------------
  |  |  155|     25|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  972|     25|        if(ps_vui->u1_max_bits_per_mincu_denom > 16)
  ------------------
  |  Branch (972:12): [True: 3, False: 22]
  ------------------
  973|      3|        {
  974|      3|            return IHEVCD_INVALID_PARAMETER;
  975|      3|        }
  976|     22|        UEV_PARSE("log2_max_mv_length_horizontal", ps_vui->u1_log2_max_mv_length_horizontal, ps_bitstrm);
  ------------------
  |  |  155|     22|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  977|     22|        if(ps_vui->u1_max_bits_per_mincu_denom > 16)
  ------------------
  |  Branch (977:12): [True: 0, False: 22]
  ------------------
  978|      0|        {
  979|      0|            return IHEVCD_INVALID_PARAMETER;
  980|      0|        }
  981|     22|        UEV_PARSE("log2_max_mv_length_vertical", ps_vui->u1_log2_max_mv_length_vertical, ps_bitstrm);
  ------------------
  |  |  155|     22|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  982|     22|        if(ps_vui->u1_max_bits_per_mincu_denom > 15)
  ------------------
  |  Branch (982:12): [True: 0, False: 22]
  ------------------
  983|      0|        {
  984|      0|            return IHEVCD_INVALID_PARAMETER;
  985|      0|        }
  986|     22|    }
  987|       |
  988|    642|    return ret;
  989|    647|}
ihevcd_parse_headers.c:ihevcd_parse_hrd_parameters:
  668|     27|{
  669|     27|    WORD32 ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  670|     27|    WORD32 i;
  671|       |
  672|     27|    ps_hrd->u1_nal_hrd_parameters_present_flag = 0;
  673|     27|    ps_hrd->u1_vcl_hrd_parameters_present_flag = 0;
  674|       |
  675|     27|    ps_hrd->u1_sub_pic_cpb_params_present_flag = 0;
  676|       |
  677|     27|    ps_hrd->u1_tick_divisor_minus2 = 0;
  678|     27|    ps_hrd->u1_du_cpb_removal_delay_increment_length_minus1 = 0;
  679|     27|    ps_hrd->u1_sub_pic_cpb_params_in_pic_timing_sei_flag = 0;
  680|     27|    ps_hrd->u1_dpb_output_delay_du_length_minus1 = 0;
  681|       |
  682|     27|    ps_hrd->u4_bit_rate_scale = 0;
  683|     27|    ps_hrd->u4_cpb_size_scale = 0;
  684|     27|    ps_hrd->u4_cpb_size_du_scale = 0;
  685|       |
  686|     27|    ps_hrd->u1_initial_cpb_removal_delay_length_minus1 = 23;
  687|     27|    ps_hrd->u1_au_cpb_removal_delay_length_minus1 = 23;
  688|     27|    ps_hrd->u1_dpb_output_delay_length_minus1 = 23;
  689|       |
  690|     27|    if(common_info_present_flag)
  ------------------
  |  Branch (690:8): [True: 27, False: 0]
  ------------------
  691|     27|    {
  692|     27|        BITS_PARSE("nal_hrd_parameters_present_flag", ps_hrd->u1_nal_hrd_parameters_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     27|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  693|     27|        BITS_PARSE("vcl_hrd_parameters_present_flag", ps_hrd->u1_vcl_hrd_parameters_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     27|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  694|       |
  695|     27|        if(ps_hrd->u1_nal_hrd_parameters_present_flag  ||  ps_hrd->u1_vcl_hrd_parameters_present_flag)
  ------------------
  |  Branch (695:12): [True: 13, False: 14]
  |  Branch (695:60): [True: 2, False: 12]
  ------------------
  696|     15|        {
  697|     15|            BITS_PARSE("sub_pic_cpb_params_present_flag", ps_hrd->u1_sub_pic_cpb_params_present_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     15|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  698|     15|            if(ps_hrd->u1_sub_pic_cpb_params_present_flag)
  ------------------
  |  Branch (698:16): [True: 11, False: 4]
  ------------------
  699|     11|            {
  700|     11|                BITS_PARSE("tick_divisor_minus2", ps_hrd->u1_tick_divisor_minus2, ps_bitstrm, 8);
  ------------------
  |  |  148|     11|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  701|     11|                BITS_PARSE("du_cpb_removal_delay_increment_length_minus1", ps_hrd->u1_du_cpb_removal_delay_increment_length_minus1, ps_bitstrm, 5);
  ------------------
  |  |  148|     11|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  702|     11|                BITS_PARSE("sub_pic_cpb_params_in_pic_timing_sei_flag", ps_hrd->u1_sub_pic_cpb_params_in_pic_timing_sei_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|     11|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  703|     11|                BITS_PARSE("dpb_output_delay_du_length_minus1", ps_hrd->u1_dpb_output_delay_du_length_minus1, ps_bitstrm, 5);
  ------------------
  |  |  148|     11|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  704|     11|            }
  705|       |
  706|     15|            BITS_PARSE("bit_rate_scale", ps_hrd->u4_bit_rate_scale, ps_bitstrm, 4);
  ------------------
  |  |  148|     15|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  707|     15|            BITS_PARSE("cpb_size_scale", ps_hrd->u4_cpb_size_scale, ps_bitstrm, 4);
  ------------------
  |  |  148|     15|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  708|     15|            if(ps_hrd->u1_sub_pic_cpb_params_present_flag)
  ------------------
  |  Branch (708:16): [True: 11, False: 4]
  ------------------
  709|     11|                BITS_PARSE("cpb_size_du_scale", ps_hrd->u4_cpb_size_du_scale, ps_bitstrm, 4);
  ------------------
  |  |  148|     11|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  710|       |
  711|     15|            BITS_PARSE("initial_cpb_removal_delay_length_minus1", ps_hrd->u1_initial_cpb_removal_delay_length_minus1, ps_bitstrm, 5);
  ------------------
  |  |  148|     15|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  712|     15|            BITS_PARSE("au_cpb_removal_delay_length_minus1", ps_hrd->u1_au_cpb_removal_delay_length_minus1, ps_bitstrm, 5);
  ------------------
  |  |  148|     15|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  713|     15|            BITS_PARSE("dpb_output_delay_length_minus1", ps_hrd->u1_dpb_output_delay_length_minus1, ps_bitstrm, 5);
  ------------------
  |  |  148|     15|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  714|     15|        }
  715|     27|    }
  716|       |
  717|       |
  718|    121|    for(i = 0; i <= max_num_sub_layers_minus1; i++)
  ------------------
  |  Branch (718:16): [True: 99, False: 22]
  ------------------
  719|     99|    {
  720|     99|        BITS_PARSE("fixed_pic_rate_general_flag[ i ]", ps_hrd->au1_fixed_pic_rate_general_flag[i], ps_bitstrm, 1);
  ------------------
  |  |  148|     99|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  721|       |
  722|     99|        ps_hrd->au1_fixed_pic_rate_within_cvs_flag[i] = 1;
  723|     99|        ps_hrd->au2_elemental_duration_in_tc_minus1[i] = 0;
  724|     99|        ps_hrd->au1_low_delay_hrd_flag[i] = 0;
  725|     99|        ps_hrd->au1_cpb_cnt_minus1[i] = 0;
  726|       |
  727|     99|        if(!ps_hrd->au1_fixed_pic_rate_general_flag[i])
  ------------------
  |  Branch (727:12): [True: 67, False: 32]
  ------------------
  728|     67|            BITS_PARSE("fixed_pic_rate_within_cvs_flag[ i ]", ps_hrd->au1_fixed_pic_rate_within_cvs_flag[i], ps_bitstrm, 1);
  ------------------
  |  |  148|     67|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  729|       |
  730|     99|        if(ps_hrd->au1_fixed_pic_rate_within_cvs_flag[i])
  ------------------
  |  Branch (730:12): [True: 47, False: 52]
  ------------------
  731|     47|        {
  732|     47|            UEV_PARSE("elemental_duration_in_tc_minus1[ i ]", ps_hrd->au2_elemental_duration_in_tc_minus1[i], ps_bitstrm);
  ------------------
  |  |  155|     47|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  733|     47|            if(ps_hrd->au2_elemental_duration_in_tc_minus1[i] > 2047)
  ------------------
  |  Branch (733:16): [True: 0, False: 47]
  ------------------
  734|      0|            {
  735|      0|                return IHEVCD_INVALID_PARAMETER;
  736|      0|            }
  737|     47|        }
  738|     52|        else
  739|     52|        {
  740|     52|            BITS_PARSE("low_delay_hrd_flag[ i ]", ps_hrd->au1_low_delay_hrd_flag[i], ps_bitstrm, 1);
  ------------------
  |  |  148|     52|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  741|     52|        }
  742|       |
  743|     99|        if(!ps_hrd->au1_low_delay_hrd_flag[i])
  ------------------
  |  Branch (743:12): [True: 97, False: 2]
  ------------------
  744|     97|        {
  745|     97|            UEV_PARSE("cpb_cnt_minus1[ i ]", ps_hrd->au1_cpb_cnt_minus1[i], ps_bitstrm);
  ------------------
  |  |  155|     97|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  746|     97|            if(ps_hrd->au1_cpb_cnt_minus1[i] > (MAX_CPB_CNT - 1))
  ------------------
  |  |  523|     97|#define MAX_CPB_CNT 32
  ------------------
  |  Branch (746:16): [True: 5, False: 92]
  ------------------
  747|      5|            {
  748|      5|                return IHEVCD_INVALID_PARAMETER;
  749|      5|            }
  750|     97|        }
  751|       |
  752|     94|        if(ps_hrd->u1_nal_hrd_parameters_present_flag)
  ------------------
  |  Branch (752:12): [True: 24, False: 70]
  ------------------
  753|     24|            ihevcd_parse_sub_layer_hrd_parameters(ps_bitstrm,
  754|     24|                                                  &ps_hrd->as_sub_layer_hrd_params[i],
  755|     24|                                                  ps_hrd->au1_cpb_cnt_minus1[i],
  756|     24|                                                  ps_hrd->u1_sub_pic_cpb_params_present_flag);
  757|       |
  758|     94|        if(ps_hrd->u1_vcl_hrd_parameters_present_flag)
  ------------------
  |  Branch (758:12): [True: 33, False: 61]
  ------------------
  759|     33|            ihevcd_parse_sub_layer_hrd_parameters(ps_bitstrm,
  760|     33|                                                  &ps_hrd->as_sub_layer_hrd_params[i],
  761|     33|                                                  ps_hrd->au1_cpb_cnt_minus1[i],
  762|     33|                                                  ps_hrd->u1_sub_pic_cpb_params_present_flag);
  763|     94|    }
  764|       |
  765|     22|    return ret;
  766|     27|}
ihevcd_parse_headers.c:ihevcd_parse_sub_layer_hrd_parameters:
  628|     57|{
  629|     57|    WORD32 ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  630|     57|    WORD32 i;
  631|       |
  632|    146|    for(i = 0; i <= cpb_cnt; i++)
  ------------------
  |  Branch (632:16): [True: 89, False: 57]
  ------------------
  633|     89|    {
  634|     89|        UEV_PARSE("bit_rate_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_bit_rate_value_minus1[i], ps_bitstrm);
  ------------------
  |  |  155|     89|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  635|     89|        if(ps_sub_layer_hrd_params->au4_bit_rate_value_minus1[i] > UINT_MAX - 1)
  ------------------
  |  Branch (635:12): [True: 0, False: 89]
  ------------------
  636|      0|        {
  637|      0|            return IHEVCD_INVALID_PARAMETER;
  638|      0|        }
  639|     89|        UEV_PARSE("cpb_size_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_cpb_size_value_minus1[i], ps_bitstrm);
  ------------------
  |  |  155|     89|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  640|     89|        if(ps_sub_layer_hrd_params->au4_cpb_size_value_minus1[i] > UINT_MAX - 1)
  ------------------
  |  Branch (640:12): [True: 0, False: 89]
  ------------------
  641|      0|        {
  642|      0|            return IHEVCD_INVALID_PARAMETER;
  643|      0|        }
  644|     89|        if(sub_pic_cpb_params_present_flag)
  ------------------
  |  Branch (644:12): [True: 27, False: 62]
  ------------------
  645|     27|        {
  646|     27|            UEV_PARSE("cpb_size_du_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_cpb_size_du_value_minus1[i], ps_bitstrm);
  ------------------
  |  |  155|     27|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  647|     27|            if(ps_sub_layer_hrd_params->au4_cpb_size_du_value_minus1[i] > UINT_MAX - 1)
  ------------------
  |  Branch (647:16): [True: 0, False: 27]
  ------------------
  648|      0|            {
  649|      0|                return IHEVCD_INVALID_PARAMETER;
  650|      0|            }
  651|     27|            UEV_PARSE("bit_rate_du_value_minus1[ i ]", ps_sub_layer_hrd_params->au4_bit_rate_du_value_minus1[i], ps_bitstrm);
  ------------------
  |  |  155|     27|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  652|     27|            if(ps_sub_layer_hrd_params->au4_bit_rate_du_value_minus1[i] > UINT_MAX - 1)
  ------------------
  |  Branch (652:16): [True: 0, False: 27]
  ------------------
  653|      0|            {
  654|      0|                return IHEVCD_INVALID_PARAMETER;
  655|      0|            }
  656|     27|        }
  657|     89|        BITS_PARSE("cbr_flag[ i ]", ps_sub_layer_hrd_params->au1_cbr_flag[i], ps_bitstrm, 1);
  ------------------
  |  |  148|     89|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  658|     89|    }
  659|       |
  660|     57|    return ret;
  661|     57|}

ihevcd_parse_residual_coding:
  185|  3.71M|{
  186|  3.71M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  187|  3.71M|    WORD32 transform_skip_flag;
  188|  3.71M|    WORD32 value;
  189|  3.71M|    pps_t *ps_pps;
  190|  3.71M|    WORD32 last_scan_pos, last_sub_blk;
  191|  3.71M|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  192|  3.71M|    WORD32 last_significant_coeff_x_prefix, last_significant_coeff_y_prefix;
  193|  3.71M|    WORD32 last_significant_coeff_x, last_significant_coeff_y;
  194|  3.71M|    const UWORD8 *pu1_scan_blk = NULL, *pu1_scan_coeff;
  195|  3.71M|    WORD32 scan_idx;
  196|  3.71M|    WORD32 i;
  197|  3.71M|    WORD32 sign_data_hiding_flag;
  198|  3.71M|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  199|  3.71M|    WORD32 gt1_ctxt = 1;
  200|  3.71M|    WORD32 c_max;
  201|  3.71M|    UWORD16 au2_csbf[9];
  202|  3.71M|    tu_sblk_coeff_data_t *ps_tu_sblk_coeff_data;
  203|  3.71M|    WORD8 *pi1_num_coded_subblks;
  204|  3.71M|    WORD32 num_subblks;
  205|  3.71M|    WORD32 sig_coeff_base_ctxt, abs_gt1_base_ctxt;
  206|  3.71M|    UNUSED(x0);
  ------------------
  |  |   38|  3.71M|#define UNUSED(x) ((void)(x))
  ------------------
  207|  3.71M|    UNUSED(y0);
  ------------------
  |  |   38|  3.71M|#define UNUSED(x) ((void)(x))
  ------------------
  208|  3.71M|    ps_pps = ps_codec->s_parse.ps_pps;
  209|       |
  210|  3.71M|    sign_data_hiding_flag = ps_pps->i1_sign_data_hiding_flag;
  211|  3.71M|    transform_skip_flag = 0;
  212|  3.71M|    if(ps_pps->i1_transform_skip_enabled_flag &&
  ------------------
  |  Branch (212:8): [True: 3.43M, False: 276k]
  ------------------
  213|  3.71M|       !ps_codec->s_parse.s_cu.i4_cu_transquant_bypass &&
  ------------------
  |  Branch (213:8): [True: 3.41M, False: 25.4k]
  ------------------
  214|  3.71M|       (log2_trafo_size == 2))
  ------------------
  |  Branch (214:8): [True: 627k, False: 2.78M]
  ------------------
  215|   627k|    {
  216|   627k|        WORD32 ctxt_idx;
  217|       |
  218|   627k|        if(!c_idx)
  ------------------
  |  Branch (218:12): [True: 288k, False: 338k]
  ------------------
  219|   288k|        {
  220|   288k|            ctxt_idx = IHEVC_CAB_TFM_SKIP0;
  221|   288k|        }
  222|   338k|        else
  223|   338k|        {
  224|   338k|            ctxt_idx = IHEVC_CAB_TFM_SKIP12;
  225|   338k|        }
  226|   627k|        TRACE_CABAC_CTXT("transform_skip_flag", ps_cabac->u4_range, ctxt_idx);
  227|   627k|        value = ihevcd_cabac_decode_bin(ps_cabac,
  228|   627k|                                        ps_bitstrm,
  229|   627k|                                        ctxt_idx);
  230|   627k|        AEV_TRACE("transform_skip_flag", value, ps_cabac->u4_range);
  231|   627k|        transform_skip_flag = value;
  232|   627k|    }
  233|       |
  234|       |    /* code the last_coeff_x_prefix as tunary binarized code */
  235|  3.71M|    {
  236|  3.71M|        WORD32 ctxt_idx_x, ctxt_idx_y, ctx_shift;
  237|  3.71M|        WORD32 ctx_offset;
  238|  3.71M|        c_max = (log2_trafo_size << 1) - 1;
  239|       |
  240|  3.71M|        if(!c_idx)
  ------------------
  |  Branch (240:12): [True: 2.55M, False: 1.15M]
  ------------------
  241|  2.55M|        {
  242|  2.55M|            ctx_offset = (3 * (log2_trafo_size - 2)) + ((log2_trafo_size - 1) >> 2);
  243|  2.55M|            ctxt_idx_x = IHEVC_CAB_COEFFX_PREFIX + ctx_offset;
  244|  2.55M|            ctxt_idx_y = IHEVC_CAB_COEFFY_PREFIX + ctx_offset;
  245|  2.55M|            ctx_shift  = (log2_trafo_size + 1) >> 2;
  246|  2.55M|        }
  247|  1.15M|        else
  248|  1.15M|        {
  249|  1.15M|            ctxt_idx_x = IHEVC_CAB_COEFFX_PREFIX + 15;
  250|  1.15M|            ctxt_idx_y = IHEVC_CAB_COEFFY_PREFIX + 15;
  251|  1.15M|            ctx_shift  = log2_trafo_size  - 2;
  252|  1.15M|        }
  253|       |
  254|  3.71M|        TRACE_CABAC_CTXT("last_coeff_x_prefix", ps_cabac->u4_range, ctxt_idx_x);
  255|  3.71M|        last_significant_coeff_x_prefix = ihevcd_cabac_decode_bins_tunary(ps_cabac,
  256|  3.71M|                                                                          ps_bitstrm,
  257|  3.71M|                                                                          c_max,
  258|  3.71M|                                                                          ctxt_idx_x,
  259|  3.71M|                                                                          ctx_shift,
  260|  3.71M|                                                                          c_max);
  261|       |
  262|  3.71M|        AEV_TRACE("last_coeff_x_prefix", last_significant_coeff_x_prefix, ps_cabac->u4_range);
  263|       |
  264|  3.71M|        TRACE_CABAC_CTXT("last_coeff_y_prefix", ps_cabac->u4_range, ctxt_idx_y);
  265|  3.71M|        last_significant_coeff_y_prefix = ihevcd_cabac_decode_bins_tunary(ps_cabac,
  266|  3.71M|                                                                          ps_bitstrm,
  267|  3.71M|                                                                          c_max,
  268|  3.71M|                                                                          ctxt_idx_y,
  269|  3.71M|                                                                          ctx_shift,
  270|  3.71M|                                                                          c_max);
  271|       |
  272|  3.71M|        AEV_TRACE("last_coeff_y_prefix", last_significant_coeff_y_prefix, ps_cabac->u4_range);
  273|       |
  274|       |
  275|  3.71M|        last_significant_coeff_x = last_significant_coeff_x_prefix;
  276|  3.71M|        if(last_significant_coeff_x_prefix > 3)
  ------------------
  |  Branch (276:12): [True: 885k, False: 2.82M]
  ------------------
  277|   885k|        {
  278|   885k|            WORD32 suf_length = ((last_significant_coeff_x_prefix - 2) >> 1);
  279|       |
  280|   885k|            value = ihevcd_cabac_decode_bypass_bins(ps_cabac,
  281|   885k|                                                    ps_bitstrm,
  282|   885k|                                                    suf_length);
  283|       |
  284|   885k|            AEV_TRACE("last_coeff_x_suffix", value, ps_cabac->u4_range);
  285|       |
  286|       |
  287|   885k|            last_significant_coeff_x =
  288|   885k|                            (1 << ((last_significant_coeff_x_prefix >> 1) - 1)) *
  289|   885k|                            (2 + (last_significant_coeff_x_prefix & 1)) + value;
  290|   885k|        }
  291|       |
  292|       |
  293|  3.71M|        last_significant_coeff_y = last_significant_coeff_y_prefix;
  294|  3.71M|        if(last_significant_coeff_y_prefix > 3)
  ------------------
  |  Branch (294:12): [True: 730k, False: 2.98M]
  ------------------
  295|   730k|        {
  296|   730k|            WORD32 suf_length = ((last_significant_coeff_y_prefix - 2) >> 1);
  297|   730k|            value = ihevcd_cabac_decode_bypass_bins(ps_cabac,
  298|   730k|                                                    ps_bitstrm,
  299|   730k|                                                    suf_length);
  300|       |
  301|   730k|            AEV_TRACE("last_coeff_y_suffix", value, ps_cabac->u4_range);
  302|   730k|            last_significant_coeff_y =
  303|   730k|                            (1 << ((last_significant_coeff_y_prefix >> 1) - 1)) *
  304|   730k|                            (2 + (last_significant_coeff_y_prefix & 1)) + value;
  305|   730k|        }
  306|       |
  307|  3.71M|    }
  308|       |
  309|       |    /* Choose a scan matrix based on intra flag, intra pred mode, transform size
  310|       |     and luma/chroma */
  311|  3.71M|    scan_idx = SCAN_DIAG_UPRIGHT;
  312|  3.71M|    if(PRED_MODE_INTRA == ps_codec->s_parse.s_cu.i4_pred_mode)
  ------------------
  |  Branch (312:8): [True: 3.66M, False: 46.2k]
  ------------------
  313|  3.66M|    {
  314|  3.66M|        if((2 == log2_trafo_size) || ((3 == log2_trafo_size) && (0 == c_idx)))
  ------------------
  |  Branch (314:12): [True: 699k, False: 2.96M]
  |  Branch (314:39): [True: 1.09M, False: 1.87M]
  |  Branch (314:65): [True: 479k, False: 612k]
  ------------------
  315|  1.17M|        {
  316|  1.17M|            if((6 <= intra_pred_mode) &&
  ------------------
  |  Branch (316:16): [True: 647k, False: 531k]
  ------------------
  317|  1.17M|               (14 >= intra_pred_mode))
  ------------------
  |  Branch (317:16): [True: 177k, False: 469k]
  ------------------
  318|   177k|            {
  319|   177k|                scan_idx = SCAN_VERT;
  320|   177k|            }
  321|  1.00M|            else if((22 <= intra_pred_mode) &&
  ------------------
  |  Branch (321:21): [True: 354k, False: 647k]
  ------------------
  322|  1.00M|                    (30 >= intra_pred_mode))
  ------------------
  |  Branch (322:21): [True: 272k, False: 81.2k]
  ------------------
  323|   272k|            {
  324|   272k|                scan_idx = SCAN_HORZ;
  325|   272k|            }
  326|  1.17M|        }
  327|  3.66M|    }
  328|       |
  329|       |    /* In case the scan is vertical, then swap  X and Y positions */
  330|  3.71M|    if(SCAN_VERT == scan_idx)
  ------------------
  |  Branch (330:8): [True: 177k, False: 3.53M]
  ------------------
  331|   177k|    {
  332|   177k|        SWAP(last_significant_coeff_x, last_significant_coeff_y);
  ------------------
  |  |   87|   177k|#define SWAP(X,Y)                   \
  |  |   88|   177k|{                                   \
  |  |   89|   177k|    (X) = (X) ^ (Y);                \
  |  |   90|   177k|    (Y) = (X) ^ (Y);                \
  |  |   91|   177k|    (X) = (X) ^ (Y);                \
  |  |   92|   177k|}
  ------------------
  333|   177k|    }
  334|       |
  335|  3.71M|    {
  336|  3.71M|        WORD8 *pi1_scan_idx;
  337|  3.71M|        WORD8 *pi1_buf = (WORD8 *)ps_codec->s_parse.pv_tu_coeff_data;
  338|       |
  339|       |        /* First WORD8 gives number of coded subblocks */
  340|  3.71M|        pi1_num_coded_subblks = pi1_buf++;
  341|       |
  342|       |        /* Set number of coded subblocks in the current TU to zero */
  343|       |        /* This will be updated later */
  344|  3.71M|        *pi1_num_coded_subblks = 0;
  345|       |
  346|       |        /* Second WORD8 gives (scan idx << 1) | trans_skip */
  347|  3.71M|        pi1_scan_idx = pi1_buf++;
  348|  3.71M|        *pi1_scan_idx = (scan_idx << 1) | transform_skip_flag;
  349|       |
  350|       |        /* Store the incremented pointer in pv_tu_coeff_data */
  351|  3.71M|        ps_codec->s_parse.pv_tu_coeff_data = pi1_buf;
  352|       |
  353|  3.71M|    }
  354|       |    /**
  355|       |     * Given last_significant_coeff_y and last_significant_coeff_x find last sub block
  356|       |     * This is done by ignoring lower two bits of last_significant_coeff_y and last_significant_coeff_x
  357|       |     * and using scan matrix for lookup
  358|       |     */
  359|       |
  360|       |    /* If transform is 4x4, last_sub_blk is zero */
  361|  3.71M|    last_sub_blk = 0;
  362|       |
  363|       |    /* If transform is larger than 4x4, then based on scan_idx and transform size, choose a scan table */
  364|       |
  365|  3.71M|    if(log2_trafo_size > 2)
  ------------------
  |  Branch (365:8): [True: 2.99M, False: 719k]
  ------------------
  366|  2.99M|    {
  367|  2.99M|        WORD32 scan_pos;
  368|  2.99M|        WORD32 scan_mat_size;
  369|  2.99M|        pu1_scan_blk = (UWORD8 *)gapv_ihevc_scan[scan_idx * 3 + (log2_trafo_size - 2 - 1)];
  370|       |
  371|       |
  372|       |        /* Divide the current transform to 4x4 subblocks and count number of 4x4 in the first row */
  373|       |        /* This will be size of scan matrix to be used for subblock scanning */
  374|  2.99M|        scan_mat_size = 1 << (log2_trafo_size - 2);
  375|  2.99M|        scan_pos = ((last_significant_coeff_y >> 2) * scan_mat_size) +
  376|  2.99M|                        (last_significant_coeff_x >> 2);
  377|       |
  378|  2.99M|        last_sub_blk = pu1_scan_blk[scan_pos];
  379|  2.99M|    }
  380|  3.71M|    pu1_scan_coeff  = &gau1_ihevc_scan4x4[scan_idx][0];
  381|       |
  382|  3.71M|    {
  383|  3.71M|        WORD32 scan_pos;
  384|       |
  385|  3.71M|        scan_pos = ((last_significant_coeff_y & 3) << 2) +
  386|  3.71M|                        (last_significant_coeff_x & 3);
  387|       |
  388|  3.71M|        last_scan_pos = pu1_scan_coeff[scan_pos];
  389|  3.71M|    }
  390|  3.71M|    if(log2_trafo_size > 2)
  ------------------
  |  Branch (390:8): [True: 2.99M, False: 719k]
  ------------------
  391|  2.99M|        pu1_scan_blk = (UWORD8 *)gapv_ihevc_invscan[scan_idx * 3 + (log2_trafo_size - 2 - 1)];
  392|  3.71M|    pu1_scan_coeff  = &gau1_ihevc_invscan4x4[scan_idx][0];
  393|       |
  394|       |    /* Set CSBF array to zero */
  395|  3.71M|    {
  396|  3.71M|        UWORD32 *pu4_csbf;
  397|  3.71M|        pu4_csbf = (void *)au2_csbf;
  398|  3.71M|        *pu4_csbf++ = 0;
  399|  3.71M|        *pu4_csbf++ = 0;
  400|  3.71M|        *pu4_csbf++ = 0;
  401|  3.71M|        *pu4_csbf = 0;
  402|       |        /* To avoid a check for y pos, 9th WORD16 in the array is set to zero */
  403|  3.71M|        au2_csbf[8] = 0;
  404|  3.71M|    }
  405|       |
  406|       |    /*************************************************************************/
  407|       |    /* derive base context index for sig coeff as per section 9.3.3.1.4      */
  408|       |    /* TODO; convert to look up based on luma/chroma, scan type and tfr size */
  409|       |    /*************************************************************************/
  410|  3.71M|    if(!c_idx)
  ------------------
  |  Branch (410:8): [True: 2.55M, False: 1.15M]
  ------------------
  411|  2.55M|    {
  412|  2.55M|        sig_coeff_base_ctxt = IHEVC_CAB_COEFF_FLAG;
  413|  2.55M|        abs_gt1_base_ctxt = IHEVC_CAB_COEFABS_GRTR1_FLAG;
  414|       |
  415|  2.55M|        if(3 == log2_trafo_size)
  ------------------
  |  Branch (415:12): [True: 491k, False: 2.06M]
  ------------------
  416|   491k|        {
  417|       |            /* 8x8 transform size */
  418|   491k|            sig_coeff_base_ctxt += (scan_idx == SCAN_DIAG_UPRIGHT) ? 9 : 15;
  ------------------
  |  Branch (418:36): [True: 314k, False: 177k]
  ------------------
  419|   491k|        }
  420|  2.06M|        else  if(3 < log2_trafo_size)
  ------------------
  |  Branch (420:18): [True: 1.72M, False: 335k]
  ------------------
  421|  1.72M|        {
  422|       |            /* larger transform sizes */
  423|  1.72M|            sig_coeff_base_ctxt += 21;
  424|  1.72M|        }
  425|  2.55M|    }
  426|  1.15M|    else
  427|  1.15M|    {
  428|       |        /* chroma context initializations */
  429|  1.15M|        sig_coeff_base_ctxt = IHEVC_CAB_COEFF_FLAG + 27;
  430|  1.15M|        abs_gt1_base_ctxt = IHEVC_CAB_COEFABS_GRTR1_FLAG + 16;
  431|       |
  432|  1.15M|        if(3 == log2_trafo_size)
  ------------------
  |  Branch (432:12): [True: 612k, False: 543k]
  ------------------
  433|   612k|        {
  434|       |            /* 8x8 transform size */
  435|   612k|            sig_coeff_base_ctxt += 9;
  436|   612k|        }
  437|   543k|        else  if(3 < log2_trafo_size)
  ------------------
  |  Branch (437:18): [True: 158k, False: 384k]
  ------------------
  438|   158k|        {
  439|       |            /* larger transform sizes */
  440|   158k|            sig_coeff_base_ctxt += 12;
  441|   158k|        }
  442|  1.15M|    }
  443|  3.71M|    num_subblks = 0;
  444|       |    /* Parse each 4x4 subblocks */
  445|  15.0M|    for(i = last_sub_blk; i >= 0; i--)
  ------------------
  |  Branch (445:27): [True: 11.3M, False: 3.71M]
  ------------------
  446|  11.3M|    {
  447|  11.3M|        WORD32 sub_blk_pos;
  448|  11.3M|        WORD32 infer_sig_coeff_flag;
  449|  11.3M|        WORD32 cur_csbf;
  450|       |
  451|  11.3M|        WORD32 n;
  452|  11.3M|        WORD32 num_coeff;
  453|       |        /* Sig coeff map for 16 entries in raster scan order. Upper 16 bits are used.
  454|       |         * MSB gives sig coeff flag for 0th coeff and so on
  455|       |         * UWORD16 would have been enough but kept as UWORD32 for code optimizations
  456|       |         * In arm unnecessary masking operations are saved
  457|       |         */
  458|  11.3M|        UWORD32 u4_sig_coeff_map_raster;
  459|  11.3M|        WORD32 sign_hidden;
  460|       |
  461|       |        /* Sig coeff map in scan order */
  462|  11.3M|        UWORD32 u4_sig_coeff_map;
  463|  11.3M|        WORD32 coeff_abs_level_greater2_flag;
  464|  11.3M|        UWORD32 u4_coeff_abs_level_greater1_map;
  465|  11.3M|        UWORD32 u4_coeff_abs_level_greater2_map;
  466|  11.3M|        UWORD32 u4_coeff_sign_map;
  467|  11.3M|        WORD32 first_sig_scan_pos, last_sig_scan_pos, num_greater1_flag, first_greater1_scan_pos;
  468|  11.3M|        WORD32  num_sig_coeff, sum_abs_level;
  469|  11.3M|        WORD32 nbr_csbf;
  470|       |
  471|       |
  472|  11.3M|        WORD32 ctxt_set;
  473|  11.3M|        WORD32 rice_param;
  474|  11.3M|        WORD32 xs, ys;
  475|       |
  476|       |
  477|  11.3M|        sub_blk_pos  = 0;
  478|  11.3M|        if(i && (log2_trafo_size > 2))
  ------------------
  |  Branch (478:12): [True: 7.66M, False: 3.71M]
  |  Branch (478:17): [True: 7.66M, False: 0]
  ------------------
  479|  7.66M|            sub_blk_pos = pu1_scan_blk[i];
  480|       |
  481|       |        /* Get xs and ys from scan position */
  482|       |        /* This is needed for context modelling of significant coeff flag */
  483|  11.3M|        xs = sub_blk_pos & ((1 << (log2_trafo_size - 2)) - 1);
  484|  11.3M|        ys = sub_blk_pos >> (log2_trafo_size - 2);
  485|       |
  486|       |
  487|       |        /* Check if neighbor subblocks are coded */
  488|  11.3M|        {
  489|       |
  490|  11.3M|            nbr_csbf = 0;
  491|       |
  492|       |            /* Get Bottom sub blocks CSBF */
  493|  11.3M|            nbr_csbf |= (au2_csbf[ys + 1] >> xs) & 1;
  494|  11.3M|            nbr_csbf <<= 1;
  495|       |
  496|       |            /* Get Right sub blocks CSBF */
  497|       |            /* Even if xs is equal to (1 << (log2_trafo_size - 2 )) - 1,
  498|       |               since au2_csbf is set to zero at the beginning, csbf for
  499|       |               neighbor will be read as 0 */
  500|       |
  501|  11.3M|            nbr_csbf |= (au2_csbf[ys] >> (xs + 1)) & 1;
  502|       |
  503|       |
  504|  11.3M|        }
  505|  11.3M|        cur_csbf = 0;
  506|       |
  507|       |        /* DC coeff is inferred, only if coded_sub_block is explicitly parsed as 1 */
  508|       |        /* i.e. it is not inferred for first and last subblock */
  509|  11.3M|        infer_sig_coeff_flag = 0;
  510|  11.3M|        if((i < last_sub_blk) && (i > 0))
  ------------------
  |  Branch (510:12): [True: 7.66M, False: 3.71M]
  |  Branch (510:34): [True: 6.46M, False: 1.19M]
  ------------------
  511|  6.46M|        {
  512|  6.46M|            WORD32 ctxt_idx  = IHEVC_CAB_CODED_SUBLK_IDX;
  513|       |
  514|       |            /* ctxt based on right / bottom avail csbf, section 9.3.3.1.3 */
  515|  6.46M|            ctxt_idx += (nbr_csbf) ? 1 : 0;
  ------------------
  |  Branch (515:25): [True: 2.60M, False: 3.85M]
  ------------------
  516|       |
  517|       |            /* Ctxt based on luma or chroma */
  518|  6.46M|            ctxt_idx += c_idx  ? 2 : 0;
  ------------------
  |  Branch (518:25): [True: 183k, False: 6.28M]
  ------------------
  519|  6.46M|            TRACE_CABAC_CTXT("coded_sub_block_flag", ps_cabac->u4_range, ctxt_idx);
  520|  25.8M|            IHEVCD_CABAC_DECODE_BIN(cur_csbf, ps_cabac, ps_bitstrm, ctxt_idx);
  ------------------
  |  |   59|  6.46M|#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index)       \
  |  |   60|  6.46M|{                                                                               \
  |  |   61|  6.46M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |   62|  6.46M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |   63|  6.46M|    UWORD32 u4_rlps;                                                            \
  |  |   64|  6.46M|    UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index];            \
  |  |   65|  6.46M|    WORD32 state_mps = *pu1_ctxt_model;                                         \
  |  |   66|  6.46M|    WORD32 clz;                                                                 \
  |  |   67|  6.46M|    UWORD32 u4_qnt_range;                                                       \
  |  |   68|  6.46M|                                                                                \
  |  |   69|  6.46M|    /* Sanity checks */                                                         \
  |  |   70|  6.46M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  6.46M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   71|  6.46M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  6.46M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   72|  6.46M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));             \
  |  |  ------------------
  |  |  |  |   55|  6.46M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   73|  6.46M|    ASSERT(state_mps < 128);                                                    \
  |  |  ------------------
  |  |  |  |   55|  6.46M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   74|  6.46M|    clz = CLZ(u4_range);                                                        \
  |  |   75|  6.46M|    clz -= (32 - RANGE_NUMBITS);                                                \
  |  |  ------------------
  |  |  |  |   40|  6.46M|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |   76|  6.46M|    u4_qnt_range = u4_range << clz;                                             \
  |  |   77|  6.46M|    u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3;                   \
  |  |  ------------------
  |  |  |  |   41|  6.46M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  6.46M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  6.46M|    /* Get the lps range from LUT based on quantized range and state */         \
  |  |   79|  6.46M|    u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range];              \
  |  |   80|  6.46M|    u4_rlps = u4_rlps << (RANGE_SHIFT - clz);                                   \
  |  |  ------------------
  |  |  |  |   41|  6.46M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  6.46M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  6.46M|    u4_range -= u4_rlps;                                                        \
  |  |   82|  6.46M|                                                                                \
  |  |   83|  6.46M|    u4_bin = state_mps & 1;                                                     \
  |  |   84|  6.46M|                                                                                \
  |  |   85|  6.46M|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (85:8): [True: 357k, False: 6.11M]
  |  |  ------------------
  |  |   86|  6.46M|    {                                                                           \
  |  |   87|   357k|        u4_bin = 1 - u4_bin;                                                    \
  |  |   88|   357k|        u4_ofst -= u4_range;                                                    \
  |  |   89|   357k|        u4_range = u4_rlps;                                                     \
  |  |   90|   357k|    }                                                                           \
  |  |   91|  6.46M|                                                                                \
  |  |   92|  6.46M|    *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin];         \
  |  |   93|  6.46M|                                                                                \
  |  |   94|  6.46M|    /*****************************************************************/         \
  |  |   95|  6.46M|    /* Re-normalization; calculate bits generated based on range(R)  */         \
  |  |   96|  6.46M|    /*****************************************************************/         \
  |  |   97|  6.46M|    if(u4_range < (1 << 8))                                                     \
  |  |  ------------------
  |  |  |  Branch (97:8): [True: 54.8k, False: 6.41M]
  |  |  ------------------
  |  |   98|  6.46M|    {                                                                           \
  |  |   99|  54.8k|        UWORD32 u4_bits;                                                        \
  |  |  100|  54.8k|        WORD32 numbits;                                                         \
  |  |  101|  54.8k|        numbits = CLZ(u4_range);                                                \
  |  |  102|  54.8k|        numbits -= (32 - RANGE_NUMBITS);                                        \
  |  |  ------------------
  |  |  |  |   40|  54.8k|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |  103|  54.8k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|  54.8k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|  54.8k|{                                                               \
  |  |  |  |  152|  54.8k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|  54.8k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  54.8k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|  54.8k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|  54.8k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   109k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 38.8k, False: 16.0k]
  |  |  |  |  ------------------
  |  |  |  |  156|  54.8k|    {                                                           \
  |  |  |  |  157|  38.8k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  38.8k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 38.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|  38.8k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|  38.8k|    }                                                           \
  |  |  |  |  160|  54.8k|                                                                \
  |  |  |  |  161|  54.8k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   109k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 40.3k, False: 14.5k]
  |  |  |  |  ------------------
  |  |  |  |  162|  54.8k|    {                                                           \
  |  |  |  |  163|  40.3k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|  40.3k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|  40.3k|        /* Getting the next word */                             \
  |  |  |  |  166|  40.3k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|  40.3k|                                                                \
  |  |  |  |  168|  40.3k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  40.3k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|  40.3k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|  40.3k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  40.3k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|  40.3k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|  40.3k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|  40.3k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|  40.3k|    }                                                           \
  |  |  |  |  172|  54.8k|}
  |  |  ------------------
  |  |  104|  54.8k|                 ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);    \
  |  |  105|  54.8k|                                                                                \
  |  |  106|  54.8k|        u4_ofst <<= numbits;                                                    \
  |  |  107|  54.8k|        u4_ofst |= u4_bits;                                                     \
  |  |  108|  54.8k|        u4_range <<= numbits;                                                   \
  |  |  109|  54.8k|                                                                                \
  |  |  110|  54.8k|    }                                                                           \
  |  |  111|  6.46M|    /* Update the cabac context */                                              \
  |  |  112|  6.46M|    ps_cabac->u4_range = u4_range;                                              \
  |  |  113|  6.46M|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  114|  6.46M|                                                                                \
  |  |  115|  6.46M|}
  ------------------
  521|  25.8M|            AEV_TRACE("coded_sub_block_flag", cur_csbf, ps_cabac->u4_range);
  522|       |
  523|  25.8M|            infer_sig_coeff_flag = 1;
  524|  25.8M|        }
  525|  4.90M|        else /* if((i == last_sub_blk) || (sub_blk_pos == 0)) */
  526|  4.90M|        {
  527|       |            /* CSBF is set to 1 for first and last subblock */
  528|       |            /* Note for these subblocks sig_coeff_map is not inferred but instead parsed */
  529|  4.90M|            cur_csbf = 1;
  530|  4.90M|        }
  531|       |
  532|       |        /* Set current sub blocks CSBF */
  533|  11.3M|        {
  534|  11.3M|            UWORD32 u4_mask = 1 << xs;
  535|  11.3M|            if(cur_csbf)
  ------------------
  |  Branch (535:16): [True: 7.13M, False: 4.23M]
  ------------------
  536|  7.13M|                au2_csbf[ys] |= u4_mask;
  537|  4.23M|            else
  538|  4.23M|                au2_csbf[ys] &= ~u4_mask;
  539|       |
  540|  11.3M|        }
  541|       |
  542|       |        /* If current subblock is not coded, proceed to the next subblock */
  543|  11.3M|        if(0 == cur_csbf)
  ------------------
  |  Branch (543:12): [True: 4.23M, False: 7.13M]
  ------------------
  544|  4.23M|            continue;
  545|       |
  546|  7.13M|        n = 15;
  547|  7.13M|        u4_sig_coeff_map_raster = 0;
  548|  7.13M|        u4_sig_coeff_map = 0;
  549|  7.13M|        num_coeff = 0;
  550|  7.13M|        if(i == last_sub_blk)
  ------------------
  |  Branch (550:12): [True: 3.71M, False: 3.42M]
  ------------------
  551|  3.71M|        {
  552|  3.71M|            WORD32 pos = ((last_significant_coeff_y & 3) << 2) +
  553|  3.71M|                            (last_significant_coeff_x & 3);
  554|  3.71M|            n = (last_scan_pos - 1);
  555|       |            /* Set Significant coeff map for last significant coeff flag as 1 */
  556|  3.71M|            u4_sig_coeff_map_raster = 1 << pos;
  557|  3.71M|            u4_sig_coeff_map = 1 << last_scan_pos;
  558|  3.71M|            num_coeff = 1;
  559|  3.71M|        }
  560|       |
  561|  71.9M|        for(; n >= 0; n--)
  ------------------
  |  Branch (561:15): [True: 64.7M, False: 7.13M]
  ------------------
  562|  64.7M|        {
  563|  64.7M|            WORD32 significant_coeff_flag;
  564|       |
  565|  64.7M|            if((n > 0 || !infer_sig_coeff_flag))
  ------------------
  |  Branch (565:17): [True: 59.5M, False: 5.26M]
  |  Branch (565:26): [True: 4.57M, False: 690k]
  ------------------
  566|  64.0M|            {
  567|       |                //WORD32 coeff_pos;
  568|  64.0M|                WORD32 sig_ctxinc;
  569|  64.0M|                WORD32 ctxt_idx;
  570|       |
  571|       |                /* Coefficient position is needed for deriving context index for significant_coeff_flag */
  572|       |                //coeff_pos = pu1_scan_coeff[n];
  573|       |                /* derive the context inc as per section 9.3.3.1.4 */
  574|  64.0M|                sig_ctxinc = 0;
  575|  64.0M|                if(2 == log2_trafo_size)
  ------------------
  |  Branch (575:20): [True: 3.14M, False: 60.9M]
  ------------------
  576|  3.14M|                {
  577|       |
  578|       |                    /* 4x4 transform size increment uses lookup */
  579|  3.14M|                    sig_ctxinc = gau1_ihevcd_sigcoeff_ctxtinc_tr4[scan_idx][n];
  580|  3.14M|                }
  581|  60.9M|                else if(n || i)
  ------------------
  |  Branch (581:25): [True: 56.8M, False: 4.04M]
  |  Branch (581:30): [True: 2.13M, False: 1.91M]
  ------------------
  582|  59.0M|                {
  583|       |                    /* ctxt for AC coeff depends on curpos and neigbour csbf */
  584|  59.0M|                    sig_ctxinc = gau1_ihevcd_sigcoeff_ctxtinc[scan_idx][nbr_csbf][n];
  585|       |
  586|       |                    /* based on luma subblock pos */
  587|  59.0M|                    sig_ctxinc += (i && (!c_idx)) ? 3 : 0;
  ------------------
  |  Branch (587:36): [True: 38.6M, False: 20.3M]
  |  Branch (587:41): [True: 37.9M, False: 703k]
  ------------------
  588|       |
  589|  59.0M|                }
  590|  1.91M|                else
  591|  1.91M|                {
  592|       |                    /* DC coeff has fixed context for luma and chroma */
  593|  1.91M|                    sig_coeff_base_ctxt = (0 == c_idx) ? IHEVC_CAB_COEFF_FLAG :
  ------------------
  |  Branch (593:43): [True: 1.59M, False: 319k]
  ------------------
  594|  1.91M|                                                         (IHEVC_CAB_COEFF_FLAG + 27);
  595|  1.91M|                }
  596|       |
  597|  64.0M|                ctxt_idx = sig_ctxinc + sig_coeff_base_ctxt;
  598|  64.0M|                TRACE_CABAC_CTXT("significant_coeff_flag", ps_cabac->u4_range, ctxt_idx);
  599|   256M|                IHEVCD_CABAC_DECODE_BIN(significant_coeff_flag, ps_cabac,
  ------------------
  |  |   59|  64.0M|#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index)       \
  |  |   60|  64.0M|{                                                                               \
  |  |   61|  64.0M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |   62|  64.0M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |   63|  64.0M|    UWORD32 u4_rlps;                                                            \
  |  |   64|  64.0M|    UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index];            \
  |  |   65|  64.0M|    WORD32 state_mps = *pu1_ctxt_model;                                         \
  |  |   66|  64.0M|    WORD32 clz;                                                                 \
  |  |   67|  64.0M|    UWORD32 u4_qnt_range;                                                       \
  |  |   68|  64.0M|                                                                                \
  |  |   69|  64.0M|    /* Sanity checks */                                                         \
  |  |   70|  64.0M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  64.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   71|  64.0M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  64.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   72|  64.0M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));             \
  |  |  ------------------
  |  |  |  |   55|  64.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   73|  64.0M|    ASSERT(state_mps < 128);                                                    \
  |  |  ------------------
  |  |  |  |   55|  64.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   74|  64.0M|    clz = CLZ(u4_range);                                                        \
  |  |   75|  64.0M|    clz -= (32 - RANGE_NUMBITS);                                                \
  |  |  ------------------
  |  |  |  |   40|  64.0M|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |   76|  64.0M|    u4_qnt_range = u4_range << clz;                                             \
  |  |   77|  64.0M|    u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3;                   \
  |  |  ------------------
  |  |  |  |   41|  64.0M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  64.0M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  64.0M|    /* Get the lps range from LUT based on quantized range and state */         \
  |  |   79|  64.0M|    u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range];              \
  |  |   80|  64.0M|    u4_rlps = u4_rlps << (RANGE_SHIFT - clz);                                   \
  |  |  ------------------
  |  |  |  |   41|  64.0M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  64.0M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  64.0M|    u4_range -= u4_rlps;                                                        \
  |  |   82|  64.0M|                                                                                \
  |  |   83|  64.0M|    u4_bin = state_mps & 1;                                                     \
  |  |   84|  64.0M|                                                                                \
  |  |   85|  64.0M|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (85:8): [True: 5.61M, False: 58.4M]
  |  |  ------------------
  |  |   86|  64.0M|    {                                                                           \
  |  |   87|  5.61M|        u4_bin = 1 - u4_bin;                                                    \
  |  |   88|  5.61M|        u4_ofst -= u4_range;                                                    \
  |  |   89|  5.61M|        u4_range = u4_rlps;                                                     \
  |  |   90|  5.61M|    }                                                                           \
  |  |   91|  64.0M|                                                                                \
  |  |   92|  64.0M|    *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin];         \
  |  |   93|  64.0M|                                                                                \
  |  |   94|  64.0M|    /*****************************************************************/         \
  |  |   95|  64.0M|    /* Re-normalization; calculate bits generated based on range(R)  */         \
  |  |   96|  64.0M|    /*****************************************************************/         \
  |  |   97|  64.0M|    if(u4_range < (1 << 8))                                                     \
  |  |  ------------------
  |  |  |  Branch (97:8): [True: 797k, False: 63.2M]
  |  |  ------------------
  |  |   98|  64.0M|    {                                                                           \
  |  |   99|   797k|        UWORD32 u4_bits;                                                        \
  |  |  100|   797k|        WORD32 numbits;                                                         \
  |  |  101|   797k|        numbits = CLZ(u4_range);                                                \
  |  |  102|   797k|        numbits -= (32 - RANGE_NUMBITS);                                        \
  |  |  ------------------
  |  |  |  |   40|   797k|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |  103|   797k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|   797k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|   797k|{                                                               \
  |  |  |  |  152|   797k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|   797k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   797k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|   797k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|   797k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.59M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 566k, False: 231k]
  |  |  |  |  ------------------
  |  |  |  |  156|   797k|    {                                                           \
  |  |  |  |  157|   566k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   566k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 566k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|   566k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|   566k|    }                                                           \
  |  |  |  |  160|   797k|                                                                \
  |  |  |  |  161|   797k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.59M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 591k, False: 206k]
  |  |  |  |  ------------------
  |  |  |  |  162|   797k|    {                                                           \
  |  |  |  |  163|   591k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|   591k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|   591k|        /* Getting the next word */                             \
  |  |  |  |  166|   591k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|   591k|                                                                \
  |  |  |  |  168|   591k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   591k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|   591k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|   591k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   591k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   591k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   591k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   591k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|   591k|    }                                                           \
  |  |  |  |  172|   797k|}
  |  |  ------------------
  |  |  104|   797k|                 ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);    \
  |  |  105|   797k|                                                                                \
  |  |  106|   797k|        u4_ofst <<= numbits;                                                    \
  |  |  107|   797k|        u4_ofst |= u4_bits;                                                     \
  |  |  108|   797k|        u4_range <<= numbits;                                                   \
  |  |  109|   797k|                                                                                \
  |  |  110|   797k|    }                                                                           \
  |  |  111|  64.0M|    /* Update the cabac context */                                              \
  |  |  112|  64.0M|    ps_cabac->u4_range = u4_range;                                              \
  |  |  113|  64.0M|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  114|  64.0M|                                                                                \
  |  |  115|  64.0M|}
  ------------------
  600|   256M|                                        ps_bitstrm,
  601|   256M|                                        ctxt_idx);
  602|   256M|                AEV_TRACE("significant_coeff_flag", significant_coeff_flag, ps_cabac->u4_range);
  603|       |
  604|       |
  605|       |                /* If at least one non-zero coeff is signalled then do not infer sig coeff map */
  606|       |                /* for (0,0) coeff in the current sub block */
  607|   256M|                if(significant_coeff_flag)
  ------------------
  |  Branch (607:20): [True: 24.1M, False: 39.9M]
  ------------------
  608|  24.1M|                    infer_sig_coeff_flag = 0;
  609|       |
  610|       |//                u4_sig_coeff_map_raster |= significant_coeff_flag
  611|       |//                              << coeff_pos;
  612|   256M|                u4_sig_coeff_map |= significant_coeff_flag << n;
  613|   256M|                num_coeff += significant_coeff_flag;
  614|   256M|            }
  615|       |
  616|       |
  617|  64.7M|        }
  618|       |        /*********************************************************************/
  619|       |        /* If infer_sig_coeff_flag is 1 then treat the 0th coeff as non zero */
  620|       |        /* If infer_sig_coeff_flag is zero, then last significant_coeff_flag */
  621|       |        /* is parsed in the above loop                                       */
  622|       |        /*********************************************************************/
  623|  7.13M|        if(infer_sig_coeff_flag)
  ------------------
  |  Branch (623:12): [True: 690k, False: 6.44M]
  ------------------
  624|   690k|        {
  625|   690k|            u4_sig_coeff_map_raster |= 1;
  626|   690k|            u4_sig_coeff_map |= 1;
  627|   690k|            num_coeff++;
  628|   690k|        }
  629|       |
  630|       |        /*********************************************************************/
  631|       |        /* First subblock does not get an explicit csbf. It is assumed to    */
  632|       |        /* be 1. For this subblock there is chance of getting all            */
  633|       |        /* sig_coeff_flags to be zero. In such a case proceed to the next    */
  634|       |        /* subblock(which is end of parsing for the current transform block) */
  635|       |        /*********************************************************************/
  636|       |
  637|  7.13M|        if(0 == num_coeff)
  ------------------
  |  Branch (637:12): [True: 214k, False: 6.92M]
  ------------------
  638|   214k|            continue;
  639|       |
  640|       |        /* Increment number of coded subblocks for the current TU */
  641|  6.92M|        num_subblks++;
  642|       |
  643|       |        /* Set sig coeff map and subblock position */
  644|  6.92M|        ps_tu_sblk_coeff_data = (tu_sblk_coeff_data_t *)ps_codec->s_parse.pv_tu_coeff_data;
  645|  6.92M|        ps_tu_sblk_coeff_data->u2_sig_coeff_map = u4_sig_coeff_map;
  646|  6.92M|        ps_tu_sblk_coeff_data->u2_subblk_pos = (ys << 8) | xs;
  647|       |
  648|  6.92M|        first_sig_scan_pos = 16;
  649|  6.92M|        last_sig_scan_pos = -1;
  650|  6.92M|        num_greater1_flag = 0;
  651|  6.92M|        first_greater1_scan_pos = -1;
  652|  6.92M|        u4_coeff_abs_level_greater1_map = 0;
  653|       |
  654|       |
  655|       |        /* context set based on luma subblock pos */
  656|  6.92M|        ctxt_set = (i && (!c_idx)) ? 2 : 0;
  ------------------
  |  Branch (656:21): [True: 3.42M, False: 3.49M]
  |  Branch (656:26): [True: 3.31M, False: 106k]
  ------------------
  657|       |
  658|       |        /* See section 9.3.3.1.5           */
  659|  6.92M|        ctxt_set += (0 == gt1_ctxt) ? 1 : 0;
  ------------------
  |  Branch (659:21): [True: 956k, False: 5.96M]
  ------------------
  660|       |
  661|  6.92M|        gt1_ctxt = 1;
  662|       |        /* Instead of initializing n to 15, set it to 31-CLZ(sig coeff map) */
  663|  6.92M|        {
  664|  6.92M|            UWORD32 u4_sig_coeff_map_shift;
  665|  6.92M|            UWORD32 clz;
  666|  6.92M|            clz = CLZ(u4_sig_coeff_map);
  667|  6.92M|            n = 31 - clz;
  668|  6.92M|            u4_sig_coeff_map_shift = u4_sig_coeff_map << clz;
  669|       |            /* For loop for n changed to do while to break early if sig_coeff_map_shift becomes zero */
  670|  6.92M|            do
  671|  24.2M|            {
  672|       |                //WORD32 coeff_pos;
  673|  24.2M|                WORD32 ctxt_idx;
  674|       |
  675|       |                //TODO: Scan lookup will be removed later and instead u4_sig_coeff_map will be used
  676|       |                //coeff_pos = pu1_scan_coeff[n];
  677|       |
  678|  24.2M|                if((u4_sig_coeff_map_shift >> 31) & 1)
  ------------------
  |  Branch (678:20): [True: 24.2M, False: 0]
  ------------------
  679|  24.2M|                {
  680|       |
  681|       |                    /* abs_level_greater1_flag is sent for only first 8 non-zero levels in a subblock */
  682|  24.2M|                    if(num_greater1_flag < 8)
  ------------------
  |  Branch (682:24): [True: 23.0M, False: 1.20M]
  ------------------
  683|  23.0M|                    {
  684|  23.0M|                        WORD32 coeff_abs_level_greater1_flag;
  685|       |
  686|  23.0M|                        ctxt_idx = (ctxt_set * 4) + abs_gt1_base_ctxt + gt1_ctxt;
  687|       |
  688|  23.0M|                        TRACE_CABAC_CTXT("coeff_abs_level_greater1_flag", ps_cabac->u4_range, ctxt_idx);
  689|  92.1M|                        IHEVCD_CABAC_DECODE_BIN(coeff_abs_level_greater1_flag, ps_cabac, ps_bitstrm, ctxt_idx);
  ------------------
  |  |   59|  23.0M|#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index)       \
  |  |   60|  23.0M|{                                                                               \
  |  |   61|  23.0M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |   62|  23.0M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |   63|  23.0M|    UWORD32 u4_rlps;                                                            \
  |  |   64|  23.0M|    UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index];            \
  |  |   65|  23.0M|    WORD32 state_mps = *pu1_ctxt_model;                                         \
  |  |   66|  23.0M|    WORD32 clz;                                                                 \
  |  |   67|  23.0M|    UWORD32 u4_qnt_range;                                                       \
  |  |   68|  23.0M|                                                                                \
  |  |   69|  23.0M|    /* Sanity checks */                                                         \
  |  |   70|  23.0M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  23.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   71|  23.0M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  23.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   72|  23.0M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));             \
  |  |  ------------------
  |  |  |  |   55|  23.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   73|  23.0M|    ASSERT(state_mps < 128);                                                    \
  |  |  ------------------
  |  |  |  |   55|  23.0M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   74|  23.0M|    clz = CLZ(u4_range);                                                        \
  |  |   75|  23.0M|    clz -= (32 - RANGE_NUMBITS);                                                \
  |  |  ------------------
  |  |  |  |   40|  23.0M|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |   76|  23.0M|    u4_qnt_range = u4_range << clz;                                             \
  |  |   77|  23.0M|    u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3;                   \
  |  |  ------------------
  |  |  |  |   41|  23.0M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  23.0M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  23.0M|    /* Get the lps range from LUT based on quantized range and state */         \
  |  |   79|  23.0M|    u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range];              \
  |  |   80|  23.0M|    u4_rlps = u4_rlps << (RANGE_SHIFT - clz);                                   \
  |  |  ------------------
  |  |  |  |   41|  23.0M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  23.0M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  23.0M|    u4_range -= u4_rlps;                                                        \
  |  |   82|  23.0M|                                                                                \
  |  |   83|  23.0M|    u4_bin = state_mps & 1;                                                     \
  |  |   84|  23.0M|                                                                                \
  |  |   85|  23.0M|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (85:8): [True: 2.48M, False: 20.5M]
  |  |  ------------------
  |  |   86|  23.0M|    {                                                                           \
  |  |   87|  2.48M|        u4_bin = 1 - u4_bin;                                                    \
  |  |   88|  2.48M|        u4_ofst -= u4_range;                                                    \
  |  |   89|  2.48M|        u4_range = u4_rlps;                                                     \
  |  |   90|  2.48M|    }                                                                           \
  |  |   91|  23.0M|                                                                                \
  |  |   92|  23.0M|    *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin];         \
  |  |   93|  23.0M|                                                                                \
  |  |   94|  23.0M|    /*****************************************************************/         \
  |  |   95|  23.0M|    /* Re-normalization; calculate bits generated based on range(R)  */         \
  |  |   96|  23.0M|    /*****************************************************************/         \
  |  |   97|  23.0M|    if(u4_range < (1 << 8))                                                     \
  |  |  ------------------
  |  |  |  Branch (97:8): [True: 351k, False: 22.6M]
  |  |  ------------------
  |  |   98|  23.0M|    {                                                                           \
  |  |   99|   351k|        UWORD32 u4_bits;                                                        \
  |  |  100|   351k|        WORD32 numbits;                                                         \
  |  |  101|   351k|        numbits = CLZ(u4_range);                                                \
  |  |  102|   351k|        numbits -= (32 - RANGE_NUMBITS);                                        \
  |  |  ------------------
  |  |  |  |   40|   351k|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |  103|   351k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|   351k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|   351k|{                                                               \
  |  |  |  |  152|   351k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|   351k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   351k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|   351k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|   351k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   703k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 245k, False: 106k]
  |  |  |  |  ------------------
  |  |  |  |  156|   351k|    {                                                           \
  |  |  |  |  157|   245k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   245k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 245k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|   245k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|   245k|    }                                                           \
  |  |  |  |  160|   351k|                                                                \
  |  |  |  |  161|   351k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   703k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 258k, False: 93.1k]
  |  |  |  |  ------------------
  |  |  |  |  162|   351k|    {                                                           \
  |  |  |  |  163|   258k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|   258k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|   258k|        /* Getting the next word */                             \
  |  |  |  |  166|   258k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|   258k|                                                                \
  |  |  |  |  168|   258k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   258k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|   258k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|   258k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   258k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   258k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   258k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   258k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|   258k|    }                                                           \
  |  |  |  |  172|   351k|}
  |  |  ------------------
  |  |  104|   351k|                 ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);    \
  |  |  105|   351k|                                                                                \
  |  |  106|   351k|        u4_ofst <<= numbits;                                                    \
  |  |  107|   351k|        u4_ofst |= u4_bits;                                                     \
  |  |  108|   351k|        u4_range <<= numbits;                                                   \
  |  |  109|   351k|                                                                                \
  |  |  110|   351k|    }                                                                           \
  |  |  111|  23.0M|    /* Update the cabac context */                                              \
  |  |  112|  23.0M|    ps_cabac->u4_range = u4_range;                                              \
  |  |  113|  23.0M|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  114|  23.0M|                                                                                \
  |  |  115|  23.0M|}
  ------------------
  690|  92.1M|                        AEV_TRACE("coeff_abs_level_greater1_flag", coeff_abs_level_greater1_flag, ps_cabac->u4_range);
  691|       |
  692|  92.1M|                        u4_coeff_abs_level_greater1_map |= coeff_abs_level_greater1_flag << n;
  693|  92.1M|                        num_greater1_flag++;
  694|       |
  695|       |                        /* first_greater1_scan_pos is obtained using CLZ on u4_coeff_abs_level_greater1_map*/
  696|       |                        /*  outside the loop instead of the following check inside the loop                */
  697|       |                        /* if( coeff_abs_level_greater1_flag && first_greater1_scan_pos == -1) */
  698|       |                        /*    first_greater1_scan_pos = n;                                     */
  699|       |
  700|  92.1M|                        if(coeff_abs_level_greater1_flag)
  ------------------
  |  Branch (700:28): [True: 5.13M, False: 17.9M]
  ------------------
  701|  5.13M|                        {
  702|  5.13M|                            gt1_ctxt = 0;
  703|  5.13M|                        }
  704|  17.9M|                        else if(gt1_ctxt && (gt1_ctxt < 3))
  ------------------
  |  Branch (704:33): [True: 14.8M, False: 3.07M]
  |  Branch (704:45): [True: 8.69M, False: 6.13M]
  ------------------
  705|  8.69M|                        {
  706|  8.69M|                            gt1_ctxt++;
  707|  8.69M|                        }
  708|       |
  709|  92.1M|                    }
  710|  1.20M|                    else
  711|  1.20M|                        break;
  712|       |
  713|       |                    /* instead of computing last and first significan scan position using checks below */
  714|       |                    /* They are computed outside the loop using CLZ and CTZ on sig_coeff_map */
  715|       |                    /* if(last_sig_scan_pos == -1)                          */
  716|       |                    /*    last_sig_scan_pos = n;                            */
  717|       |                    /*  first_sig_scan_pos = n;                             */
  718|  24.2M|                }
  719|  23.0M|                u4_sig_coeff_map_shift <<= 1;
  720|  23.0M|                n--;
  721|       |                /* If there are zero coeffs, then shift by as many zero coeffs and decrement n */
  722|  23.0M|                clz = CLZ(u4_sig_coeff_map_shift);
  723|  23.0M|                u4_sig_coeff_map_shift <<= clz;
  724|  23.0M|                n -= (WORD32)clz;
  725|  23.0M|            }while(u4_sig_coeff_map_shift);
  ------------------
  |  Branch (725:20): [True: 17.3M, False: 5.71M]
  ------------------
  726|  6.92M|        }
  727|       |        /* At this level u4_sig_coeff_map is non-zero i.e. has atleast one non-zero coeff */
  728|  6.92M|        last_sig_scan_pos = (31 - CLZ(u4_sig_coeff_map));
  729|  6.92M|        first_sig_scan_pos = CTZ(u4_sig_coeff_map);
  730|  6.92M|        sign_hidden = (((last_sig_scan_pos - first_sig_scan_pos) > 3) && !ps_codec->s_parse.s_cu.i4_cu_transquant_bypass);
  ------------------
  |  Branch (730:24): [True: 3.04M, False: 3.87M]
  |  Branch (730:74): [True: 2.97M, False: 67.7k]
  ------------------
  731|       |
  732|  6.92M|        u4_coeff_abs_level_greater2_map = 0;
  733|       |
  734|  6.92M|        if(u4_coeff_abs_level_greater1_map)
  ------------------
  |  Branch (734:12): [True: 2.20M, False: 4.71M]
  ------------------
  735|  2.20M|        {
  736|       |            /* Check if the first level > 1 is greater than 2 */
  737|  2.20M|            WORD32 ctxt_idx;
  738|  2.20M|            first_greater1_scan_pos = (31 - CLZ(u4_coeff_abs_level_greater1_map));
  739|       |
  740|       |
  741|  2.20M|            ctxt_idx = IHEVC_CAB_COEFABS_GRTR2_FLAG;
  742|       |
  743|  2.20M|            ctxt_idx += (!c_idx) ? ctxt_set : (ctxt_set + 4);
  ------------------
  |  Branch (743:25): [True: 1.71M, False: 488k]
  ------------------
  744|  2.20M|            TRACE_CABAC_CTXT("coeff_abs_level_greater2_flag", ps_cabac->u4_range, ctxt_idx);
  745|  8.82M|            IHEVCD_CABAC_DECODE_BIN(coeff_abs_level_greater2_flag, ps_cabac, ps_bitstrm, ctxt_idx);
  ------------------
  |  |   59|  2.20M|#define IHEVCD_CABAC_DECODE_BIN(u4_bin, ps_cabac, ps_bitstrm, ctxt_index)       \
  |  |   60|  2.20M|{                                                                               \
  |  |   61|  2.20M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |   62|  2.20M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |   63|  2.20M|    UWORD32 u4_rlps;                                                            \
  |  |   64|  2.20M|    UWORD8 *pu1_ctxt_model = &ps_cabac->au1_ctxt_models[ctxt_index];            \
  |  |   65|  2.20M|    WORD32 state_mps = *pu1_ctxt_model;                                         \
  |  |   66|  2.20M|    WORD32 clz;                                                                 \
  |  |   67|  2.20M|    UWORD32 u4_qnt_range;                                                       \
  |  |   68|  2.20M|                                                                                \
  |  |   69|  2.20M|    /* Sanity checks */                                                         \
  |  |   70|  2.20M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  2.20M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   71|  2.20M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  2.20M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   72|  2.20M|    ASSERT((ctxt_index >= 0) && (ctxt_index < IHEVC_CAB_CTXT_END));             \
  |  |  ------------------
  |  |  |  |   55|  2.20M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   73|  2.20M|    ASSERT(state_mps < 128);                                                    \
  |  |  ------------------
  |  |  |  |   55|  2.20M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |   74|  2.20M|    clz = CLZ(u4_range);                                                        \
  |  |   75|  2.20M|    clz -= (32 - RANGE_NUMBITS);                                                \
  |  |  ------------------
  |  |  |  |   40|  2.20M|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |   76|  2.20M|    u4_qnt_range = u4_range << clz;                                             \
  |  |   77|  2.20M|    u4_qnt_range = (u4_qnt_range >> (RANGE_SHIFT + 6)) & 0x3;                   \
  |  |  ------------------
  |  |  |  |   41|  2.20M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  2.20M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  2.20M|    /* Get the lps range from LUT based on quantized range and state */         \
  |  |   79|  2.20M|    u4_rlps = gau1_ihevc_cabac_rlps[state_mps >> 1][u4_qnt_range];              \
  |  |   80|  2.20M|    u4_rlps = u4_rlps << (RANGE_SHIFT - clz);                                   \
  |  |  ------------------
  |  |  |  |   41|  2.20M|#define RANGE_SHIFT  (RANGE_NUMBITS - 9)
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  2.20M|#define RANGE_NUMBITS 31
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  2.20M|    u4_range -= u4_rlps;                                                        \
  |  |   82|  2.20M|                                                                                \
  |  |   83|  2.20M|    u4_bin = state_mps & 1;                                                     \
  |  |   84|  2.20M|                                                                                \
  |  |   85|  2.20M|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (85:8): [True: 386k, False: 1.81M]
  |  |  ------------------
  |  |   86|  2.20M|    {                                                                           \
  |  |   87|   386k|        u4_bin = 1 - u4_bin;                                                    \
  |  |   88|   386k|        u4_ofst -= u4_range;                                                    \
  |  |   89|   386k|        u4_range = u4_rlps;                                                     \
  |  |   90|   386k|    }                                                                           \
  |  |   91|  2.20M|                                                                                \
  |  |   92|  2.20M|    *pu1_ctxt_model = gau1_ihevc_next_state[(state_mps << 1) | u4_bin];         \
  |  |   93|  2.20M|                                                                                \
  |  |   94|  2.20M|    /*****************************************************************/         \
  |  |   95|  2.20M|    /* Re-normalization; calculate bits generated based on range(R)  */         \
  |  |   96|  2.20M|    /*****************************************************************/         \
  |  |   97|  2.20M|    if(u4_range < (1 << 8))                                                     \
  |  |  ------------------
  |  |  |  Branch (97:8): [True: 53.8k, False: 2.15M]
  |  |  ------------------
  |  |   98|  2.20M|    {                                                                           \
  |  |   99|  53.8k|        UWORD32 u4_bits;                                                        \
  |  |  100|  53.8k|        WORD32 numbits;                                                         \
  |  |  101|  53.8k|        numbits = CLZ(u4_range);                                                \
  |  |  102|  53.8k|        numbits -= (32 - RANGE_NUMBITS);                                        \
  |  |  ------------------
  |  |  |  |   40|  53.8k|#define RANGE_NUMBITS 31
  |  |  ------------------
  |  |  103|  53.8k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|  53.8k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|  53.8k|{                                                               \
  |  |  |  |  152|  53.8k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|  53.8k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  53.8k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|  53.8k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|  53.8k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   107k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 36.1k, False: 17.6k]
  |  |  |  |  ------------------
  |  |  |  |  156|  53.8k|    {                                                           \
  |  |  |  |  157|  36.1k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  36.1k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 36.1k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|  36.1k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|  36.1k|    }                                                           \
  |  |  |  |  160|  53.8k|                                                                \
  |  |  |  |  161|  53.8k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   107k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 38.4k, False: 15.4k]
  |  |  |  |  ------------------
  |  |  |  |  162|  53.8k|    {                                                           \
  |  |  |  |  163|  38.4k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|  38.4k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|  38.4k|        /* Getting the next word */                             \
  |  |  |  |  166|  38.4k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|  38.4k|                                                                \
  |  |  |  |  168|  38.4k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  38.4k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|  38.4k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|  38.4k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  38.4k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|  38.4k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|  38.4k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|  38.4k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|  38.4k|    }                                                           \
  |  |  |  |  172|  53.8k|}
  |  |  ------------------
  |  |  104|  53.8k|                 ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbits);    \
  |  |  105|  53.8k|                                                                                \
  |  |  106|  53.8k|        u4_ofst <<= numbits;                                                    \
  |  |  107|  53.8k|        u4_ofst |= u4_bits;                                                     \
  |  |  108|  53.8k|        u4_range <<= numbits;                                                   \
  |  |  109|  53.8k|                                                                                \
  |  |  110|  53.8k|    }                                                                           \
  |  |  111|  2.20M|    /* Update the cabac context */                                              \
  |  |  112|  2.20M|    ps_cabac->u4_range = u4_range;                                              \
  |  |  113|  2.20M|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  114|  2.20M|                                                                                \
  |  |  115|  2.20M|}
  ------------------
  746|  8.82M|            AEV_TRACE("coeff_abs_level_greater2_flag", coeff_abs_level_greater2_flag, ps_cabac->u4_range);
  747|  8.82M|            u4_coeff_abs_level_greater2_map = coeff_abs_level_greater2_flag << first_greater1_scan_pos;
  748|  8.82M|        }
  749|       |
  750|       |
  751|  6.92M|        u4_coeff_sign_map = 0;
  752|       |
  753|       |        /* Parse sign flags */
  754|  6.92M|        if(!sign_data_hiding_flag || !sign_hidden)
  ------------------
  |  Branch (754:12): [True: 5.67M, False: 1.24M]
  |  Branch (754:38): [True: 710k, False: 535k]
  ------------------
  755|  6.38M|        {
  756|  25.5M|            IHEVCD_CABAC_DECODE_BYPASS_BINS(value, ps_cabac, ps_bitstrm, num_coeff);
  ------------------
  |  |  156|  6.38M|#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \
  |  |  157|  6.38M|{                                                                               \
  |  |  158|  6.38M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  159|  6.38M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  160|  6.38M|    UWORD32 u4_bits;                                                            \
  |  |  161|  6.38M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  6.38M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  162|  6.38M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  6.38M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  163|  6.38M|    ASSERT(numbins > 0);                                                        \
  |  |  ------------------
  |  |  |  |   55|  6.38M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  164|  6.38M|    {                                                                           \
  |  |  165|  6.38M|        WORD32 numbins_tmp = numbins;                                           \
  |  |  166|  6.38M|        /* Sanity checks */                                                     \
  |  |  167|  6.38M|        ASSERT(numbins < 17);                                                   \
  |  |  ------------------
  |  |  |  |   55|  6.38M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  168|  6.38M|                                                                                \
  |  |  169|  6.38M|        u4_bins = 0;                                                            \
  |  |  170|  6.38M|                                                                                \
  |  |  171|  6.38M|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|  6.38M|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|  6.38M|{                                                               \
  |  |  |  |  152|  6.38M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|  6.38M|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  6.38M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|  6.38M|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|  6.38M|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  12.7M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 572k, False: 5.81M]
  |  |  |  |  ------------------
  |  |  |  |  156|  6.38M|    {                                                           \
  |  |  |  |  157|   572k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   572k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 572k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|   572k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|   572k|    }                                                           \
  |  |  |  |  160|  6.38M|                                                                \
  |  |  |  |  161|  6.38M|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  12.7M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 773k, False: 5.61M]
  |  |  |  |  ------------------
  |  |  |  |  162|  6.38M|    {                                                           \
  |  |  |  |  163|   773k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|   773k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|   773k|        /* Getting the next word */                             \
  |  |  |  |  166|   773k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|   773k|                                                                \
  |  |  |  |  168|   773k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   773k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|   773k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|   773k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   773k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   773k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   773k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   773k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|   773k|    }                                                           \
  |  |  |  |  172|  6.38M|}
  |  |  ------------------
  |  |  172|  6.38M|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins); \
  |  |  173|  6.38M|        do                                                                      \
  |  |  174|  24.8M|        {                                                                       \
  |  |  175|  24.8M|            UWORD32 u4_bit;                                                     \
  |  |  176|  24.8M|            numbins_tmp--;                                                      \
  |  |  177|  24.8M|            u4_bit = (u4_bits >> numbins_tmp) & 1;                              \
  |  |  178|  24.8M|            u4_ofst <<= 1;                                                      \
  |  |  179|  24.8M|            u4_ofst |= u4_bit;                                                  \
  |  |  180|  24.8M|                                                                                \
  |  |  181|  24.8M|            u4_bins <<= 1;                                                      \
  |  |  182|  24.8M|            if(u4_ofst >= u4_range)                                             \
  |  |  ------------------
  |  |  |  Branch (182:16): [True: 8.55M, False: 16.2M]
  |  |  ------------------
  |  |  183|  24.8M|            {                                                                   \
  |  |  184|  8.55M|                u4_bins += 1;                                                   \
  |  |  185|  8.55M|                u4_ofst -= u4_range;                                            \
  |  |  186|  8.55M|            }                                                                   \
  |  |  187|  24.8M|        }while(numbins_tmp);                                                    \
  |  |  ------------------
  |  |  |  Branch (187:16): [True: 18.4M, False: 6.38M]
  |  |  ------------------
  |  |  188|  6.38M|                                                                                \
  |  |  189|  6.38M|        /* Update the cabac context */                                          \
  |  |  190|  6.38M|        ps_cabac->u4_ofst = u4_ofst;                                            \
  |  |  191|  6.38M|    }                                                                           \
  |  |  192|  6.38M|}
  ------------------
  757|  25.5M|            AEV_TRACE("sign_flags", value, ps_cabac->u4_range);
  758|  25.5M|            u4_coeff_sign_map = value << (32 - num_coeff);
  759|  25.5M|        }
  760|   535k|        else
  761|   535k|        {
  762|  2.14M|            IHEVCD_CABAC_DECODE_BYPASS_BINS(value, ps_cabac, ps_bitstrm, (num_coeff - 1));
  ------------------
  |  |  156|   535k|#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \
  |  |  157|   535k|{                                                                               \
  |  |  158|   535k|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  159|   535k|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  160|   535k|    UWORD32 u4_bits;                                                            \
  |  |  161|   535k|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|   535k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  162|   535k|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|   535k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  163|   535k|    ASSERT(numbins > 0);                                                        \
  |  |  ------------------
  |  |  |  |   55|   535k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  164|   535k|    {                                                                           \
  |  |  165|   535k|        WORD32 numbins_tmp = numbins;                                           \
  |  |  166|   535k|        /* Sanity checks */                                                     \
  |  |  167|   535k|        ASSERT(numbins < 17);                                                   \
  |  |  ------------------
  |  |  |  |   55|   535k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  168|   535k|                                                                                \
  |  |  169|   535k|        u4_bins = 0;                                                            \
  |  |  170|   535k|                                                                                \
  |  |  171|   535k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|   535k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|   535k|{                                                               \
  |  |  |  |  152|   535k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|   535k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   535k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|   535k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|   535k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.07M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 83.3k, False: 452k]
  |  |  |  |  ------------------
  |  |  |  |  156|   535k|    {                                                           \
  |  |  |  |  157|  83.3k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  83.3k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 83.3k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|  83.3k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|  83.3k|    }                                                           \
  |  |  |  |  160|   535k|                                                                \
  |  |  |  |  161|   535k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.07M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 100k, False: 435k]
  |  |  |  |  ------------------
  |  |  |  |  162|   535k|    {                                                           \
  |  |  |  |  163|   100k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|   100k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|   100k|        /* Getting the next word */                             \
  |  |  |  |  166|   100k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|   100k|                                                                \
  |  |  |  |  168|   100k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   100k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|   100k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|   100k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   100k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   100k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   100k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   100k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|   100k|    }                                                           \
  |  |  |  |  172|   535k|}
  |  |  ------------------
  |  |  172|   535k|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins); \
  |  |  173|   535k|        do                                                                      \
  |  |  174|  3.22M|        {                                                                       \
  |  |  175|  3.22M|            UWORD32 u4_bit;                                                     \
  |  |  176|  3.22M|            numbins_tmp--;                                                      \
  |  |  177|  3.22M|            u4_bit = (u4_bits >> numbins_tmp) & 1;                              \
  |  |  178|  3.22M|            u4_ofst <<= 1;                                                      \
  |  |  179|  3.22M|            u4_ofst |= u4_bit;                                                  \
  |  |  180|  3.22M|                                                                                \
  |  |  181|  3.22M|            u4_bins <<= 1;                                                      \
  |  |  182|  3.22M|            if(u4_ofst >= u4_range)                                             \
  |  |  ------------------
  |  |  |  Branch (182:16): [True: 1.05M, False: 2.16M]
  |  |  ------------------
  |  |  183|  3.22M|            {                                                                   \
  |  |  184|  1.05M|                u4_bins += 1;                                                   \
  |  |  185|  1.05M|                u4_ofst -= u4_range;                                            \
  |  |  186|  1.05M|            }                                                                   \
  |  |  187|  3.22M|        }while(numbins_tmp);                                                    \
  |  |  ------------------
  |  |  |  Branch (187:16): [True: 2.68M, False: 535k]
  |  |  ------------------
  |  |  188|   535k|                                                                                \
  |  |  189|   535k|        /* Update the cabac context */                                          \
  |  |  190|   535k|        ps_cabac->u4_ofst = u4_ofst;                                            \
  |  |  191|   535k|    }                                                                           \
  |  |  192|   535k|}
  ------------------
  763|  2.14M|            AEV_TRACE("sign_flags", value, ps_cabac->u4_range);
  764|  2.14M|            u4_coeff_sign_map = value << (32 - (num_coeff - 1));
  765|  2.14M|        }
  766|       |
  767|  6.92M|        num_sig_coeff = 0;
  768|  6.92M|        sum_abs_level = 0;
  769|  6.92M|        rice_param = 0;
  770|  6.92M|        {
  771|  6.92M|            UWORD32 clz;
  772|  6.92M|            UWORD32 u4_sig_coeff_map_shift;
  773|  6.92M|            clz = CLZ(u4_sig_coeff_map);
  774|  6.92M|            n = 31 - clz;
  775|  6.92M|            u4_sig_coeff_map_shift = u4_sig_coeff_map << clz;
  776|       |            /* For loop for n changed to do while to break early if sig_coeff_map_shift becomes zero */
  777|  6.92M|            do
  778|  28.5M|            {
  779|       |
  780|  28.5M|                if((u4_sig_coeff_map_shift >> 31) & 1)
  ------------------
  |  Branch (780:20): [True: 28.5M, False: 0]
  ------------------
  781|  28.5M|                {
  782|  28.5M|                    WORD32 base_lvl;
  783|  28.5M|                    WORD32 coeff_abs_level_remaining;
  784|  28.5M|                    WORD32 level;
  785|  28.5M|                    base_lvl = 1;
  786|       |
  787|       |                    /* Update base_lvl if it is greater than 1 */
  788|  28.5M|                    if((u4_coeff_abs_level_greater1_map >> n) & 1)
  ------------------
  |  Branch (788:24): [True: 5.13M, False: 23.4M]
  ------------------
  789|  5.13M|                        base_lvl++;
  790|       |
  791|       |                    /* Update base_lvl if it is greater than 2 */
  792|  28.5M|                    if((u4_coeff_abs_level_greater2_map >> n) & 1)
  ------------------
  |  Branch (792:24): [True: 596k, False: 27.9M]
  ------------------
  793|   596k|                        base_lvl++;
  794|       |
  795|       |                    /* If level is greater than 3/2/1 based on the greater1 and greater2 maps,
  796|       |                     * decode remaining level (level - base_lvl) will be signalled as bypass bins
  797|       |                     */
  798|  28.5M|                    coeff_abs_level_remaining = 0;
  799|  28.5M|                    if(base_lvl == ((num_sig_coeff < 8) ? ((n == first_greater1_scan_pos) ? 3 : 2) : 1))
  ------------------
  |  Branch (799:24): [True: 9.05M, False: 19.5M]
  |  Branch (799:37): [True: 23.0M, False: 5.52M]
  |  Branch (799:60): [True: 2.20M, False: 20.8M]
  ------------------
  800|  9.05M|                    {
  801|  9.05M|                        UWORD32 u4_prefix;
  802|  9.05M|                        WORD32 bin;
  803|       |
  804|  9.05M|                        u4_prefix = 0;
  805|       |
  806|  9.05M|                        do
  807|  15.6M|                        {
  808|  31.3M|                            IHEVCD_CABAC_DECODE_BYPASS_BIN(bin, ps_cabac, ps_bitstrm);
  ------------------
  |  |  122|  15.6M|#define IHEVCD_CABAC_DECODE_BYPASS_BIN(u4_bin, ps_cabac, ps_bitstrm)            \
  |  |  123|  15.6M|{                                                                               \
  |  |  124|  15.6M|                                                                                \
  |  |  125|  15.6M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  126|  15.6M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  127|  15.6M|    UWORD32 u4_bits;                                                            \
  |  |  128|  15.6M|                                                                                \
  |  |  129|  15.6M|    /* Sanity checks */                                                         \
  |  |  130|  15.6M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  15.6M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  131|  15.6M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  15.6M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  132|  15.6M|                                                                                \
  |  |  133|  15.6M|    BIT_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,              \
  |  |  ------------------
  |  |  |  |  182|  15.6M|                          m_u4_cur_word,m_u4_nxt_word)          \
  |  |  |  |  183|  15.6M|{                                                               \
  |  |  |  |  184|  15.6M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  185|  15.6M|                             >> (WORD_SIZE_MINUS1);             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   51|  15.6M|#define WORD_SIZE_MINUS1  (WORD_SIZE - 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   42|  15.6M|#define WORD_SIZE         32
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  186|  15.6M|    m_u4_bit_ofst++;                                            \
  |  |  |  |  187|  15.6M|                                                                \
  |  |  |  |  188|  15.6M|    if(m_u4_bit_ofst ==  WORD_SIZE)                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  31.3M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (188:8): [True: 488k, False: 15.1M]
  |  |  |  |  ------------------
  |  |  |  |  189|  15.6M|    {                                                           \
  |  |  |  |  190|   488k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  191|   488k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  192|   488k|        /* Getting the next word */                             \
  |  |  |  |  193|   488k|        pu4_word_tmp = *m_pu4_buf++;                            \
  |  |  |  |  194|   488k|                                                                \
  |  |  |  |  195|   488k|        m_u4_bit_ofst = 0;                                      \
  |  |  |  |  196|   488k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  197|   488k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   488k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   488k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   488k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   488k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  198|   488k|    }                                                           \
  |  |  |  |  199|  15.6M|}
  |  |  ------------------
  |  |  134|  15.6M|            ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word);                  \
  |  |  135|  15.6M|                                                                                \
  |  |  136|  15.6M|    u4_ofst <<= 1;                                                              \
  |  |  137|  15.6M|    u4_ofst |= u4_bits;                                                         \
  |  |  138|  15.6M|                                                                                \
  |  |  139|  15.6M|    u4_bin = 0;                                                                 \
  |  |  140|  15.6M|    if(u4_ofst >= u4_range)                                                     \
  |  |  ------------------
  |  |  |  Branch (140:8): [True: 6.62M, False: 9.04M]
  |  |  ------------------
  |  |  141|  15.6M|    {                                                                           \
  |  |  142|  6.62M|        u4_bin = 1;                                                             \
  |  |  143|  6.62M|        u4_ofst -= u4_range;                                                    \
  |  |  144|  6.62M|    }                                                                           \
  |  |  145|  15.6M|                                                                                \
  |  |  146|  15.6M|    /* Update the cabac context */                                              \
  |  |  147|  15.6M|    ps_cabac->u4_ofst = u4_ofst;                                                \
  |  |  148|  15.6M|}
  ------------------
  809|  31.3M|                            u4_prefix++;
  810|       |
  811|  31.3M|                            if((WORD32)u4_prefix == 19 - rice_param)
  ------------------
  |  Branch (811:32): [True: 6.45k, False: 15.6M]
  ------------------
  812|  6.45k|                            {
  813|  6.45k|                                bin = 1;
  814|  6.45k|                                break;
  815|  6.45k|                            }
  816|       |
  817|  31.3M|                        }while(bin);
  ------------------
  |  Branch (817:32): [True: 6.61M, False: 9.04M]
  ------------------
  818|       |
  819|  9.05M|                        u4_prefix = u4_prefix - 1;
  820|  9.05M|                        if(u4_prefix < 3)
  ------------------
  |  Branch (820:28): [True: 8.24M, False: 813k]
  ------------------
  821|  8.24M|                        {
  822|  8.24M|                            UWORD32 u4_suffix;
  823|       |
  824|  8.24M|                            coeff_abs_level_remaining = (u4_prefix << rice_param);
  825|  8.24M|                            if(rice_param)
  ------------------
  |  Branch (825:32): [True: 2.43M, False: 5.80M]
  ------------------
  826|  2.43M|                            {
  827|  9.73M|                                IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_suffix, ps_cabac, ps_bitstrm, rice_param);
  ------------------
  |  |  156|  2.43M|#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \
  |  |  157|  2.43M|{                                                                               \
  |  |  158|  2.43M|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  159|  2.43M|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  160|  2.43M|    UWORD32 u4_bits;                                                            \
  |  |  161|  2.43M|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|  2.43M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  162|  2.43M|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|  2.43M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  163|  2.43M|    ASSERT(numbins > 0);                                                        \
  |  |  ------------------
  |  |  |  |   55|  2.43M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  164|  2.43M|    {                                                                           \
  |  |  165|  2.43M|        WORD32 numbins_tmp = numbins;                                           \
  |  |  166|  2.43M|        /* Sanity checks */                                                     \
  |  |  167|  2.43M|        ASSERT(numbins < 17);                                                   \
  |  |  ------------------
  |  |  |  |   55|  2.43M|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  168|  2.43M|                                                                                \
  |  |  169|  2.43M|        u4_bins = 0;                                                            \
  |  |  170|  2.43M|                                                                                \
  |  |  171|  2.43M|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|  2.43M|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|  2.43M|{                                                               \
  |  |  |  |  152|  2.43M|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|  2.43M|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  2.43M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|  2.43M|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|  2.43M|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  4.86M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 31.2k, False: 2.40M]
  |  |  |  |  ------------------
  |  |  |  |  156|  2.43M|    {                                                           \
  |  |  |  |  157|  31.2k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  31.2k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 31.2k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|  31.2k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|  31.2k|    }                                                           \
  |  |  |  |  160|  2.43M|                                                                \
  |  |  |  |  161|  2.43M|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  4.86M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 107k, False: 2.32M]
  |  |  |  |  ------------------
  |  |  |  |  162|  2.43M|    {                                                           \
  |  |  |  |  163|   107k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|   107k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|   107k|        /* Getting the next word */                             \
  |  |  |  |  166|   107k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|   107k|                                                                \
  |  |  |  |  168|   107k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   107k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|   107k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|   107k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|   107k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|   107k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|   107k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|   107k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|   107k|    }                                                           \
  |  |  |  |  172|  2.43M|}
  |  |  ------------------
  |  |  172|  2.43M|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins); \
  |  |  173|  2.43M|        do                                                                      \
  |  |  174|  3.43M|        {                                                                       \
  |  |  175|  3.43M|            UWORD32 u4_bit;                                                     \
  |  |  176|  3.43M|            numbins_tmp--;                                                      \
  |  |  177|  3.43M|            u4_bit = (u4_bits >> numbins_tmp) & 1;                              \
  |  |  178|  3.43M|            u4_ofst <<= 1;                                                      \
  |  |  179|  3.43M|            u4_ofst |= u4_bit;                                                  \
  |  |  180|  3.43M|                                                                                \
  |  |  181|  3.43M|            u4_bins <<= 1;                                                      \
  |  |  182|  3.43M|            if(u4_ofst >= u4_range)                                             \
  |  |  ------------------
  |  |  |  Branch (182:16): [True: 1.71M, False: 1.72M]
  |  |  ------------------
  |  |  183|  3.43M|            {                                                                   \
  |  |  184|  1.71M|                u4_bins += 1;                                                   \
  |  |  185|  1.71M|                u4_ofst -= u4_range;                                            \
  |  |  186|  1.71M|            }                                                                   \
  |  |  187|  3.43M|        }while(numbins_tmp);                                                    \
  |  |  ------------------
  |  |  |  Branch (187:16): [True: 1.00M, False: 2.43M]
  |  |  ------------------
  |  |  188|  2.43M|                                                                                \
  |  |  189|  2.43M|        /* Update the cabac context */                                          \
  |  |  190|  2.43M|        ps_cabac->u4_ofst = u4_ofst;                                            \
  |  |  191|  2.43M|    }                                                                           \
  |  |  192|  2.43M|}
  ------------------
  828|       |
  829|  9.73M|                                coeff_abs_level_remaining |= u4_suffix;
  830|  9.73M|                            }
  831|  8.24M|                        }
  832|   813k|                        else
  833|   813k|                        {
  834|   813k|                            UWORD32 u4_suffix;
  835|   813k|                            UWORD32 u4_numbins;
  836|       |
  837|       |                            //u4_prefix = CLIP3(u4_prefix, 0, 19 - rice_param);
  838|       |
  839|   813k|                            u4_numbins = (u4_prefix - 3 + rice_param);
  840|   813k|                            coeff_abs_level_remaining = (((1 << (u4_prefix - 3)) + 3 - 1) << rice_param);
  841|   813k|                            if(u4_numbins)
  ------------------
  |  Branch (841:32): [True: 577k, False: 235k]
  ------------------
  842|   577k|                            {
  843|  2.31M|                                IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_suffix, ps_cabac, ps_bitstrm, u4_numbins);
  ------------------
  |  |  156|   577k|#define IHEVCD_CABAC_DECODE_BYPASS_BINS(u4_bins, ps_cabac, ps_bitstrm, numbins) \
  |  |  157|   577k|{                                                                               \
  |  |  158|   577k|    UWORD32 u4_range = ps_cabac->u4_range;                                      \
  |  |  159|   577k|    UWORD32 u4_ofst = ps_cabac->u4_ofst;                                        \
  |  |  160|   577k|    UWORD32 u4_bits;                                                            \
  |  |  161|   577k|    ASSERT(FULLRANGE == 1);                                                     \
  |  |  ------------------
  |  |  |  |   55|   577k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  162|   577k|    ASSERT(u4_range >= 256);                                                    \
  |  |  ------------------
  |  |  |  |   55|   577k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  163|   577k|    ASSERT(numbins > 0);                                                        \
  |  |  ------------------
  |  |  |  |   55|   577k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  164|   577k|    {                                                                           \
  |  |  165|   577k|        WORD32 numbins_tmp = numbins;                                           \
  |  |  166|   577k|        /* Sanity checks */                                                     \
  |  |  167|   577k|        ASSERT(numbins < 17);                                                   \
  |  |  ------------------
  |  |  |  |   55|   577k|#define ASSERT(x) assert((x))
  |  |  ------------------
  |  |  168|   577k|                                                                                \
  |  |  169|   577k|        u4_bins = 0;                                                            \
  |  |  170|   577k|                                                                                \
  |  |  171|   577k|        BITS_GET(u4_bits, ps_bitstrm->pu4_buf, ps_bitstrm->u4_bit_ofst,         \
  |  |  ------------------
  |  |  |  |  150|   577k|                          m_u4_cur_word,m_u4_nxt_word, m_cnt)   \
  |  |  |  |  151|   577k|{                                                               \
  |  |  |  |  152|   577k|    m_u4_bits = (m_u4_cur_word << m_u4_bit_ofst)                \
  |  |  |  |  153|   577k|                             >> (WORD_SIZE - m_cnt);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   577k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  154|   577k|    m_u4_bit_ofst += m_cnt;                                     \
  |  |  |  |  155|   577k|    if(m_u4_bit_ofst > WORD_SIZE)                               \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.15M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (155:8): [True: 23.8k, False: 553k]
  |  |  |  |  ------------------
  |  |  |  |  156|   577k|    {                                                           \
  |  |  |  |  157|  23.8k|        m_u4_bits |= SHR(m_u4_nxt_word,                         \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  23.8k|#define SHR(x,y) (((y) < 32) ? ((x) >> (y)) : 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (57:19): [True: 23.8k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  158|  23.8k|                     (DBL_WORD_SIZE - m_u4_bit_ofst));          \
  |  |  |  |  159|  23.8k|    }                                                           \
  |  |  |  |  160|   577k|                                                                \
  |  |  |  |  161|   577k|    if( m_u4_bit_ofst >=   WORD_SIZE )                          \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.15M|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:9): [True: 41.8k, False: 535k]
  |  |  |  |  ------------------
  |  |  |  |  162|   577k|    {                                                           \
  |  |  |  |  163|  41.8k|        UWORD32 pu4_word_tmp;                                   \
  |  |  |  |  164|  41.8k|        m_u4_cur_word  = m_u4_nxt_word;                         \
  |  |  |  |  165|  41.8k|        /* Getting the next word */                             \
  |  |  |  |  166|  41.8k|        pu4_word_tmp = *(m_pu4_buf++);                          \
  |  |  |  |  167|  41.8k|                                                                \
  |  |  |  |  168|  41.8k|        m_u4_bit_ofst -= WORD_SIZE;                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  41.8k|#define WORD_SIZE         32
  |  |  |  |  ------------------
  |  |  |  |  169|  41.8k|        /* Swapping little endian to big endian conversion*/    \
  |  |  |  |  170|  41.8k|        m_u4_nxt_word  = ITT_BIG_ENDIAN(pu4_word_tmp);              \
  |  |  |  |  ------------------
  |  |  |  |  |  |   63|  41.8k|#define ITT_BIG_ENDIAN(x)       ((x << 24))                |   \
  |  |  |  |  |  |   64|  41.8k|                            ((x & 0x0000ff00) << 8)    |   \
  |  |  |  |  |  |   65|  41.8k|                            ((x & 0x00ff0000) >> 8)    |   \
  |  |  |  |  |  |   66|  41.8k|                            ((UWORD32)x >> 24);
  |  |  |  |  ------------------
  |  |  |  |  171|  41.8k|    }                                                           \
  |  |  |  |  172|   577k|}
  |  |  ------------------
  |  |  172|   577k|                    ps_bitstrm->u4_cur_word, ps_bitstrm->u4_nxt_word, numbins); \
  |  |  173|   577k|        do                                                                      \
  |  |  174|  1.34M|        {                                                                       \
  |  |  175|  1.34M|            UWORD32 u4_bit;                                                     \
  |  |  176|  1.34M|            numbins_tmp--;                                                      \
  |  |  177|  1.34M|            u4_bit = (u4_bits >> numbins_tmp) & 1;                              \
  |  |  178|  1.34M|            u4_ofst <<= 1;                                                      \
  |  |  179|  1.34M|            u4_ofst |= u4_bit;                                                  \
  |  |  180|  1.34M|                                                                                \
  |  |  181|  1.34M|            u4_bins <<= 1;                                                      \
  |  |  182|  1.34M|            if(u4_ofst >= u4_range)                                             \
  |  |  ------------------
  |  |  |  Branch (182:16): [True: 715k, False: 629k]
  |  |  ------------------
  |  |  183|  1.34M|            {                                                                   \
  |  |  184|   715k|                u4_bins += 1;                                                   \
  |  |  185|   715k|                u4_ofst -= u4_range;                                            \
  |  |  186|   715k|            }                                                                   \
  |  |  187|  1.34M|        }while(numbins_tmp);                                                    \
  |  |  ------------------
  |  |  |  Branch (187:16): [True: 767k, False: 577k]
  |  |  ------------------
  |  |  188|   577k|                                                                                \
  |  |  189|   577k|        /* Update the cabac context */                                          \
  |  |  190|   577k|        ps_cabac->u4_ofst = u4_ofst;                                            \
  |  |  191|   577k|    }                                                                           \
  |  |  192|   577k|}
  ------------------
  844|  2.31M|                                coeff_abs_level_remaining += u4_suffix;
  845|  2.31M|                            }
  846|   813k|                        }
  847|       |
  848|       |
  849|  9.05M|                        AEV_TRACE("coeff_abs_level_remaining", coeff_abs_level_remaining, ps_cabac->u4_range);
  850|  9.05M|                        base_lvl += coeff_abs_level_remaining;
  851|       |
  852|  9.05M|                    }
  853|       |
  854|       |                    /* update the rice param based on coeff level */
  855|  28.5M|                    if((base_lvl > (3 << rice_param)) && (rice_param < 4))
  ------------------
  |  Branch (855:24): [True: 1.29M, False: 27.2M]
  |  Branch (855:58): [True: 1.28M, False: 9.68k]
  ------------------
  856|  1.28M|                    {
  857|  1.28M|                        rice_param++;
  858|  1.28M|                    }
  859|       |
  860|       |                    /* Compute absolute level */
  861|  28.5M|                    level = base_lvl;
  862|       |
  863|       |                    /* Update level with the sign */
  864|  28.5M|                    if((u4_coeff_sign_map >> 31) & 1)
  ------------------
  |  Branch (864:24): [True: 9.60M, False: 18.9M]
  ------------------
  865|  9.60M|                        level = -level;
  866|       |
  867|  28.5M|                    u4_coeff_sign_map <<= 1;
  868|       |                    /* Update sign in case sign is hidden */
  869|  28.5M|                    if(sign_data_hiding_flag && sign_hidden)
  ------------------
  |  Branch (869:24): [True: 5.20M, False: 23.3M]
  |  Branch (869:49): [True: 3.75M, False: 1.44M]
  ------------------
  870|  3.75M|                    {
  871|  3.75M|                        sum_abs_level += base_lvl;
  872|       |
  873|  3.75M|                        if(n == first_sig_scan_pos && ((sum_abs_level % 2) == 1))
  ------------------
  |  Branch (873:28): [True: 535k, False: 3.22M]
  |  Branch (873:55): [True: 241k, False: 294k]
  ------------------
  874|   241k|                            level = -level;
  875|  3.75M|                    }
  876|       |
  877|       |                    /* Store the resulting level in non-zero level array */
  878|  28.5M|                    ps_tu_sblk_coeff_data->ai2_level[num_sig_coeff++] = level;
  879|       |                    //AEV_TRACE("level", level, 0);
  880|  28.5M|                }
  881|  28.5M|                u4_sig_coeff_map_shift <<= 1;
  882|  28.5M|                n--;
  883|       |                /* If there are zero coeffs, then shift by as many zero coeffs and decrement n */
  884|  28.5M|                clz = CLZ(u4_sig_coeff_map_shift);
  885|  28.5M|                u4_sig_coeff_map_shift <<= clz;
  886|  28.5M|                n -= (WORD32)clz;
  887|       |
  888|       |
  889|  28.5M|            }while(u4_sig_coeff_map_shift);
  ------------------
  |  Branch (889:20): [True: 21.6M, False: 6.92M]
  ------------------
  890|  6.92M|        }
  891|       |
  892|       |        /* Increment the pv_tu_sblk_coeff_data */
  893|  6.92M|        {
  894|  6.92M|            UWORD8 *pu1_buf = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data;
  895|  6.92M|            pu1_buf += sizeof(tu_sblk_coeff_data_t) - SUBBLK_COEFF_CNT * sizeof(WORD16);
  ------------------
  |  |  412|  6.92M|#define SUBBLK_COEFF_CNT    16
  ------------------
  896|  6.92M|            pu1_buf += num_coeff * sizeof(WORD16);
  897|  6.92M|            ps_codec->s_parse.pv_tu_coeff_data = pu1_buf;
  898|       |
  899|  6.92M|        }
  900|       |
  901|  6.92M|    }
  902|       |    /* Set number of coded sub blocks in the current TU */
  903|  3.71M|    *pi1_num_coded_subblks = num_subblks;
  904|       |
  905|  3.71M|    return ret;
  906|  3.71M|}

ihevcd_parse_transform_tree:
  124|  4.77M|{
  125|  4.77M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  126|  4.77M|    sps_t *ps_sps;
  127|  4.77M|    pps_t *ps_pps;
  128|  4.77M|    WORD32 value;
  129|  4.77M|    WORD32 x1, y1;
  130|  4.77M|    WORD32 max_trafo_depth;
  131|       |
  132|  4.77M|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  133|  4.77M|    WORD32 intra_split_flag;
  134|  4.77M|    WORD32 split_transform_flag;
  135|  4.77M|    WORD32 ctxt_idx;
  136|  4.77M|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  137|       |
  138|  4.77M|    max_trafo_depth = ps_codec->s_parse.s_cu.i4_max_trafo_depth;
  139|  4.77M|    ps_sps = ps_codec->s_parse.ps_sps;
  140|  4.77M|    ps_pps = ps_codec->s_parse.ps_pps;
  141|  4.77M|    intra_split_flag = ps_codec->s_parse.s_cu.i4_intra_split_flag;
  142|       |
  143|  4.77M|    {
  144|  4.77M|        split_transform_flag = 0;
  145|  4.77M|        if((log2_trafo_size <= ps_sps->i1_log2_max_transform_block_size) &&
  ------------------
  |  Branch (145:12): [True: 4.56M, False: 215k]
  ------------------
  146|  4.77M|                        (log2_trafo_size > ps_sps->i1_log2_min_transform_block_size) &&
  ------------------
  |  Branch (146:25): [True: 3.72M, False: 837k]
  ------------------
  147|  4.77M|                        (trafo_depth < max_trafo_depth) &&
  ------------------
  |  Branch (147:25): [True: 596k, False: 3.12M]
  ------------------
  148|  4.77M|                        !(intra_split_flag && (trafo_depth == 0)))
  ------------------
  |  Branch (148:27): [True: 327k, False: 269k]
  |  Branch (148:47): [True: 324k, False: 2.52k]
  ------------------
  149|   271k|        {
  150|       |            /* encode the split transform flag, context derived as per Table9-37 */
  151|   271k|            ctxt_idx = IHEVC_CAB_SPLIT_TFM + (5 - log2_trafo_size);
  152|       |
  153|   271k|            TRACE_CABAC_CTXT("split_transform_flag", ps_cabac->u4_range, ctxt_idx);
  154|   271k|            split_transform_flag = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  155|   271k|            AEV_TRACE("split_transform_flag", split_transform_flag,
  156|   271k|                      ps_cabac->u4_range);
  157|       |
  158|   271k|        }
  159|  4.50M|        else
  160|  4.50M|        {
  161|  4.50M|            WORD32 inter_split_flag = 0;
  162|       |
  163|  4.50M|            if((0 == ps_sps->i1_max_transform_hierarchy_depth_inter) &&
  ------------------
  |  Branch (163:16): [True: 3.51M, False: 986k]
  ------------------
  164|  4.50M|                            (PRED_MODE_INTER == ps_codec->s_parse.s_cu.i4_pred_mode) &&
  ------------------
  |  Branch (164:29): [True: 20.4k, False: 3.49M]
  ------------------
  165|  4.50M|                            (PART_2Nx2N != ps_codec->s_parse.s_cu.i4_part_mode) &&
  ------------------
  |  Branch (165:29): [True: 11.9k, False: 8.45k]
  ------------------
  166|  4.50M|                            (0 == trafo_depth))
  ------------------
  |  Branch (166:29): [True: 2.19k, False: 9.76k]
  ------------------
  167|  2.19k|            {
  168|  2.19k|                inter_split_flag = 1;
  169|  2.19k|            }
  170|       |
  171|  4.50M|            if((log2_trafo_size > ps_sps->i1_log2_max_transform_block_size) ||
  ------------------
  |  Branch (171:16): [True: 215k, False: 4.28M]
  ------------------
  172|  4.50M|                            ((1 == intra_split_flag) && (0 == trafo_depth)) ||
  ------------------
  |  Branch (172:30): [True: 1.66M, False: 2.62M]
  |  Branch (172:57): [True: 324k, False: 1.33M]
  ------------------
  173|  4.50M|                            (1 == inter_split_flag))
  ------------------
  |  Branch (173:29): [True: 682, False: 3.96M]
  ------------------
  174|   540k|            {
  175|   540k|                split_transform_flag = 1;
  176|   540k|            }
  177|  4.50M|        }
  178|       |
  179|  4.77M|        if(0 == trafo_depth)
  ------------------
  |  Branch (179:12): [True: 2.35M, False: 2.41M]
  ------------------
  180|  2.35M|        {
  181|  2.35M|            ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = 0;
  182|  2.35M|            ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = 0;
  183|  2.35M|        }
  184|  2.41M|        else
  185|  2.41M|        {
  186|  2.41M|            ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth - 1];
  187|  2.41M|            ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth - 1];
  188|  2.41M|        }
  189|  4.77M|        if(trafo_depth == 0 || log2_trafo_size > 2)
  ------------------
  |  Branch (189:12): [True: 2.35M, False: 2.41M]
  |  Branch (189:32): [True: 1.57M, False: 837k]
  ------------------
  190|  3.93M|        {
  191|  3.93M|            ctxt_idx = IHEVC_CAB_CBCR_IDX + trafo_depth;
  192|       |            /* CBF for Cb/Cr is sent only if the parent CBF for Cb/Cr is non-zero */
  193|  3.93M|            if((trafo_depth == 0) || ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth - 1])
  ------------------
  |  Branch (193:16): [True: 2.35M, False: 1.57M]
  |  Branch (193:38): [True: 426k, False: 1.15M]
  ------------------
  194|  2.78M|            {
  195|  2.78M|                TRACE_CABAC_CTXT("cbf_cb", ps_cabac->u4_range, ctxt_idx);
  196|  2.78M|                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  197|  2.78M|                AEV_TRACE("cbf_cb", value, ps_cabac->u4_range);
  198|  2.78M|                ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] = value;
  199|  2.78M|            }
  200|       |
  201|  3.93M|            if((trafo_depth == 0) || ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth - 1])
  ------------------
  |  Branch (201:16): [True: 2.35M, False: 1.57M]
  |  Branch (201:38): [True: 440k, False: 1.13M]
  ------------------
  202|  2.80M|            {
  203|  2.80M|                TRACE_CABAC_CTXT("cbf_cr", ps_cabac->u4_range, ctxt_idx);
  204|  2.80M|                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  205|  2.80M|                AEV_TRACE("cbf_cr", value, ps_cabac->u4_range);
  206|  2.80M|                ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth] = value;
  207|  2.80M|            }
  208|  3.93M|        }
  209|  4.77M|        if(split_transform_flag)
  ------------------
  |  Branch (209:12): [True: 604k, False: 4.17M]
  ------------------
  210|   604k|        {
  211|   604k|            WORD32 intra_pred_mode_tmp;
  212|   604k|            x1 = x0 + ((1 << log2_trafo_size) >> 1);
  213|   604k|            y1 = y0 + ((1 << log2_trafo_size) >> 1);
  214|       |
  215|       |            /* For transform depth of zero, intra pred mode as decoded at CU */
  216|       |            /* level is sent to the transform tree nodes */
  217|       |            /* When depth is non-zero intra pred mode of parent node is sent */
  218|       |            /* This takes care of passing correct mode to all the child nodes */
  219|   604k|            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0];
  ------------------
  |  Branch (219:35): [True: 51.5k, False: 552k]
  ------------------
  220|   604k|            ret = ihevcd_parse_transform_tree(ps_codec, x0, y0, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 0, intra_pred_mode_tmp);
  221|   604k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   604k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 6, False: 604k]
  |  |  ------------------
  ------------------
  222|       |
  223|   604k|            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[1];
  ------------------
  |  Branch (223:35): [True: 51.5k, False: 552k]
  ------------------
  224|   604k|            ret = ihevcd_parse_transform_tree(ps_codec, x1, y0, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 1, intra_pred_mode_tmp);
  225|   604k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   604k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 1, False: 604k]
  |  |  ------------------
  ------------------
  226|       |
  227|   604k|            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[2];
  ------------------
  |  Branch (227:35): [True: 51.5k, False: 552k]
  ------------------
  228|   604k|            ret = ihevcd_parse_transform_tree(ps_codec, x0, y1, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 2, intra_pred_mode_tmp);
  229|   604k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   604k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 604k]
  |  |  ------------------
  ------------------
  230|       |
  231|   604k|            intra_pred_mode_tmp = trafo_depth ? intra_pred_mode : ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[3];
  ------------------
  |  Branch (231:35): [True: 51.5k, False: 552k]
  ------------------
  232|   604k|            ret = ihevcd_parse_transform_tree(ps_codec, x1, y1, x0, y0, log2_trafo_size - 1, trafo_depth + 1, 3, intra_pred_mode_tmp);
  233|   604k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   604k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 604k]
  |  |  ------------------
  ------------------
  234|       |
  235|   604k|        }
  236|  4.17M|        else
  237|  4.17M|        {
  238|  4.17M|            WORD32 ctb_x_base;
  239|  4.17M|            WORD32 ctb_y_base;
  240|  4.17M|            WORD32 cu_qp_delta_abs;
  241|       |
  242|       |
  243|       |
  244|  4.17M|            tu_t *ps_tu = ps_codec->s_parse.ps_tu;
  245|  4.17M|            cu_qp_delta_abs = 0;
  246|  4.17M|            ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
  247|  4.17M|            ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
  248|       |
  249|  4.17M|            if((ps_codec->s_parse.s_cu.i4_pred_mode == PRED_MODE_INTRA) ||
  ------------------
  |  Branch (249:16): [True: 4.01M, False: 156k]
  ------------------
  250|  4.17M|                            (trafo_depth != 0) ||
  ------------------
  |  Branch (250:29): [True: 143k, False: 12.3k]
  ------------------
  251|  4.17M|                            (ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth]) ||
  ------------------
  |  Branch (251:29): [True: 1.41k, False: 10.9k]
  ------------------
  252|  4.17M|                            (ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth]))
  ------------------
  |  Branch (252:29): [True: 869, False: 10.0k]
  ------------------
  253|  4.16M|            {
  254|  4.16M|                ctxt_idx = IHEVC_CAB_CBF_LUMA_IDX;
  255|  4.16M|                ctxt_idx += (trafo_depth == 0) ? 1 : 0;
  ------------------
  |  Branch (255:29): [True: 1.79M, False: 2.36M]
  ------------------
  256|       |
  257|  4.16M|                TRACE_CABAC_CTXT("cbf_luma", ps_cabac->u4_range, ctxt_idx);
  258|  4.16M|                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  259|  4.16M|                AEV_TRACE("cbf_luma", value, ps_cabac->u4_range);
  260|       |
  261|  4.16M|                ps_codec->s_parse.s_cu.i1_cbf_luma = value;
  262|  4.16M|            }
  263|  10.0k|            else
  264|  10.0k|            {
  265|  10.0k|                ps_codec->s_parse.s_cu.i1_cbf_luma = 1;
  266|  10.0k|            }
  267|       |
  268|       |            /* Initialize ps_tu to default values */
  269|       |            /* If required change this to WORD32 packed write */
  270|  4.17M|            ps_tu->b1_cb_cbf = 0;
  271|  4.17M|            ps_tu->b1_cr_cbf = 0;
  272|  4.17M|            ps_tu->b1_y_cbf = 0;
  273|  4.17M|            ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
  274|  4.17M|            ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
  275|  4.17M|            ps_tu->b1_transquant_bypass = ps_codec->s_parse.s_cu.i4_cu_transquant_bypass;
  276|  4.17M|            ps_tu->b3_size = (log2_trafo_size - 2);
  277|  4.17M|            ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
  278|       |
  279|  4.17M|            ps_tu->b6_luma_intra_mode = intra_pred_mode;
  280|  4.17M|            ps_tu->b3_chroma_intra_mode_idx = ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx;
  281|       |
  282|       |            /* Section:7.3.12  Transform unit syntax inlined here */
  283|  4.17M|            if(ps_codec->s_parse.s_cu.i1_cbf_luma ||
  ------------------
  |  Branch (283:16): [True: 2.55M, False: 1.61M]
  ------------------
  284|  4.17M|                            ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth] ||
  ------------------
  |  Branch (284:29): [True: 312k, False: 1.30M]
  ------------------
  285|  4.17M|                            ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
  ------------------
  |  Branch (285:29): [True: 93.6k, False: 1.21M]
  ------------------
  286|  2.96M|            {
  287|  2.96M|                WORD32 intra_pred_mode_chroma;
  288|  2.96M|                if(ps_pps->i1_cu_qp_delta_enabled_flag && !ps_codec->s_parse.i4_is_cu_qp_delta_coded)
  ------------------
  |  Branch (288:20): [True: 587k, False: 2.37M]
  |  Branch (288:59): [True: 36.2k, False: 551k]
  ------------------
  289|  36.2k|                {
  290|       |
  291|       |
  292|  36.2k|                    WORD32 c_max        = TU_MAX_QP_DELTA_ABS;
  ------------------
  |  |  160|  36.2k|#define TU_MAX_QP_DELTA_ABS     5
  ------------------
  293|  36.2k|                    WORD32 ctxt_inc     = IHEVC_CAB_QP_DELTA_ABS;
  294|  36.2k|                    WORD32 ctxt_inc_max = CTXT_MAX_QP_DELTA_ABS;
  ------------------
  |  |  163|  36.2k|#define CTXT_MAX_QP_DELTA_ABS   1
  ------------------
  295|       |
  296|  36.2k|                    TRACE_CABAC_CTXT("cu_qp_delta_abs", ps_cabac->u4_range, ctxt_inc);
  297|       |                    /* qp_delta_abs is coded as combination of tunary and eg0 code  */
  298|       |                    /* See Table 9-32 and Table 9-37 for details on cu_qp_delta_abs */
  299|  36.2k|                    cu_qp_delta_abs = ihevcd_cabac_decode_bins_tunary(ps_cabac,
  300|  36.2k|                                                                      ps_bitstrm,
  301|  36.2k|                                                                      c_max,
  302|  36.2k|                                                                      ctxt_inc,
  303|  36.2k|                                                                      0,
  304|  36.2k|                                                                      ctxt_inc_max);
  305|  36.2k|                    if(cu_qp_delta_abs >= c_max)
  ------------------
  |  Branch (305:24): [True: 5.94k, False: 30.3k]
  ------------------
  306|  5.94k|                    {
  307|  5.94k|                        value = ihevcd_cabac_decode_bypass_bins_egk(ps_cabac, ps_bitstrm, 0);
  308|  5.94k|                        cu_qp_delta_abs += value;
  309|  5.94k|                    }
  310|  36.2k|                    AEV_TRACE("cu_qp_delta_abs", cu_qp_delta_abs, ps_cabac->u4_range);
  311|       |
  312|  36.2k|                    ps_codec->s_parse.i4_is_cu_qp_delta_coded = 1;
  313|       |
  314|       |
  315|  36.2k|                    if(cu_qp_delta_abs)
  ------------------
  |  Branch (315:24): [True: 19.1k, False: 17.1k]
  ------------------
  316|  19.1k|                    {
  317|  19.1k|                        value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
  318|  19.1k|                        AEV_TRACE("cu_qp_delta_sign", value, ps_cabac->u4_range);
  319|       |
  320|  19.1k|                        if(value)
  ------------------
  |  Branch (320:28): [True: 5.33k, False: 13.8k]
  ------------------
  321|  5.33k|                            cu_qp_delta_abs = -cu_qp_delta_abs;
  322|       |
  323|  19.1k|                    }
  324|       |
  325|  36.2k|                    if (cu_qp_delta_abs < MIN_CU_QP_DELTA_ABS(ps_sps->i1_bit_depth_luma_minus8)
  ------------------
  |  |   85|  72.5k|#define MIN_CU_QP_DELTA_ABS(x) (-26 + ((x) * 6) / 2)
  ------------------
  |  Branch (325:25): [True: 7, False: 36.2k]
  ------------------
  326|  36.2k|                                    || cu_qp_delta_abs > MAX_CU_QP_DELTA_ABS(ps_sps->i1_bit_depth_luma_minus8))
  ------------------
  |  |   86|  36.2k|#define MAX_CU_QP_DELTA_ABS(x) (25 + ((x) * 6) / 2)
  ------------------
  |  Branch (326:40): [True: 8, False: 36.2k]
  ------------------
  327|     15|                    {
  328|     15|                        return IHEVCD_INVALID_PARAMETER;
  329|     15|                    }
  330|       |
  331|  36.2k|                    ps_codec->s_parse.s_cu.i4_cu_qp_delta = cu_qp_delta_abs;
  332|       |
  333|  36.2k|                }
  334|       |
  335|  2.96M|                if(ps_codec->s_parse.s_cu.i1_cbf_luma)
  ------------------
  |  Branch (335:20): [True: 2.55M, False: 405k]
  ------------------
  336|  2.55M|                {
  337|  2.55M|                    ps_tu->b1_y_cbf = 1;
  338|  2.55M|                    ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size, 0, intra_pred_mode);
  339|  2.55M|                }
  340|       |
  341|  2.96M|                if(4 == ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx)
  ------------------
  |  Branch (341:20): [True: 2.49M, False: 462k]
  ------------------
  342|  2.49M|                    intra_pred_mode_chroma = ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0];
  343|   462k|                else
  344|   462k|                {
  345|   462k|                    intra_pred_mode_chroma = gau1_intra_pred_chroma_modes[ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx];
  346|       |
  347|   462k|                    if(intra_pred_mode_chroma ==
  ------------------
  |  Branch (347:24): [True: 76.9k, False: 385k]
  ------------------
  348|   462k|                                    ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0])
  349|  76.9k|                    {
  350|  76.9k|                        intra_pred_mode_chroma = INTRA_ANGULAR(34);
  ------------------
  |  |  507|  76.9k|#define INTRA_ANGULAR(x) (x)
  ------------------
  351|  76.9k|                    }
  352|       |
  353|   462k|                }
  354|  2.96M|                if(log2_trafo_size > 2)
  ------------------
  |  Branch (354:20): [True: 2.50M, False: 458k]
  ------------------
  355|  2.50M|                {
  356|  2.50M|                    if(ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth])
  ------------------
  |  Branch (356:24): [True: 524k, False: 1.97M]
  ------------------
  357|   524k|                    {
  358|   524k|                        ps_tu->b1_cb_cbf = 1;
  359|   524k|                        ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size - 1, 1, intra_pred_mode_chroma);
  360|   524k|                    }
  361|       |
  362|  2.50M|                    if(ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
  ------------------
  |  Branch (362:24): [True: 522k, False: 1.98M]
  ------------------
  363|   522k|                    {
  364|   522k|                        ps_tu->b1_cr_cbf = 1;
  365|   522k|                        ihevcd_parse_residual_coding(ps_codec, x0, y0, log2_trafo_size - 1, 2, intra_pred_mode_chroma);
  366|   522k|                    }
  367|  2.50M|                }
  368|   458k|                else if(blk_idx == 3)
  ------------------
  |  Branch (368:25): [True: 114k, False: 343k]
  ------------------
  369|   114k|                {
  370|   114k|                    if(ps_codec->s_parse.s_cu.ai1_cbf_cb[trafo_depth])
  ------------------
  |  Branch (370:24): [True: 55.3k, False: 59.5k]
  ------------------
  371|  55.3k|                    {
  372|  55.3k|                        ps_tu->b1_cb_cbf = 1;
  373|  55.3k|                        ihevcd_parse_residual_coding(ps_codec, cu_x_base, cu_y_base, log2_trafo_size, 1, intra_pred_mode_chroma);
  374|  55.3k|                    }
  375|       |
  376|   114k|                    if(ps_codec->s_parse.s_cu.ai1_cbf_cr[trafo_depth])
  ------------------
  |  Branch (376:24): [True: 53.3k, False: 61.4k]
  ------------------
  377|  53.3k|                    {
  378|  53.3k|                        ps_tu->b1_cr_cbf = 1;
  379|  53.3k|                        ihevcd_parse_residual_coding(ps_codec, cu_x_base, cu_y_base, log2_trafo_size, 2, intra_pred_mode_chroma);
  380|  53.3k|                    }
  381|   114k|                }
  382|   343k|                else
  383|   343k|                {
  384|       |                    //ps_tu->b1_chroma_present = 0;
  385|   343k|                    ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
  ------------------
  |  |  518|   343k|#define INTRA_PRED_CHROMA_IDX_NONE  7
  ------------------
  386|   343k|                }
  387|  2.96M|            }
  388|  1.21M|            else
  389|  1.21M|            {
  390|  1.21M|                if((3 != blk_idx) && (2 == log2_trafo_size))
  ------------------
  |  Branch (390:20): [True: 956k, False: 254k]
  |  Branch (390:38): [True: 284k, False: 671k]
  ------------------
  391|   284k|                {
  392|   284k|                    ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
  ------------------
  |  |  518|   284k|#define INTRA_PRED_CHROMA_IDX_NONE  7
  ------------------
  393|   284k|                }
  394|  1.21M|            }
  395|       |
  396|       |            /* Set the first TU in CU flag */
  397|  4.17M|            {
  398|  4.17M|                if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
  ------------------
  |  Branch (398:20): [True: 2.93M, False: 1.24M]
  ------------------
  399|  4.17M|                                (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
  ------------------
  |  Branch (399:33): [True: 2.35M, False: 571k]
  ------------------
  400|  2.35M|                {
  401|  2.35M|                    ps_tu->b1_first_tu_in_cu = 1;
  402|  2.35M|                }
  403|  1.81M|                else
  404|  1.81M|                {
  405|  1.81M|                    ps_tu->b1_first_tu_in_cu = 0;
  406|  1.81M|                }
  407|  4.17M|            }
  408|  4.17M|            ps_codec->s_parse.ps_tu++;
  409|  4.17M|            ps_codec->s_parse.s_cu.i4_tu_cnt++;
  410|  4.17M|            ps_codec->s_parse.i4_pic_tu_idx++;
  411|  4.17M|        }
  412|  4.77M|    }
  413|  4.77M|    return ret;
  414|  4.77M|}
ihevcd_parse_mvd:
  435|   144k|{
  436|   144k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  437|   144k|    WORD32 value;
  438|   144k|    WORD32 abs_mvd;
  439|   144k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  440|   144k|    WORD32 abs_mvd_greater0_flag[2];
  441|   144k|    WORD32 abs_mvd_greater1_flag[2];
  442|   144k|    WORD32 ctxt_idx;
  443|   144k|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  444|       |
  445|       |
  446|   144k|    ctxt_idx  = IHEVC_CAB_MVD_GRT0;
  447|       |    /* encode absmvd_x > 0 */
  448|   144k|    TRACE_CABAC_CTXT("abs_mvd_greater0_flag[0]", ps_cabac->u4_range, ctxt_idx);
  449|   144k|    abs_mvd_greater0_flag[0] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  450|   144k|    AEV_TRACE("abs_mvd_greater0_flag[0]", abs_mvd_greater0_flag[0], ps_cabac->u4_range);
  451|       |
  452|       |    /* encode absmvd_y > 0 */
  453|   144k|    TRACE_CABAC_CTXT("abs_mvd_greater0_flag[1]", ps_cabac->u4_range, ctxt_idx);
  454|   144k|    abs_mvd_greater0_flag[1] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  455|   144k|    AEV_TRACE("abs_mvd_greater0_flag[1]", abs_mvd_greater0_flag[1], ps_cabac->u4_range);
  456|       |
  457|   144k|    ctxt_idx  = IHEVC_CAB_MVD_GRT1;
  458|   144k|    abs_mvd_greater1_flag[0] = 0;
  459|   144k|    abs_mvd_greater1_flag[1] = 0;
  460|       |
  461|   144k|    if(abs_mvd_greater0_flag[0])
  ------------------
  |  Branch (461:8): [True: 70.3k, False: 74.4k]
  ------------------
  462|  70.3k|    {
  463|  70.3k|        TRACE_CABAC_CTXT("abs_mvd_greater1_flag[0]", ps_cabac->u4_range, ctxt_idx);
  464|  70.3k|        abs_mvd_greater1_flag[0] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  465|  70.3k|        AEV_TRACE("abs_mvd_greater1_flag[0]", abs_mvd_greater1_flag[0], ps_cabac->u4_range);
  466|  70.3k|    }
  467|   144k|    if(abs_mvd_greater0_flag[1])
  ------------------
  |  Branch (467:8): [True: 72.3k, False: 72.3k]
  ------------------
  468|  72.3k|    {
  469|  72.3k|        TRACE_CABAC_CTXT("abs_mvd_greater1_flag[1]", ps_cabac->u4_range, ctxt_idx);
  470|  72.3k|        abs_mvd_greater1_flag[1] = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  471|  72.3k|        AEV_TRACE("abs_mvd_greater1_flag[1]", abs_mvd_greater1_flag[1], ps_cabac->u4_range);
  472|  72.3k|    }
  473|   144k|    abs_mvd = 0;
  474|   144k|    if(abs_mvd_greater0_flag[0])
  ------------------
  |  Branch (474:8): [True: 70.3k, False: 74.4k]
  ------------------
  475|  70.3k|    {
  476|  70.3k|        abs_mvd = 1;
  477|  70.3k|        if(abs_mvd_greater1_flag[0])
  ------------------
  |  Branch (477:12): [True: 26.2k, False: 44.0k]
  ------------------
  478|  26.2k|        {
  479|  26.2k|            value = ihevcd_cabac_decode_bypass_bins_egk(ps_cabac, ps_bitstrm, 1);
  480|  26.2k|            AEV_TRACE("abs_mvd_minus2[0]", value, ps_cabac->u4_range);
  481|  26.2k|            abs_mvd = value + 2;
  482|  26.2k|        }
  483|  70.3k|        value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
  484|  70.3k|        AEV_TRACE("mvd_sign_flag[0]", value, ps_cabac->u4_range);
  485|  70.3k|        if(value)
  ------------------
  |  Branch (485:12): [True: 35.6k, False: 34.6k]
  ------------------
  486|  35.6k|        {
  487|  35.6k|            abs_mvd = -abs_mvd;
  488|  35.6k|        }
  489|       |
  490|  70.3k|    }
  491|   144k|    ps_mv->i2_mvx = abs_mvd;
  492|   144k|    abs_mvd = 0;
  493|   144k|    if(abs_mvd_greater0_flag[1])
  ------------------
  |  Branch (493:8): [True: 72.3k, False: 72.3k]
  ------------------
  494|  72.3k|    {
  495|  72.3k|        abs_mvd = 1;
  496|  72.3k|        if(abs_mvd_greater1_flag[1])
  ------------------
  |  Branch (496:12): [True: 30.0k, False: 42.2k]
  ------------------
  497|  30.0k|        {
  498|  30.0k|            value = ihevcd_cabac_decode_bypass_bins_egk(ps_cabac, ps_bitstrm, 1);
  499|  30.0k|            AEV_TRACE("abs_mvd_minus2[1]", value, ps_cabac->u4_range);
  500|  30.0k|            abs_mvd = value + 2;
  501|       |
  502|  30.0k|        }
  503|  72.3k|        value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
  504|  72.3k|        AEV_TRACE("mvd_sign_flag[1]", value, ps_cabac->u4_range);
  505|       |
  506|  72.3k|        if(value)
  ------------------
  |  Branch (506:12): [True: 37.2k, False: 35.0k]
  ------------------
  507|  37.2k|        {
  508|  37.2k|            abs_mvd = -abs_mvd;
  509|  37.2k|        }
  510|  72.3k|    }
  511|   144k|    ps_mv->i2_mvy = abs_mvd;
  512|       |
  513|   144k|    return ret;
  514|   144k|}
ihevcd_parse_pcm_sample:
  541|     32|{
  542|     32|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  543|     32|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  544|     32|    sps_t *ps_sps;
  545|       |
  546|     32|    WORD32 value;
  547|     32|    WORD32 i;
  548|       |
  549|     32|    WORD32 num_bits;
  550|     32|    UWORD32 u4_sig_coeff_map;
  551|     32|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  552|     32|    tu_t *ps_tu = ps_codec->s_parse.ps_tu;
  553|     32|    tu_sblk_coeff_data_t *ps_tu_sblk_coeff_data;
  554|     32|    UWORD8 *pu1_coeff_data;
  555|     32|    ps_sps = ps_codec->s_parse.ps_sps;
  556|       |
  557|     32|    UNUSED(value);
  ------------------
  |  |   38|     32|#define UNUSED(x) ((void)(x))
  ------------------
  558|     32|    UNUSED(ps_tu);
  ------------------
  |  |   38|     32|#define UNUSED(x) ((void)(x))
  ------------------
  559|     32|    UNUSED(ps_cabac);
  ------------------
  |  |   38|     32|#define UNUSED(x) ((void)(x))
  ------------------
  560|     32|    UNUSED(x0);
  ------------------
  |  |   38|     32|#define UNUSED(x) ((void)(x))
  ------------------
  561|     32|    UNUSED(y0);
  ------------------
  |  |   38|     32|#define UNUSED(x) ((void)(x))
  ------------------
  562|       |
  563|     32|    {
  564|     32|        WORD8 *pi1_scan_idx;
  565|     32|        WORD8 *pi1_buf = (WORD8 *)ps_codec->s_parse.pv_tu_coeff_data;
  566|     32|        WORD8 *pi1_num_coded_subblks;
  567|       |
  568|       |        /* First WORD8 gives number of coded subblocks */
  569|     32|        pi1_num_coded_subblks = pi1_buf++;
  570|       |
  571|       |        /* Set number of coded subblocks in the current TU to zero */
  572|       |        /* For PCM there will be only one subblock which is the same size as CU */
  573|     32|        *pi1_num_coded_subblks = 1;
  574|       |
  575|       |        /* Second WORD8 gives (scan idx << 1) | trans_skip */
  576|     32|        pi1_scan_idx = pi1_buf++;
  577|     32|        *pi1_scan_idx = (0 << 1) | 1;
  578|       |
  579|       |        /* Store the incremented pointer in pv_tu_coeff_data */
  580|     32|        ps_codec->s_parse.pv_tu_coeff_data = pi1_buf;
  581|       |
  582|     32|    }
  583|       |
  584|     32|    u4_sig_coeff_map = 0xFFFFFFFF;
  585|     32|    ps_tu_sblk_coeff_data = (tu_sblk_coeff_data_t *)ps_codec->s_parse.pv_tu_coeff_data;
  586|     32|    ps_tu_sblk_coeff_data->u2_sig_coeff_map = u4_sig_coeff_map;
  587|     32|    ps_tu_sblk_coeff_data->u2_subblk_pos = 0;
  588|       |
  589|     32|    pu1_coeff_data = (UWORD8 *)&ps_tu_sblk_coeff_data->ai2_level[0];
  590|       |
  591|     32|    num_bits = ps_sps->i1_pcm_sample_bit_depth_luma;
  592|       |
  593|  2.08k|    for(i = 0; i < 1 << (log2_cb_size << 1); i++)
  ------------------
  |  Branch (593:16): [True: 2.04k, False: 32]
  ------------------
  594|  2.04k|    {
  595|  2.04k|        TRACE_CABAC_CTXT("pcm_sample_luma", ps_cabac->u4_range, 0);
  596|  2.04k|        BITS_PARSE("pcm_sample_luma", value, ps_bitstrm, num_bits);
  ------------------
  |  |  148|  2.04k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  597|       |
  598|       |        //ps_pcmsample_t->i1_pcm_sample_luma[i] = value;
  599|  2.04k|        *pu1_coeff_data++ = value << (BIT_DEPTH_LUMA - num_bits);
  ------------------
  |  |  270|  2.04k|#define BIT_DEPTH_LUMA      BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  2.04k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  600|  2.04k|    }
  601|       |
  602|     32|    num_bits = ps_sps->i1_pcm_sample_bit_depth_chroma;
  603|       |
  604|  1.05k|    for(i = 0; i < (1 << (log2_cb_size << 1)) >> 1; i++)
  ------------------
  |  Branch (604:16): [True: 1.02k, False: 32]
  ------------------
  605|  1.02k|    {
  606|  1.02k|        TRACE_CABAC_CTXT("pcm_sample_chroma", ps_cabac->u4_range, 0);
  607|  1.02k|        BITS_PARSE("pcm_sample_chroma", value, ps_bitstrm, num_bits);
  ------------------
  |  |  148|  1.02k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  608|       |
  609|       |        // ps_pcmsample_t->i1_pcm_sample_chroma[i] = value;
  610|  1.02k|        *pu1_coeff_data++ = value << (BIT_DEPTH_CHROMA - num_bits);
  ------------------
  |  |  271|  1.02k|#define BIT_DEPTH_CHROMA    BIT_DEPTH
  |  |  ------------------
  |  |  |  |  269|  1.02k|#define BIT_DEPTH           8
  |  |  ------------------
  ------------------
  611|  1.02k|    }
  612|       |
  613|     32|    ps_codec->s_parse.pv_tu_coeff_data = pu1_coeff_data;
  614|       |
  615|     32|    return ret;
  616|     32|}
ihevcd_parse_pu_mvp:
  638|   131k|{
  639|   131k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  640|   131k|    WORD32 value;
  641|   131k|    slice_header_t *ps_slice_hdr;
  642|   131k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  643|   131k|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  644|   131k|    WORD32 inter_pred_idc;
  645|       |
  646|   131k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
  647|       |
  648|   131k|    if(ps_slice_hdr->i1_slice_type == BSLICE)
  ------------------
  |  Branch (648:8): [True: 130k, False: 619]
  ------------------
  649|   130k|    {
  650|   130k|        WORD32 pu_w_plus_pu_h;
  651|   130k|        WORD32 ctxt_idx;
  652|       |        /* required to check if w+h==12 case */
  653|   130k|        pu_w_plus_pu_h = ((ps_pu->b4_wd + 1) << 2) + ((ps_pu->b4_ht + 1) << 2);
  654|   130k|        if(12 == pu_w_plus_pu_h)
  ------------------
  |  Branch (654:12): [True: 73.0k, False: 57.4k]
  ------------------
  655|  73.0k|        {
  656|  73.0k|            ctxt_idx = IHEVC_CAB_INTER_PRED_IDC + 4;
  657|  73.0k|            TRACE_CABAC_CTXT("inter_pred_idc", ps_cabac->u4_range, ctxt_idx);
  658|  73.0k|            inter_pred_idc = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
  659|  73.0k|                                                     ctxt_idx);
  660|  73.0k|        }
  661|  57.4k|        else
  662|  57.4k|        {
  663|       |            /* larger PUs can be encoded as bi_pred/l0/l1 inter_pred_idc */
  664|  57.4k|            WORD32 is_bipred;
  665|       |
  666|  57.4k|            ctxt_idx = IHEVC_CAB_INTER_PRED_IDC + ps_codec->s_parse.i4_ct_depth;
  667|  57.4k|            TRACE_CABAC_CTXT("inter_pred_idc", ps_cabac->u4_range, ctxt_idx);
  668|  57.4k|            is_bipred = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  669|  57.4k|            inter_pred_idc = PRED_BI;
  670|  57.4k|            if(!is_bipred)
  ------------------
  |  Branch (670:16): [True: 39.7k, False: 17.7k]
  ------------------
  671|  39.7k|            {
  672|  39.7k|                ctxt_idx = IHEVC_CAB_INTER_PRED_IDC + 4;
  673|  39.7k|                inter_pred_idc = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
  674|  39.7k|                                                         ctxt_idx);
  675|  39.7k|            }
  676|  57.4k|        }
  677|       |
  678|   130k|        AEV_TRACE("inter_pred_idc", inter_pred_idc, ps_cabac->u4_range);
  679|   130k|    }
  680|    619|    else
  681|    619|        inter_pred_idc = PRED_L0;
  682|   131k|    ps_pu->mv.i1_l0_ref_idx = 0;
  683|   131k|    ps_pu->mv.i1_l1_ref_idx = 0;
  684|       |    /* Decode MVD for L0 for PRED_L0 or PRED_BI */
  685|   131k|    if(inter_pred_idc != PRED_L1)
  ------------------
  |  Branch (685:8): [True: 97.6k, False: 33.5k]
  ------------------
  686|  97.6k|    {
  687|  97.6k|        WORD32 active_refs = ps_slice_hdr->i1_num_ref_idx_l0_active;
  688|  97.6k|        WORD32 ref_idx = 0;
  689|  97.6k|        WORD32 ctxt_idx;
  690|       |
  691|  97.6k|        if(active_refs > 1)
  ------------------
  |  Branch (691:12): [True: 76.6k, False: 20.9k]
  ------------------
  692|  76.6k|        {
  693|  76.6k|            ctxt_idx = IHEVC_CAB_INTER_REF_IDX;
  694|       |            /* encode the context modelled first bin */
  695|  76.6k|            TRACE_CABAC_CTXT("ref_idx", ps_cabac->u4_range, ctxt_idx);
  696|  76.6k|            ref_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  697|       |
  698|  76.6k|            if((active_refs > 2) && ref_idx)
  ------------------
  |  Branch (698:16): [True: 3.32k, False: 73.3k]
  |  Branch (698:37): [True: 1.53k, False: 1.79k]
  ------------------
  699|  1.53k|            {
  700|  1.53k|                WORD32 value;
  701|       |                /* encode the context modelled second bin */
  702|  1.53k|                ctxt_idx++;
  703|  1.53k|                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  704|  1.53k|                ref_idx += value;
  705|  1.53k|                if((active_refs > 3) && value)
  ------------------
  |  Branch (705:20): [True: 1.49k, False: 39]
  |  Branch (705:41): [True: 489, False: 1.00k]
  ------------------
  706|    489|                {
  707|       |                    /* encode remaining bypass bins */
  708|    489|                    ref_idx = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac,
  709|    489|                                                                     ps_bitstrm,
  710|    489|                                                                     (active_refs - 3)
  711|    489|                    );
  712|    489|                    ref_idx += 2;
  713|    489|                }
  714|  1.53k|            }
  715|  76.6k|            AEV_TRACE("ref_idx", ref_idx, ps_cabac->u4_range);
  716|  76.6k|        }
  717|       |
  718|  97.6k|        ref_idx = CLIP3(ref_idx, 0, MAX_DPB_SIZE - 1);
  ------------------
  |  |   40|  97.6k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 97.6k]
  |  |  |  Branch (40:53): [True: 0, False: 97.6k]
  |  |  ------------------
  ------------------
  719|  97.6k|        ps_pu->mv.i1_l0_ref_idx = ref_idx;
  720|       |
  721|  97.6k|        ihevcd_parse_mvd(ps_codec, &ps_pu->mv.s_l0_mv);
  722|       |
  723|  97.6k|        ctxt_idx = IHEVC_CAB_MVP_L0L1;
  724|  97.6k|        value = ihevcd_cabac_decode_bin(ps_cabac,
  725|  97.6k|                                        ps_bitstrm,
  726|  97.6k|                                        ctxt_idx);
  727|       |
  728|  97.6k|        AEV_TRACE("mvp_l0/l1_flag", value, ps_cabac->u4_range);
  729|       |
  730|  97.6k|        ps_pu->b1_l0_mvp_idx = value;
  731|       |
  732|  97.6k|    }
  733|       |    /* Decode MVD for L1 for PRED_L1 or PRED_BI */
  734|   131k|    if(inter_pred_idc != PRED_L0)
  ------------------
  |  Branch (734:8): [True: 51.2k, False: 79.9k]
  ------------------
  735|  51.2k|    {
  736|  51.2k|        WORD32 active_refs = ps_slice_hdr->i1_num_ref_idx_l1_active;
  737|  51.2k|        WORD32 ref_idx = 0;
  738|  51.2k|        WORD32 ctxt_idx;
  739|       |
  740|  51.2k|        if(active_refs > 1)
  ------------------
  |  Branch (740:12): [True: 44.5k, False: 6.68k]
  ------------------
  741|  44.5k|        {
  742|       |
  743|  44.5k|            ctxt_idx = IHEVC_CAB_INTER_REF_IDX;
  744|  44.5k|            TRACE_CABAC_CTXT("ref_idx", ps_cabac->u4_range, ctxt_idx);
  745|       |            /* encode the context modelled first bin */
  746|  44.5k|            ref_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  747|       |
  748|  44.5k|            if((active_refs > 2) && ref_idx)
  ------------------
  |  Branch (748:16): [True: 5.60k, False: 38.9k]
  |  Branch (748:37): [True: 1.26k, False: 4.34k]
  ------------------
  749|  1.26k|            {
  750|  1.26k|                WORD32 value;
  751|       |                /* encode the context modelled second bin */
  752|  1.26k|                ctxt_idx++;
  753|  1.26k|                value = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  754|  1.26k|                ref_idx += value;
  755|  1.26k|                if((active_refs > 3) && value)
  ------------------
  |  Branch (755:20): [True: 972, False: 289]
  |  Branch (755:41): [True: 421, False: 551]
  ------------------
  756|    421|                {
  757|       |                    /* encode remaining bypass bins */
  758|    421|                    ref_idx = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac,
  759|    421|                                                                     ps_bitstrm,
  760|    421|                                                                     (active_refs - 3)
  761|    421|                    );
  762|    421|                    ref_idx += 2;
  763|    421|                }
  764|  1.26k|            }
  765|       |
  766|  44.5k|            AEV_TRACE("ref_idx", ref_idx, ps_cabac->u4_range);
  767|  44.5k|        }
  768|       |
  769|  51.2k|        ref_idx = CLIP3(ref_idx, 0, MAX_DPB_SIZE - 1);
  ------------------
  |  |   40|  51.2k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 51.2k]
  |  |  |  Branch (40:53): [True: 0, False: 51.2k]
  |  |  ------------------
  ------------------
  770|  51.2k|        ps_pu->mv.i1_l1_ref_idx = ref_idx;
  771|       |
  772|  51.2k|        if(ps_slice_hdr->i1_mvd_l1_zero_flag && inter_pred_idc == PRED_BI)
  ------------------
  |  Branch (772:12): [True: 9.42k, False: 41.8k]
  |  Branch (772:49): [True: 4.18k, False: 5.23k]
  ------------------
  773|  4.18k|        {
  774|  4.18k|            ps_pu->mv.s_l1_mv.i2_mvx = 0;
  775|  4.18k|            ps_pu->mv.s_l1_mv.i2_mvy = 0;
  776|  4.18k|        }
  777|  47.0k|        else
  778|  47.0k|        {
  779|  47.0k|            ihevcd_parse_mvd(ps_codec, &ps_pu->mv.s_l1_mv);
  780|  47.0k|        }
  781|       |
  782|  51.2k|        ctxt_idx = IHEVC_CAB_MVP_L0L1;
  783|  51.2k|        value = ihevcd_cabac_decode_bin(ps_cabac,
  784|  51.2k|                                        ps_bitstrm,
  785|  51.2k|                                        ctxt_idx);
  786|       |
  787|  51.2k|        AEV_TRACE("mvp_l0/l1_flag", value, ps_cabac->u4_range);
  788|  51.2k|        ps_pu->b1_l1_mvp_idx = value;
  789|       |
  790|  51.2k|    }
  791|       |
  792|   131k|    ps_pu->b2_pred_mode = inter_pred_idc;
  793|   131k|    return ret;
  794|   131k|}
ihevcd_parse_prediction_unit:
  820|   621k|{
  821|   621k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  822|   621k|    slice_header_t *ps_slice_hdr;
  823|   621k|    sps_t *ps_sps;
  824|   621k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  825|   621k|    WORD32 ctb_x_base;
  826|   621k|    WORD32 ctb_y_base;
  827|       |
  828|   621k|    pu_t *ps_pu = ps_codec->s_parse.ps_pu;
  829|   621k|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  830|       |
  831|   621k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
  832|       |
  833|       |    /* Set PU structure to default values */
  834|   621k|    memset(ps_pu, 0, sizeof(pu_t));
  835|       |
  836|   621k|    ps_sps = ps_codec->s_parse.ps_sps;
  837|   621k|    ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
  838|   621k|    ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
  839|       |
  840|   621k|    ps_pu->b4_pos_x = (x0 - ctb_x_base) >> 2;
  841|   621k|    ps_pu->b4_pos_y = (y0 - ctb_y_base) >> 2;
  842|   621k|    ps_pu->b4_wd = (wd >> 2) - 1;
  843|   621k|    ps_pu->b4_ht = (ht >> 2) - 1;
  844|       |
  845|   621k|    ps_pu->b1_intra_flag = 0;
  846|   621k|    ps_pu->b3_part_mode = ps_codec->s_parse.s_cu.i4_part_mode;
  847|       |
  848|   621k|    if(PRED_MODE_SKIP == ps_codec->s_parse.s_cu.i4_pred_mode)
  ------------------
  |  Branch (848:8): [True: 364k, False: 256k]
  ------------------
  849|   364k|    {
  850|   364k|        WORD32 merge_idx = 0;
  851|   364k|        if(ps_slice_hdr->i1_max_num_merge_cand > 1)
  ------------------
  |  Branch (851:12): [True: 364k, False: 189]
  ------------------
  852|   364k|        {
  853|   364k|            WORD32 ctxt_idx = IHEVC_CAB_MERGE_IDX_EXT;
  854|   364k|            WORD32 bin;
  855|       |
  856|   364k|            TRACE_CABAC_CTXT("merge_idx", ps_cabac->u4_range, ctxt_idx);
  857|   364k|            bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  858|   364k|            if(bin)
  ------------------
  |  Branch (858:16): [True: 147k, False: 217k]
  ------------------
  859|   147k|            {
  860|   147k|                if(ps_slice_hdr->i1_max_num_merge_cand > 2)
  ------------------
  |  Branch (860:20): [True: 147k, False: 0]
  ------------------
  861|   147k|                {
  862|   147k|                    merge_idx = ihevcd_cabac_decode_bypass_bins_tunary(
  863|   147k|                                    ps_cabac, ps_bitstrm,
  864|   147k|                                    (ps_slice_hdr->i1_max_num_merge_cand - 2));
  865|   147k|                }
  866|   147k|                merge_idx++;
  867|   147k|            }
  868|   364k|            AEV_TRACE("merge_idx", merge_idx, ps_cabac->u4_range);
  869|   364k|        }
  870|   364k|        ps_pu->b1_merge_flag = 1;
  871|   364k|        ps_pu->b3_merge_idx = merge_idx;
  872|       |
  873|   364k|    }
  874|   256k|    else
  875|   256k|    {
  876|       |        /* MODE_INTER */
  877|   256k|        WORD32 merge_flag;
  878|   256k|        WORD32 ctxt_idx = IHEVC_CAB_MERGE_FLAG_EXT;
  879|   256k|        TRACE_CABAC_CTXT("merge_flag", ps_cabac->u4_range, ctxt_idx);
  880|   256k|        merge_flag = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  881|   256k|        AEV_TRACE("merge_flag", merge_flag, ps_cabac->u4_range);
  882|       |
  883|   256k|        ps_pu->b1_merge_flag = merge_flag;
  884|       |
  885|   256k|        if(merge_flag)
  ------------------
  |  Branch (885:12): [True: 125k, False: 131k]
  ------------------
  886|   125k|        {
  887|   125k|            WORD32 merge_idx = 0;
  888|   125k|            if(ps_slice_hdr->i1_max_num_merge_cand > 1)
  ------------------
  |  Branch (888:16): [True: 124k, False: 404]
  ------------------
  889|   124k|            {
  890|   124k|                WORD32 ctxt_idx = IHEVC_CAB_MERGE_IDX_EXT;
  891|   124k|                WORD32 bin;
  892|   124k|                TRACE_CABAC_CTXT("merge_idx", ps_cabac->u4_range, ctxt_idx);
  893|   124k|                bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  894|   124k|                if(bin)
  ------------------
  |  Branch (894:20): [True: 43.2k, False: 81.4k]
  ------------------
  895|  43.2k|                {
  896|  43.2k|                    if(ps_slice_hdr->i1_max_num_merge_cand > 2)
  ------------------
  |  Branch (896:24): [True: 43.2k, False: 2]
  ------------------
  897|  43.2k|                    {
  898|  43.2k|                        merge_idx = ihevcd_cabac_decode_bypass_bins_tunary(
  899|  43.2k|                                        ps_cabac, ps_bitstrm,
  900|  43.2k|                                        (ps_slice_hdr->i1_max_num_merge_cand - 2));
  901|  43.2k|                    }
  902|  43.2k|                    merge_idx++;
  903|  43.2k|                }
  904|   124k|                AEV_TRACE("merge_idx", merge_idx, ps_cabac->u4_range);
  905|   124k|            }
  906|       |
  907|   125k|            ps_pu->b3_merge_idx = merge_idx;
  908|   125k|        }
  909|   131k|        else
  910|   131k|        {
  911|   131k|            ihevcd_parse_pu_mvp(ps_codec, ps_pu);
  912|   131k|        }
  913|       |
  914|   256k|    }
  915|   621k|    STATS_UPDATE_PU_SIZE(ps_pu);
  ------------------
  |  |  145|   621k|#define STATS_UPDATE_PU_SIZE(ps_pu) ;
  ------------------
  916|       |    /* Increment PU pointer */
  917|   621k|    ps_codec->s_parse.ps_pu++;
  918|   621k|    ps_codec->s_parse.i4_pic_pu_idx++;
  919|   621k|    return ret;
  920|   621k|}
ihevcd_parse_part_mode_amp:
  924|  26.5k|{
  925|  26.5k|    WORD32 ctxt_idx = IHEVC_CAB_PART_MODE;
  926|  26.5k|    WORD32 part_mode_idx;
  927|  26.5k|    WORD32 part_mode;
  928|  26.5k|    WORD32 bin;
  929|       |
  930|  26.5k|    part_mode = 0;
  931|  26.5k|    TRACE_CABAC_CTXT("part_mode", ps_cabac->u4_range, ctxt_idx);
  932|  26.5k|    bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx++);
  933|       |
  934|  26.5k|    if(!bin)
  ------------------
  |  Branch (934:8): [True: 17.7k, False: 8.72k]
  ------------------
  935|  17.7k|    {
  936|  17.7k|        bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx++);
  937|  17.7k|        part_mode_idx = bin;
  938|  17.7k|        part_mode_idx <<= 1;
  939|       |
  940|       |        /* Following takes of handling context increment for 3rd bin in part_mode */
  941|       |        /* When AMP is enabled and the current is not min CB */
  942|       |        /* Context for 3rd bin is 3 and not 2 */
  943|  17.7k|        ctxt_idx += 1;
  944|       |
  945|  17.7k|        bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
  946|  17.7k|        part_mode_idx |= bin;
  947|       |
  948|  17.7k|        part_mode_idx <<= 1;
  949|  17.7k|        if(!bin)
  ------------------
  |  Branch (949:12): [True: 8.64k, False: 9.13k]
  ------------------
  950|  8.64k|        {
  951|       |
  952|  8.64k|            bin = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
  953|  8.64k|            part_mode_idx |= bin;
  954|  8.64k|        }
  955|  17.7k|        part_mode = gau1_part_mode_amp[part_mode_idx];
  956|  17.7k|    }
  957|  26.5k|    return part_mode;
  958|  26.5k|}
ihevcd_parse_coding_unit_intra:
  963|  2.32M|{
  964|  2.32M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  965|  2.32M|    sps_t *ps_sps;
  966|  2.32M|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
  967|  2.32M|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  968|  2.32M|    WORD32 pcm_flag;
  969|  2.32M|    WORD32 value;
  970|  2.32M|    WORD32 cb_size = 1 << log2_cb_size;
  971|  2.32M|    WORD32 part_mode =  ps_codec->s_parse.s_cu.i4_part_mode;
  972|  2.32M|    tu_t *ps_tu = ps_codec->s_parse.ps_tu;
  973|  2.32M|    pu_t *ps_pu = ps_codec->s_parse.ps_pu;
  974|  2.32M|    WORD32 ctb_x_base;
  975|  2.32M|    WORD32 ctb_y_base;
  976|  2.32M|    ps_sps = ps_codec->s_parse.ps_sps;
  977|  2.32M|    ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
  978|  2.32M|    ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
  979|       |
  980|  2.32M|    memset(ps_pu, 0, sizeof(pu_t));
  981|  2.32M|    ps_pu->b1_intra_flag = 1;
  982|  2.32M|    ps_pu->b4_wd = (cb_size >> 2) - 1;
  983|  2.32M|    ps_pu->b4_ht = (cb_size >> 2) - 1;
  984|  2.32M|    ps_pu->b4_pos_x = (x0 - ctb_x_base) >> 2;
  985|  2.32M|    ps_pu->b4_pos_y = (y0 - ctb_y_base) >> 2;
  986|       |
  987|  2.32M|    pcm_flag = 0;
  988|  2.32M|    if((PART_2Nx2N == part_mode) && (ps_sps->i1_pcm_enabled_flag)
  ------------------
  |  Branch (988:8): [True: 1.99M, False: 333k]
  |  Branch (988:37): [True: 19.6k, False: 1.97M]
  ------------------
  989|  2.32M|                    && (log2_cb_size
  ------------------
  |  Branch (989:24): [True: 17.0k, False: 2.62k]
  ------------------
  990|  19.6k|                                    >= ps_sps->i1_log2_min_pcm_coding_block_size)
  991|  2.32M|                    && (log2_cb_size
  ------------------
  |  Branch (991:24): [True: 15.7k, False: 1.23k]
  ------------------
  992|  17.0k|                                    <= (ps_sps->i1_log2_min_pcm_coding_block_size + ps_sps->i1_log2_diff_max_min_pcm_coding_block_size)))
  993|  15.7k|    {
  994|  15.7k|        TRACE_CABAC_CTXT("pcm_flag", ps_cabac->u4_range, 0);
  995|  15.7k|        pcm_flag = ihevcd_cabac_decode_terminate(ps_cabac, ps_bitstrm);
  996|  15.7k|        AEV_TRACE("pcm_flag", pcm_flag, ps_cabac->u4_range);
  997|  15.7k|    }
  998|       |
  999|  2.32M|    ps_codec->s_parse.i4_cu_pcm_flag = pcm_flag;
 1000|  2.32M|    if(pcm_flag)
  ------------------
  |  Branch (1000:8): [True: 32, False: 2.32M]
  ------------------
 1001|     32|    {
 1002|     32|        UWORD8 *pu1_luma_intra_pred_mode_top, *pu1_luma_intra_pred_mode_left;
 1003|     32|        WORD32 i,  num_pred_blocks;
 1004|       |
 1005|     32|        if(ps_codec->s_parse.s_bitstrm.u4_bit_ofst % 8)
  ------------------
  |  Branch (1005:12): [True: 25, False: 7]
  ------------------
 1006|     25|        {
 1007|     25|            TRACE_CABAC_CTXT("pcm_alignment_zero_bit", ps_cabac->u4_range, 0);
 1008|     25|            ihevcd_bits_flush_to_byte_boundary(&ps_codec->s_parse.s_bitstrm);
 1009|     25|            AEV_TRACE("pcm_alignment_zero_bit", 0, ps_cabac->u4_range);
 1010|     25|        }
 1011|       |
 1012|     32|        ihevcd_parse_pcm_sample(ps_codec, x0, y0, log2_cb_size);
 1013|       |
 1014|     32|        ihevcd_cabac_reset(&ps_codec->s_parse.s_cabac,
 1015|     32|                           &ps_codec->s_parse.s_bitstrm);
 1016|       |
 1017|     32|        ps_tu = ps_codec->s_parse.ps_tu;
 1018|     32|        ps_tu->b1_cb_cbf = 1;
 1019|     32|        ps_tu->b1_cr_cbf = 1;
 1020|     32|        ps_tu->b1_y_cbf = 1;
 1021|     32|        ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
 1022|     32|        ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
 1023|     32|        ps_tu->b1_transquant_bypass = 1;
 1024|     32|        ps_tu->b3_size = (log2_cb_size - 2);
 1025|     32|        ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
 1026|     32|        ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
  ------------------
  |  |  518|     32|#define INTRA_PRED_CHROMA_IDX_NONE  7
  ------------------
 1027|     32|        ps_tu->b6_luma_intra_mode   = INTRA_PRED_NONE;
  ------------------
  |  |  511|     32|#define INTRA_PRED_NONE  63
  ------------------
 1028|       |
 1029|       |        /* Set the first TU in CU flag */
 1030|     32|        {
 1031|     32|            if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
  ------------------
  |  Branch (1031:16): [True: 32, False: 0]
  ------------------
 1032|     32|                            (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
  ------------------
  |  Branch (1032:29): [True: 32, False: 0]
  ------------------
 1033|     32|            {
 1034|     32|                ps_tu->b1_first_tu_in_cu = 1;
 1035|     32|            }
 1036|      0|            else
 1037|      0|            {
 1038|      0|                ps_tu->b1_first_tu_in_cu = 0;
 1039|      0|            }
 1040|     32|        }
 1041|       |
 1042|       |        /* Update the intra pred mode for PCM to INTRA_DC(default mode) */
 1043|     32|        pu1_luma_intra_pred_mode_top = ps_codec->s_parse.pu1_luma_intra_pred_mode_top
 1044|     32|                        + (ps_codec->s_parse.s_cu.i4_pos_x * 2);
 1045|       |
 1046|     32|        pu1_luma_intra_pred_mode_left = ps_codec->s_parse.pu1_luma_intra_pred_mode_left
 1047|     32|                        + (ps_codec->s_parse.s_cu.i4_pos_y * 2);
 1048|       |
 1049|     32|        num_pred_blocks = 1; /* Because PCM part mode will be 2Nx2N */
 1050|       |
 1051|     32|        ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_left, INTRA_DC, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
  ------------------
  |  |  504|     32|#define INTRA_DC                 1
  ------------------
                      ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_left, INTRA_DC, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
  ------------------
  |  |  357|     32|#define MIN_PU_SIZE         4
  ------------------
 1052|     32|        ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_top, INTRA_DC, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
  ------------------
  |  |  504|     32|#define INTRA_DC                 1
  ------------------
                      ps_codec->s_func_selector.ihevc_memset_fptr(pu1_luma_intra_pred_mode_top, INTRA_DC, (cb_size / num_pred_blocks) / MIN_PU_SIZE);
  ------------------
  |  |  357|     32|#define MIN_PU_SIZE         4
  ------------------
 1053|       |
 1054|       |
 1055|       |        /* Set no_loop_filter appropriately */
 1056|     32|        if(1 == ps_sps->i1_pcm_loop_filter_disable_flag)
  ------------------
  |  Branch (1056:12): [True: 32, False: 0]
  ------------------
 1057|     32|        {
 1058|     32|            UWORD8 *pu1_pic_no_loop_filter_flag;
 1059|     32|            WORD32 numbytes_row;
 1060|     32|            UWORD32 u4_mask;
 1061|       |
 1062|     32|            pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
 1063|     32|            numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
 1064|     32|            pu1_pic_no_loop_filter_flag += (y0 / 8) * numbytes_row;
 1065|     32|            pu1_pic_no_loop_filter_flag += (x0 / 64);
 1066|       |            /* Generate (cb_size / 8) number of 1s */
 1067|       |            /* i.e (log2_cb_size - 2) number of 1s */
 1068|     32|            u4_mask = LSB_ONES((cb_size >> 3));
  ------------------
  |  |   72|     32|#define LSB_ONES(x) ((UWORD32)0xFFFFFFFF >> (32 - (x)))
  ------------------
 1069|     64|            for(i = 0; i < (cb_size / 8); i++)
  ------------------
  |  Branch (1069:24): [True: 32, False: 32]
  ------------------
 1070|     32|            {
 1071|     32|                *pu1_pic_no_loop_filter_flag |= (u4_mask << (((x0) / 8) % 8));
 1072|     32|                pu1_pic_no_loop_filter_flag += numbytes_row;
 1073|     32|            }
 1074|     32|        }
 1075|       |        /* Increment ps_tu and tu_idx */
 1076|     32|        ps_codec->s_parse.ps_tu++;
 1077|     32|        ps_codec->s_parse.s_cu.i4_tu_cnt++;
 1078|     32|        ps_codec->s_parse.i4_pic_tu_idx++;
 1079|       |
 1080|     32|    }
 1081|  2.32M|    else
 1082|  2.32M|    {
 1083|  2.32M|        WORD32 cnt = 0;
 1084|  2.32M|        WORD32 i;
 1085|  2.32M|        WORD32 part_cnt;
 1086|       |
 1087|  2.32M|        part_cnt = (part_mode == PART_NxN) ? 4 : 1;
  ------------------
  |  Branch (1087:20): [True: 333k, False: 1.99M]
  ------------------
 1088|       |
 1089|  5.65M|        for(i = 0; i < part_cnt; i++)
  ------------------
  |  Branch (1089:20): [True: 3.32M, False: 2.32M]
  ------------------
 1090|  3.32M|        {
 1091|  3.32M|            TRACE_CABAC_CTXT("prev_intra_pred_luma_flag", ps_cabac->u4_range, IHEVC_CAB_INTRA_LUMA_PRED_FLAG);
 1092|  3.32M|            value = ihevcd_cabac_decode_bin(ps_cabac,
 1093|  3.32M|                                            ps_bitstrm,
 1094|  3.32M|                                            IHEVC_CAB_INTRA_LUMA_PRED_FLAG);
 1095|       |
 1096|  3.32M|            ps_codec->s_parse.s_cu.ai4_prev_intra_luma_pred_flag[i] =
 1097|  3.32M|                            value;
 1098|  3.32M|            AEV_TRACE("prev_intra_pred_luma_flag", value, ps_cabac->u4_range);
 1099|  3.32M|        }
 1100|       |
 1101|  5.65M|        for(i = 0; i < part_cnt; i++)
  ------------------
  |  Branch (1101:20): [True: 3.32M, False: 2.32M]
  ------------------
 1102|  3.32M|        {
 1103|  3.32M|            if(ps_codec->s_parse.s_cu.ai4_prev_intra_luma_pred_flag[cnt])
  ------------------
  |  Branch (1103:16): [True: 1.97M, False: 1.34M]
  ------------------
 1104|  1.97M|            {
 1105|  1.97M|                value = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac, ps_bitstrm, 2);
 1106|  1.97M|                AEV_TRACE("mpm_idx", value, ps_cabac->u4_range);
 1107|  1.97M|                ps_codec->s_parse.s_cu.ai4_mpm_idx[cnt] = value;
 1108|  1.97M|            }
 1109|  1.34M|            else
 1110|  1.34M|            {
 1111|  1.34M|                value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 5);
 1112|  1.34M|                AEV_TRACE("rem_intra_luma_pred_mode", value,
 1113|  1.34M|                          ps_cabac->u4_range);
 1114|  1.34M|                ps_codec->s_parse.s_cu.ai4_rem_intra_luma_pred_mode[cnt] =
 1115|  1.34M|                                value;
 1116|  1.34M|            }
 1117|  3.32M|            cnt++;
 1118|  3.32M|        }
 1119|  2.32M|        TRACE_CABAC_CTXT("intra_chroma_pred_mode", ps_cabac->u4_range, IHEVC_CAB_CHROMA_PRED_MODE);
 1120|  2.32M|        value = ihevcd_cabac_decode_bin(ps_cabac,
 1121|  2.32M|                                        ps_bitstrm,
 1122|  2.32M|                                        IHEVC_CAB_CHROMA_PRED_MODE);
 1123|  2.32M|        ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx = 4;
 1124|  2.32M|        if(value)
  ------------------
  |  Branch (1124:12): [True: 303k, False: 2.02M]
  ------------------
 1125|   303k|        {
 1126|   303k|            ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx =
 1127|   303k|                            ihevcd_cabac_decode_bypass_bins(ps_cabac,
 1128|   303k|                                                            ps_bitstrm, 2);
 1129|   303k|        }
 1130|  2.32M|        AEV_TRACE("intra_chroma_pred_mode",
 1131|  2.32M|                  ps_codec->s_parse.s_cu.i4_intra_chroma_pred_mode_idx,
 1132|  2.32M|                  ps_cabac->u4_range);
 1133|       |
 1134|       |
 1135|  2.32M|        ihevcd_intra_pred_mode_prediction(ps_codec, log2_cb_size, x0, y0);
 1136|  2.32M|    }
 1137|  2.32M|    STATS_UPDATE_PU_SIZE(ps_pu);
  ------------------
  |  |  145|  2.32M|#define STATS_UPDATE_PU_SIZE(ps_pu) ;
  ------------------
 1138|       |    /* Increment PU pointer */
 1139|  2.32M|    ps_codec->s_parse.ps_pu++;
 1140|  2.32M|    ps_codec->s_parse.i4_pic_pu_idx++;
 1141|       |
 1142|  2.32M|    return ret;
 1143|  2.32M|}
ihevcd_parse_coding_unit:
 1168|  2.84M|{
 1169|  2.84M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1170|  2.84M|    sps_t *ps_sps;
 1171|  2.84M|    pps_t *ps_pps;
 1172|  2.84M|    WORD32 cb_size;
 1173|  2.84M|    slice_header_t *ps_slice_hdr;
 1174|  2.84M|    WORD32 skip_flag;
 1175|  2.84M|    WORD32 pcm_flag;
 1176|  2.84M|    UWORD32 *pu4_skip_top = ps_codec->s_parse.pu4_skip_cu_top;
 1177|  2.84M|    UWORD32 u4_skip_left = ps_codec->s_parse.u4_skip_cu_left;
 1178|  2.84M|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
 1179|  2.84M|    tu_t *ps_tu = ps_codec->s_parse.ps_tu;
 1180|       |
 1181|  2.84M|    WORD32 cu_pos_x;
 1182|  2.84M|    WORD32 cu_pos_y;
 1183|  2.84M|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
 1184|       |
 1185|  2.84M|    ASSERT(0 == (x0 % 8));
  ------------------
  |  |   55|  2.84M|#define ASSERT(x) assert((x))
  ------------------
 1186|  2.84M|    ASSERT(0 == (y0 % 8));
  ------------------
  |  |   55|  2.84M|#define ASSERT(x) assert((x))
  ------------------
 1187|       |
 1188|  2.84M|    ps_codec->s_parse.s_cu.i4_tu_cnt = 0;
 1189|  2.84M|    ps_sps = ps_codec->s_parse.ps_sps;
 1190|  2.84M|    ps_pps = ps_codec->s_parse.ps_pps;
 1191|       |
 1192|  2.84M|    cu_pos_x = ps_codec->s_parse.s_cu.i4_pos_x;
 1193|  2.84M|    cu_pos_y = ps_codec->s_parse.s_cu.i4_pos_y;
 1194|       |
 1195|       |
 1196|       |
 1197|  2.84M|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
 1198|       |
 1199|       |
 1200|  2.84M|    cb_size = 1 << log2_cb_size;
 1201|       |
 1202|  2.84M|    ps_codec->s_parse.s_cu.i4_cu_transquant_bypass = 0;
 1203|       |
 1204|  2.84M|    if(ps_pps->i1_transquant_bypass_enable_flag)
  ------------------
  |  Branch (1204:8): [True: 104k, False: 2.73M]
  ------------------
 1205|   104k|    {
 1206|   104k|        TRACE_CABAC_CTXT("cu_transquant_bypass_flag", ps_cabac->u4_range, IHEVC_CAB_CU_TQ_BYPASS_FLAG);
 1207|   104k|        ps_codec->s_parse.s_cu.i4_cu_transquant_bypass =
 1208|   104k|                        ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
 1209|   104k|                                                IHEVC_CAB_CU_TQ_BYPASS_FLAG);
 1210|       |        /* Update transquant_bypass in ps_tu */
 1211|       |
 1212|   104k|        AEV_TRACE("cu_transquant_bypass_flag", ps_codec->s_parse.s_cu.i4_cu_transquant_bypass,
 1213|   104k|                  ps_cabac->u4_range);
 1214|       |
 1215|   104k|        if(ps_codec->s_parse.s_cu.i4_cu_transquant_bypass)
  ------------------
  |  Branch (1215:12): [True: 52.6k, False: 51.3k]
  ------------------
 1216|  52.6k|        {
 1217|  52.6k|            UWORD8 *pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
 1218|  52.6k|            UWORD32 u4_mask;
 1219|  52.6k|            WORD32 i;
 1220|  52.6k|            WORD32 numbytes_row;
 1221|  52.6k|            numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
 1222|  52.6k|            pu1_pic_no_loop_filter_flag += (y0 / 8) * numbytes_row;
 1223|  52.6k|            pu1_pic_no_loop_filter_flag += (x0 / 64);
 1224|       |
 1225|       |            /* Generate (cb_size / 8) number of 1s */
 1226|       |            /* i.e (log2_cb_size - 2) number of 1s */
 1227|  52.6k|            u4_mask = LSB_ONES((cb_size >> 3));
  ------------------
  |  |   72|  52.6k|#define LSB_ONES(x) ((UWORD32)0xFFFFFFFF >> (32 - (x)))
  ------------------
 1228|   177k|            for(i = 0; i < (cb_size / 8); i++)
  ------------------
  |  Branch (1228:24): [True: 124k, False: 52.6k]
  ------------------
 1229|   124k|            {
 1230|   124k|                *pu1_pic_no_loop_filter_flag |= (u4_mask << (((x0) / 8) % 8));
 1231|   124k|                pu1_pic_no_loop_filter_flag += numbytes_row;
 1232|   124k|            }
 1233|  52.6k|        }
 1234|   104k|    }
 1235|       |
 1236|  2.84M|    {
 1237|  2.84M|        UWORD32 u4_skip_top = 0;
 1238|  2.84M|        UWORD32 u4_mask;
 1239|  2.84M|        UWORD32 u4_top_mask, u4_left_mask;
 1240|  2.84M|        UWORD32 u4_min_cu_x = x0 / 8;
 1241|  2.84M|        UWORD32 u4_min_cu_y = y0 / 8;
 1242|       |
 1243|  2.84M|        pu4_skip_top += (u4_min_cu_x / 32);
 1244|       |
 1245|       |
 1246|  2.84M|        if(ps_slice_hdr->i1_slice_type != ISLICE)
  ------------------
  |  Branch (1246:12): [True: 525k, False: 2.31M]
  ------------------
 1247|   525k|        {
 1248|   525k|            WORD32 ctx_idx_inc;
 1249|   525k|            ctx_idx_inc = 0;
 1250|       |
 1251|   525k|            if((0 != cu_pos_y) ||
  ------------------
  |  Branch (1251:16): [True: 410k, False: 114k]
  ------------------
 1252|   525k|                            ((0 != ps_codec->s_parse.i4_ctb_slice_y) &&
  ------------------
  |  Branch (1252:30): [True: 99.4k, False: 14.6k]
  ------------------
 1253|   114k|                                            (0 != ps_codec->s_parse.i4_ctb_tile_y)))
  ------------------
  |  Branch (1253:45): [True: 98.8k, False: 562]
  ------------------
 1254|   509k|            {
 1255|   509k|                u4_skip_top = *pu4_skip_top;
 1256|   509k|                u4_skip_top >>= (u4_min_cu_x % 32);
 1257|   509k|                if(u4_skip_top & 1)
  ------------------
  |  Branch (1257:20): [True: 354k, False: 155k]
  ------------------
 1258|   354k|                    ctx_idx_inc++;
 1259|   509k|            }
 1260|       |
 1261|       |            /*****************************************************************/
 1262|       |            /* If cu_pos_x is non-zero then left is available                */
 1263|       |            /* If cu_pos_x is zero then ensure both the following are true   */
 1264|       |            /*    Current CTB is not the first CTB in a tile row             */
 1265|       |            /*    Current CTB is not the first CTB in a slice                */
 1266|       |            /*****************************************************************/
 1267|   525k|            if((0 != cu_pos_x) ||
  ------------------
  |  Branch (1267:16): [True: 406k, False: 118k]
  ------------------
 1268|   525k|                            (((0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) &&
  ------------------
  |  Branch (1268:31): [True: 101k, False: 16.4k]
  |  Branch (1268:74): [True: 14.2k, False: 2.20k]
  ------------------
 1269|   118k|                                            (0 != ps_codec->s_parse.i4_ctb_tile_x)))
  ------------------
  |  Branch (1269:45): [True: 101k, False: 14.3k]
  ------------------
 1270|   508k|            {
 1271|   508k|                u4_skip_left >>= (u4_min_cu_y % 32);
 1272|   508k|                if(u4_skip_left & 1)
  ------------------
  |  Branch (1272:20): [True: 352k, False: 156k]
  ------------------
 1273|   352k|                    ctx_idx_inc++;
 1274|   508k|            }
 1275|   525k|            TRACE_CABAC_CTXT("cu_skip_flag", ps_cabac->u4_range, (IHEVC_CAB_SKIP_FLAG + ctx_idx_inc));
 1276|   525k|            skip_flag = ihevcd_cabac_decode_bin(ps_cabac,
 1277|   525k|                                                ps_bitstrm,
 1278|   525k|                                                (IHEVC_CAB_SKIP_FLAG + ctx_idx_inc));
 1279|       |
 1280|   525k|            AEV_TRACE("cu_skip_flag", skip_flag, ps_cabac->u4_range);
 1281|   525k|        }
 1282|  2.31M|        else
 1283|  2.31M|            skip_flag = 0;
 1284|       |
 1285|       |        /* Update top skip_flag */
 1286|  2.84M|        u4_skip_top = *pu4_skip_top;
 1287|       |        /* Since Max cb_size is 64, maximum of 8 bits will be set or reset */
 1288|       |        /* Also since Coding block will be within 64x64 grid, only 8bits within a WORD32
 1289|       |         * need to be updated. These 8 bits will not cross 8 bit boundaries
 1290|       |         */
 1291|  2.84M|        u4_mask = LSB_ONES(cb_size / 8);
  ------------------
  |  |   72|  2.84M|#define LSB_ONES(x) ((UWORD32)0xFFFFFFFF >> (32 - (x)))
  ------------------
 1292|  2.84M|        u4_top_mask = u4_mask << (u4_min_cu_x % 32);
 1293|       |
 1294|       |
 1295|  2.84M|        if(skip_flag)
  ------------------
  |  Branch (1295:12): [True: 364k, False: 2.47M]
  ------------------
 1296|   364k|        {
 1297|   364k|            u4_skip_top |= u4_top_mask;
 1298|   364k|        }
 1299|  2.47M|        else
 1300|  2.47M|        {
 1301|  2.47M|            u4_skip_top &= ~u4_top_mask;
 1302|  2.47M|        }
 1303|  2.84M|        *pu4_skip_top = u4_skip_top;
 1304|       |
 1305|       |        /* Update left skip_flag */
 1306|  2.84M|        u4_skip_left = ps_codec->s_parse.u4_skip_cu_left;
 1307|  2.84M|        u4_mask = LSB_ONES(cb_size / 8);
  ------------------
  |  |   72|  2.84M|#define LSB_ONES(x) ((UWORD32)0xFFFFFFFF >> (32 - (x)))
  ------------------
 1308|  2.84M|        u4_left_mask = u4_mask << (u4_min_cu_y % 32);
 1309|       |
 1310|  2.84M|        if(skip_flag)
  ------------------
  |  Branch (1310:12): [True: 364k, False: 2.47M]
  ------------------
 1311|   364k|        {
 1312|   364k|            u4_skip_left |= u4_left_mask;
 1313|   364k|        }
 1314|  2.47M|        else
 1315|  2.47M|        {
 1316|  2.47M|            u4_skip_left &= ~u4_left_mask;
 1317|  2.47M|        }
 1318|  2.84M|        ps_codec->s_parse.u4_skip_cu_left = u4_skip_left;
 1319|  2.84M|    }
 1320|  2.84M|    ps_codec->s_parse.i4_cu_pcm_flag = 0;
 1321|       |
 1322|  2.84M|    if(skip_flag)
  ------------------
  |  Branch (1322:8): [True: 364k, False: 2.47M]
  ------------------
 1323|   364k|    {
 1324|   364k|        WORD32 ctb_x_base;
 1325|   364k|        WORD32 ctb_y_base;
 1326|       |
 1327|   364k|        ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
 1328|   364k|        ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
 1329|       |
 1330|   364k|        ps_tu->b1_cb_cbf = 0;
 1331|   364k|        ps_tu->b1_cr_cbf = 0;
 1332|   364k|        ps_tu->b1_y_cbf = 0;
 1333|   364k|        ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
 1334|   364k|        ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
 1335|   364k|        ps_tu->b1_transquant_bypass = 0;
 1336|   364k|        ps_tu->b3_size = (log2_cb_size - 2);
 1337|   364k|        ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
 1338|   364k|        ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
  ------------------
  |  |  518|   364k|#define INTRA_PRED_CHROMA_IDX_NONE  7
  ------------------
 1339|   364k|        ps_tu->b6_luma_intra_mode   = INTRA_PRED_NONE;
  ------------------
  |  |  511|   364k|#define INTRA_PRED_NONE  63
  ------------------
 1340|       |
 1341|       |        /* Set the first TU in CU flag */
 1342|   364k|        {
 1343|   364k|            if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
  ------------------
  |  Branch (1343:16): [True: 364k, False: 0]
  ------------------
 1344|   364k|                            (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
  ------------------
  |  Branch (1344:29): [True: 364k, False: 0]
  ------------------
 1345|   364k|            {
 1346|   364k|                ps_tu->b1_first_tu_in_cu = 1;
 1347|   364k|            }
 1348|      0|            else
 1349|      0|            {
 1350|      0|                ps_tu->b1_first_tu_in_cu = 0;
 1351|      0|            }
 1352|   364k|        }
 1353|       |
 1354|   364k|        ps_codec->s_parse.ps_tu++;
 1355|   364k|        ps_codec->s_parse.s_cu.i4_tu_cnt++;
 1356|   364k|        ps_codec->s_parse.i4_pic_tu_idx++;
 1357|       |
 1358|   364k|        ps_codec->s_parse.s_cu.i4_pred_mode = PRED_MODE_SKIP;
 1359|   364k|        ps_codec->s_parse.s_cu.i4_part_mode = PART_2Nx2N;
 1360|   364k|        {
 1361|   364k|            pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1362|   364k|            ps_pu->b2_part_idx = 0;
 1363|   364k|            ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size);
 1364|   364k|            STATS_UPDATE_PU_SKIP_SIZE(ps_pu);
  ------------------
  |  |  146|   364k|#define STATS_UPDATE_PU_SKIP_SIZE(ps_pu) ;
  ------------------
 1365|   364k|        }
 1366|   364k|    }
 1367|  2.47M|    else
 1368|  2.47M|    {
 1369|  2.47M|        WORD32 pred_mode;
 1370|  2.47M|        WORD32 part_mode;
 1371|  2.47M|        WORD32 intra_split_flag;
 1372|  2.47M|        WORD32 is_mincb;
 1373|  2.47M|        cb_size = (1 << log2_cb_size);
 1374|  2.47M|        is_mincb = (cb_size == (1 << ps_sps->i1_log2_min_coding_block_size));
 1375|  2.47M|        pcm_flag = 0;
 1376|  2.47M|        if(ps_slice_hdr->i1_slice_type != ISLICE)
  ------------------
  |  Branch (1376:12): [True: 160k, False: 2.31M]
  ------------------
 1377|   160k|        {
 1378|   160k|            TRACE_CABAC_CTXT("pred_mode_flag", ps_cabac->u4_range, IHEVC_CAB_PRED_MODE);
 1379|   160k|            pred_mode = ihevcd_cabac_decode_bin(ps_cabac,
 1380|   160k|                                                ps_bitstrm,
 1381|   160k|                                                IHEVC_CAB_PRED_MODE);
 1382|       |
 1383|   160k|            AEV_TRACE("pred_mode_flag", pred_mode, ps_cabac->u4_range);
 1384|   160k|        }
 1385|  2.31M|        else
 1386|  2.31M|        {
 1387|  2.31M|            pred_mode = PRED_MODE_INTRA;
 1388|  2.31M|        }
 1389|       |
 1390|       |        /* If current CU is intra then set corresponging bit in picture level intra map */
 1391|  2.47M|        if(PRED_MODE_INTRA == pred_mode)
  ------------------
  |  Branch (1391:12): [True: 2.32M, False: 152k]
  ------------------
 1392|  2.32M|        {
 1393|  2.32M|            UWORD8 *pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
 1394|  2.32M|            UWORD32 u4_mask;
 1395|  2.32M|            WORD32 i;
 1396|  2.32M|            WORD32 numbytes_row;
 1397|  2.32M|            numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
 1398|  2.32M|            pu1_pic_intra_flag += (y0 / 8) * numbytes_row;
 1399|  2.32M|            pu1_pic_intra_flag += (x0 / 64);
 1400|       |
 1401|       |            /* Generate (cb_size / 8) number of 1s */
 1402|       |            /* i.e (log2_cb_size - 2) number of 1s */
 1403|  2.32M|            u4_mask = LSB_ONES((cb_size >> 3));
  ------------------
  |  |   72|  2.32M|#define LSB_ONES(x) ((UWORD32)0xFFFFFFFF >> (32 - (x)))
  ------------------
 1404|  8.15M|            for(i = 0; i < (cb_size / 8); i++)
  ------------------
  |  Branch (1404:24): [True: 5.82M, False: 2.32M]
  ------------------
 1405|  5.82M|            {
 1406|  5.82M|                *pu1_pic_intra_flag |= (u4_mask << (((x0) / 8) % 8));
 1407|  5.82M|                pu1_pic_intra_flag += numbytes_row;
 1408|  5.82M|            }
 1409|  2.32M|        }
 1410|       |
 1411|  2.47M|        ps_codec->s_parse.s_cu.i4_pred_mode = pred_mode;
 1412|  2.47M|        intra_split_flag = 0;
 1413|  2.47M|        if((PRED_MODE_INTRA != pred_mode) ||
  ------------------
  |  Branch (1413:12): [True: 152k, False: 2.32M]
  ------------------
 1414|  2.47M|                        is_mincb)
  ------------------
  |  Branch (1414:25): [True: 1.86M, False: 461k]
  ------------------
 1415|  2.01M|        {
 1416|  2.01M|            UWORD32 bin;
 1417|  2.01M|            if(PRED_MODE_INTRA == pred_mode)
  ------------------
  |  Branch (1417:16): [True: 1.86M, False: 152k]
  ------------------
 1418|  1.86M|            {
 1419|  1.86M|                TRACE_CABAC_CTXT("part_mode", ps_cabac->u4_range, IHEVC_CAB_PART_MODE);
 1420|  1.86M|                bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, IHEVC_CAB_PART_MODE);
 1421|  1.86M|                part_mode = (bin) ? PART_2Nx2N : PART_NxN;
  ------------------
  |  Branch (1421:29): [True: 1.53M, False: 333k]
  ------------------
 1422|  1.86M|            }
 1423|   152k|            else
 1424|   152k|            {
 1425|   152k|                WORD32 amp_enabled = ps_sps->i1_amp_enabled_flag;
 1426|       |
 1427|   152k|                UWORD32 u4_max_bin_cnt = 0;
 1428|       |
 1429|       |
 1430|       |
 1431|   152k|                if(amp_enabled && !is_mincb)
  ------------------
  |  Branch (1431:20): [True: 145k, False: 7.63k]
  |  Branch (1431:35): [True: 26.5k, False: 118k]
  ------------------
 1432|  26.5k|                {
 1433|  26.5k|                    part_mode = ihevcd_parse_part_mode_amp(ps_cabac, ps_bitstrm);
 1434|  26.5k|                }
 1435|   126k|                else
 1436|   126k|                {
 1437|   126k|                    WORD32 ctxt_inc = IHEVC_CAB_PART_MODE;
 1438|       |
 1439|   126k|                    u4_max_bin_cnt = 2;
 1440|   126k|                    if((is_mincb) && (cb_size > 8))
  ------------------
  |  Branch (1440:24): [True: 122k, False: 4.04k]
  |  Branch (1440:38): [True: 3.25k, False: 118k]
  ------------------
 1441|  3.25k|                    {
 1442|  3.25k|                        u4_max_bin_cnt++;
 1443|  3.25k|                    }
 1444|       |
 1445|   126k|                    part_mode = -1;
 1446|   126k|                    TRACE_CABAC_CTXT("part_mode", ps_cabac->u4_range, IHEVC_CAB_PART_MODE);
 1447|   126k|                    do
 1448|   211k|                    {
 1449|   211k|                        bin = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm,
 1450|   211k|                                                      ctxt_inc++);
 1451|   211k|                        part_mode++;
 1452|   211k|                    }while(--u4_max_bin_cnt && !bin);
  ------------------
  |  Branch (1452:28): [True: 128k, False: 83.4k]
  |  Branch (1452:48): [True: 85.6k, False: 42.8k]
  ------------------
 1453|       |
 1454|       |                    /* If the last bin was zero, then increment part mode by 1 */
 1455|   126k|                    if(!bin)
  ------------------
  |  Branch (1455:24): [True: 48.9k, False: 77.3k]
  ------------------
 1456|  48.9k|                        part_mode++;
 1457|   126k|                }
 1458|       |
 1459|       |
 1460|   152k|            }
 1461|       |
 1462|  2.01M|            AEV_TRACE("part_mode", part_mode, ps_cabac->u4_range);
 1463|       |
 1464|  2.01M|        }
 1465|   461k|        else
 1466|   461k|        {
 1467|   461k|            part_mode = 0;
 1468|   461k|            intra_split_flag = 0;
 1469|   461k|        }
 1470|  2.47M|        ps_codec->s_parse.s_cu.i4_part_mode = part_mode;
 1471|       |
 1472|  2.47M|        if((PRED_MODE_INTRA == ps_codec->s_parse.s_cu.i4_pred_mode) &&
  ------------------
  |  Branch (1472:12): [True: 2.32M, False: 152k]
  ------------------
 1473|  2.47M|                        (PART_NxN == ps_codec->s_parse.s_cu.i4_part_mode))
  ------------------
  |  Branch (1473:25): [True: 333k, False: 1.99M]
  ------------------
 1474|   333k|        {
 1475|   333k|            intra_split_flag = 1;
 1476|   333k|        }
 1477|  2.47M|        ps_codec->s_parse.s_cu.i4_part_mode = part_mode;
 1478|  2.47M|        ps_codec->s_parse.s_cu.i4_intra_split_flag = intra_split_flag;
 1479|  2.47M|        if(pred_mode == PRED_MODE_INTRA)
  ------------------
  |  Branch (1479:12): [True: 2.32M, False: 152k]
  ------------------
 1480|  2.32M|        {
 1481|  2.32M|            ps_codec->s_parse.i4_cu_pcm_flag = 0;
 1482|  2.32M|            ihevcd_parse_coding_unit_intra(ps_codec, x0, y0, log2_cb_size);
 1483|  2.32M|            pcm_flag = ps_codec->s_parse.i4_cu_pcm_flag;
 1484|       |
 1485|  2.32M|        }
 1486|   152k|        else
 1487|   152k|        {
 1488|   152k|            if(part_mode == PART_2Nx2N)
  ------------------
  |  Branch (1488:16): [True: 50.3k, False: 102k]
  ------------------
 1489|  50.3k|            {
 1490|  50.3k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1491|  50.3k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size);
 1492|  50.3k|                ps_pu->b2_part_idx = 0;
 1493|  50.3k|            }
 1494|   102k|            else if(part_mode == PART_2NxN)
  ------------------
  |  Branch (1494:21): [True: 38.8k, False: 63.5k]
  ------------------
 1495|  38.8k|            {
 1496|  38.8k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1497|       |
 1498|  38.8k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size / 2);
 1499|  38.8k|                ps_pu->b2_part_idx = 0;
 1500|       |
 1501|  38.8k|                ps_pu = ps_codec->s_parse.ps_pu;
 1502|  38.8k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size / 2), cb_size, cb_size / 2);
 1503|       |
 1504|  38.8k|                ps_pu->b2_part_idx = 1;
 1505|  38.8k|            }
 1506|  63.5k|            else if(part_mode == PART_Nx2N)
  ------------------
  |  Branch (1506:21): [True: 54.3k, False: 9.14k]
  ------------------
 1507|  54.3k|            {
 1508|  54.3k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1509|  54.3k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size / 2, cb_size);
 1510|  54.3k|                ps_pu->b2_part_idx = 0;
 1511|  54.3k|                ps_pu = ps_codec->s_parse.ps_pu;
 1512|  54.3k|                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 2), y0, cb_size / 2, cb_size);
 1513|       |
 1514|  54.3k|                ps_pu->b2_part_idx = 1;
 1515|  54.3k|            }
 1516|  9.14k|            else if(part_mode == PART_2NxnU)
  ------------------
  |  Branch (1516:21): [True: 1.88k, False: 7.26k]
  ------------------
 1517|  1.88k|            {
 1518|  1.88k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1519|  1.88k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size / 4);
 1520|  1.88k|                ps_pu->b2_part_idx = 0;
 1521|  1.88k|                ps_pu = ps_codec->s_parse.ps_pu;
 1522|  1.88k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size / 4), cb_size, cb_size * 3 / 4);
 1523|       |
 1524|  1.88k|                ps_pu->b2_part_idx = 1;
 1525|  1.88k|            }
 1526|  7.26k|            else if(part_mode == PART_2NxnD)
  ------------------
  |  Branch (1526:21): [True: 1.70k, False: 5.55k]
  ------------------
 1527|  1.70k|            {
 1528|  1.70k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1529|  1.70k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size, cb_size * 3 / 4);
 1530|  1.70k|                ps_pu->b2_part_idx = 0;
 1531|  1.70k|                ps_pu = ps_codec->s_parse.ps_pu;
 1532|  1.70k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size * 3 / 4), cb_size, cb_size / 4);
 1533|       |
 1534|  1.70k|                ps_pu->b2_part_idx = 1;
 1535|  1.70k|            }
 1536|  5.55k|            else if(part_mode == PART_nLx2N)
  ------------------
  |  Branch (1536:21): [True: 2.79k, False: 2.76k]
  ------------------
 1537|  2.79k|            {
 1538|  2.79k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1539|  2.79k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size / 4, cb_size);
 1540|  2.79k|                ps_pu->b2_part_idx = 0;
 1541|  2.79k|                ps_pu = ps_codec->s_parse.ps_pu;
 1542|  2.79k|                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 4), y0, cb_size * 3 / 4, cb_size);
 1543|       |
 1544|  2.79k|                ps_pu->b2_part_idx = 1;
 1545|  2.79k|            }
 1546|  2.76k|            else if(part_mode == PART_nRx2N)
  ------------------
  |  Branch (1546:21): [True: 2.26k, False: 506]
  ------------------
 1547|  2.26k|            {
 1548|  2.26k|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1549|  2.26k|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size * 3 / 4, cb_size);
 1550|  2.26k|                ps_pu->b2_part_idx = 0;
 1551|  2.26k|                ps_pu = ps_codec->s_parse.ps_pu;
 1552|  2.26k|                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size * 3 / 4), y0, cb_size / 4, cb_size);
 1553|  2.26k|                ps_pu->b2_part_idx = 1;
 1554|  2.26k|            }
 1555|    506|            else
 1556|    506|            { /* PART_NxN */
 1557|    506|                pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 1558|       |
 1559|    506|                ihevcd_parse_prediction_unit(ps_codec, x0, y0, cb_size / 2, cb_size / 2);
 1560|    506|                ps_pu->b2_part_idx = 0;
 1561|    506|                ps_pu = ps_codec->s_parse.ps_pu;
 1562|    506|                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 2), y0, cb_size / 2, cb_size / 2);
 1563|       |
 1564|    506|                ps_pu->b2_part_idx = 1;
 1565|    506|                ps_pu = ps_codec->s_parse.ps_pu;
 1566|    506|                ihevcd_parse_prediction_unit(ps_codec, x0, y0 + (cb_size / 2), cb_size / 2, cb_size / 2);
 1567|       |
 1568|    506|                ps_pu->b2_part_idx = 2;
 1569|    506|                ps_pu = ps_codec->s_parse.ps_pu;
 1570|    506|                ihevcd_parse_prediction_unit(ps_codec, x0 + (cb_size / 2), y0 + (cb_size / 2), cb_size / 2, cb_size / 2);
 1571|       |
 1572|    506|                ps_pu->b2_part_idx = 3;
 1573|    506|            }
 1574|   152k|        }
 1575|       |
 1576|  2.47M|        if(!pcm_flag)
  ------------------
  |  Branch (1576:12): [True: 2.47M, False: 32]
  ------------------
 1577|  2.47M|        {
 1578|  2.47M|            WORD32 no_residual_syntax_flag = 0;
 1579|  2.47M|            pu_t *ps_pu;
 1580|       |            /* Since ps_pu is incremented for each PU parsed, decrement by 1 to
 1581|       |             *  access last decoded PU
 1582|       |             */
 1583|  2.47M|            ps_pu = ps_codec->s_parse.ps_pu - 1;
 1584|  2.47M|            if((PRED_MODE_INTRA != pred_mode) &&
  ------------------
  |  Branch (1584:16): [True: 152k, False: 2.32M]
  ------------------
 1585|  2.47M|                            (!((part_mode == PART_2Nx2N) && ps_pu->b1_merge_flag)))
  ------------------
  |  Branch (1585:32): [True: 50.3k, False: 102k]
  |  Branch (1585:61): [True: 14.2k, False: 36.1k]
  ------------------
 1586|   138k|            {
 1587|       |
 1588|   138k|                TRACE_CABAC_CTXT("rqt_root_cbf", ps_cabac->u4_range, IHEVC_CAB_NORES_IDX);
 1589|   138k|                no_residual_syntax_flag = ihevcd_cabac_decode_bin(ps_cabac,
 1590|   138k|                                                                  ps_bitstrm,
 1591|   138k|                                                                  IHEVC_CAB_NORES_IDX);
 1592|       |
 1593|   138k|                AEV_TRACE("rqt_root_cbf", no_residual_syntax_flag,
 1594|   138k|                          ps_cabac->u4_range);
 1595|       |                /* TODO: HACK FOR COMPLIANCE WITH HM REFERENCE DECODER */
 1596|       |                /*********************************************************/
 1597|       |                /* currently the HM decoder expects qtroot cbf instead of */
 1598|       |                /* no_residue_flag which has opposite meaning             */
 1599|       |                /* This will be fixed once the software / spec is fixed   */
 1600|       |                /*********************************************************/
 1601|   138k|                no_residual_syntax_flag = 1 - no_residual_syntax_flag;
 1602|   138k|            }
 1603|       |
 1604|  2.47M|            if(!no_residual_syntax_flag)
  ------------------
  |  Branch (1604:16): [True: 2.35M, False: 118k]
  ------------------
 1605|  2.35M|            {
 1606|       |
 1607|  2.35M|                ps_codec->s_parse.s_cu.i4_max_trafo_depth = (pred_mode == PRED_MODE_INTRA) ?
  ------------------
  |  Branch (1607:61): [True: 2.32M, False: 34.3k]
  ------------------
 1608|  2.32M|                                (ps_sps->i1_max_transform_hierarchy_depth_intra + intra_split_flag) :
 1609|  2.35M|                                (ps_sps->i1_max_transform_hierarchy_depth_inter);
 1610|  2.35M|                ret = ihevcd_parse_transform_tree(ps_codec, x0, y0, x0, y0,
 1611|  2.35M|                                                  log2_cb_size, 0, 0,
 1612|  2.35M|                                                  ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0]);
 1613|  2.35M|                RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|  2.35M|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 15, False: 2.35M]
  |  |  ------------------
  ------------------
 1614|  2.35M|            }
 1615|   118k|            else
 1616|   118k|            {
 1617|   118k|                WORD32 ctb_x_base;
 1618|   118k|                WORD32 ctb_y_base;
 1619|       |
 1620|   118k|                ctb_x_base = ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size;
 1621|   118k|                ctb_y_base = ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size;
 1622|       |
 1623|   118k|                ps_tu = ps_codec->s_parse.ps_tu;
 1624|   118k|                ps_tu->b1_cb_cbf = 0;
 1625|   118k|                ps_tu->b1_cr_cbf = 0;
 1626|   118k|                ps_tu->b1_y_cbf = 0;
 1627|   118k|                ps_tu->b4_pos_x = ((x0 - ctb_x_base) >> 2);
 1628|   118k|                ps_tu->b4_pos_y = ((y0 - ctb_y_base) >> 2);
 1629|   118k|                ps_tu->b1_transquant_bypass = 0;
 1630|   118k|                ps_tu->b3_size = (log2_cb_size - 2);
 1631|   118k|                ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
 1632|   118k|                ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
  ------------------
  |  |  518|   118k|#define INTRA_PRED_CHROMA_IDX_NONE  7
  ------------------
 1633|   118k|                ps_tu->b6_luma_intra_mode   = ps_codec->s_parse.s_cu.ai4_intra_luma_pred_mode[0];
 1634|       |
 1635|       |                /* Set the first TU in CU flag */
 1636|   118k|                {
 1637|   118k|                    if((ps_codec->s_parse.s_cu.i4_pos_x << 3) == (ps_tu->b4_pos_x << 2) &&
  ------------------
  |  Branch (1637:24): [True: 118k, False: 0]
  ------------------
 1638|   118k|                                    (ps_codec->s_parse.s_cu.i4_pos_y << 3) == (ps_tu->b4_pos_y << 2))
  ------------------
  |  Branch (1638:37): [True: 118k, False: 0]
  ------------------
 1639|   118k|                    {
 1640|   118k|                        ps_tu->b1_first_tu_in_cu = 1;
 1641|   118k|                    }
 1642|      0|                    else
 1643|      0|                    {
 1644|      0|                        ps_tu->b1_first_tu_in_cu = 0;
 1645|      0|                    }
 1646|   118k|                }
 1647|   118k|                ps_codec->s_parse.ps_tu++;
 1648|   118k|                ps_codec->s_parse.s_cu.i4_tu_cnt++;
 1649|   118k|                ps_codec->s_parse.i4_pic_tu_idx++;
 1650|       |
 1651|   118k|            }
 1652|  2.47M|        }
 1653|       |
 1654|  2.47M|    }
 1655|       |
 1656|       |
 1657|       |
 1658|       |
 1659|  2.84M|    return ret;
 1660|  2.84M|}
ihevcd_parse_coding_quadtree:
 1689|  3.70M|{
 1690|  3.70M|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1691|  3.70M|    sps_t *ps_sps;
 1692|  3.70M|    pps_t *ps_pps;
 1693|  3.70M|    WORD32 split_cu_flag;
 1694|  3.70M|    WORD32 x1, y1;
 1695|  3.70M|    WORD32 cu_pos_x;
 1696|  3.70M|    WORD32 cu_pos_y;
 1697|  3.70M|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
 1698|  3.70M|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
 1699|  3.70M|    WORD32 cb_size = 1 << log2_cb_size;
 1700|  3.70M|    ps_sps = ps_codec->s_parse.ps_sps;
 1701|  3.70M|    ps_pps = ps_codec->s_parse.ps_pps;
 1702|       |
 1703|       |    /* Compute CU position with respect to current CTB in (8x8) units */
 1704|  3.70M|    cu_pos_x = (x0 - (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size)) >> 3;
 1705|  3.70M|    cu_pos_y = (y0 - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size)) >> 3;
 1706|       |
 1707|  3.70M|    ps_codec->s_parse.s_cu.i4_pos_x = cu_pos_x;
 1708|  3.70M|    ps_codec->s_parse.s_cu.i4_pos_y = cu_pos_y;
 1709|       |
 1710|  3.70M|    ps_codec->s_parse.s_cu.i4_log2_cb_size = log2_cb_size;
 1711|       |
 1712|  3.70M|    ps_codec->s_parse.i4_ct_depth = ct_depth;
 1713|  3.70M|    {
 1714|  3.70M|        UWORD32 *pu4_ct_depth_top = ps_codec->s_parse.pu4_ct_depth_top;
 1715|  3.70M|        UWORD32 u4_ct_depth_left = ps_codec->s_parse.u4_ct_depth_left;
 1716|  3.70M|        UWORD32 u4_ct_depth_top = 0;
 1717|  3.70M|        UWORD32 u4_mask;
 1718|  3.70M|        UWORD32 u4_top_mask, u4_left_mask;
 1719|  3.70M|        WORD32  ctxt_idx;
 1720|  3.70M|        UWORD32 u4_min_cu_x = x0 / 8;
 1721|  3.70M|        UWORD32 u4_min_cu_y = y0 / 8;
 1722|       |
 1723|  3.70M|        pu4_ct_depth_top += (u4_min_cu_x / 16);
 1724|       |
 1725|       |
 1726|       |
 1727|       |
 1728|  3.70M|        if(((x0 + (1 << log2_cb_size)) <= ps_sps->i2_pic_width_in_luma_samples) &&
  ------------------
  |  Branch (1728:12): [True: 3.67M, False: 26.4k]
  ------------------
 1729|  3.70M|                        ((y0 + (1 << log2_cb_size)) <= ps_sps->i2_pic_height_in_luma_samples) &&
  ------------------
  |  Branch (1729:25): [True: 3.64M, False: 37.8k]
  ------------------
 1730|  3.70M|                        (log2_cb_size > ps_sps->i1_log2_min_coding_block_size))
  ------------------
  |  Branch (1730:25): [True: 1.34M, False: 2.29M]
  ------------------
 1731|  1.34M|        {
 1732|       |
 1733|  1.34M|            ctxt_idx = IHEVC_CAB_SPLIT_CU_FLAG;
 1734|       |            /* Split cu context increment is decided based on left and top Coding tree
 1735|       |             * depth which is stored at frame level
 1736|       |             */
 1737|       |            /* Check if the CTB is in first row in the current slice or tile */
 1738|  1.34M|            if((0 != cu_pos_y) ||
  ------------------
  |  Branch (1738:16): [True: 534k, False: 814k]
  ------------------
 1739|  1.34M|                            ((0 != ps_codec->s_parse.i4_ctb_slice_y) &&
  ------------------
  |  Branch (1739:30): [True: 654k, False: 159k]
  ------------------
 1740|   814k|                                            (0 != ps_codec->s_parse.i4_ctb_tile_y)))
  ------------------
  |  Branch (1740:45): [True: 653k, False: 1.02k]
  ------------------
 1741|  1.18M|            {
 1742|  1.18M|                u4_ct_depth_top = *pu4_ct_depth_top;
 1743|  1.18M|                u4_ct_depth_top >>= ((u4_min_cu_x % 16) * 2);
 1744|  1.18M|                u4_ct_depth_top &= 3;
 1745|       |
 1746|  1.18M|                if((WORD32)u4_ct_depth_top > ct_depth)
  ------------------
  |  Branch (1746:20): [True: 639k, False: 548k]
  ------------------
 1747|   639k|                    ctxt_idx++;
 1748|  1.18M|            }
 1749|       |
 1750|       |            /* Check if the CTB is in first column in the current slice or tile */
 1751|       |            /*****************************************************************/
 1752|       |            /* If cu_pos_x is non-zero then left is available                */
 1753|       |            /* If cu_pos_x is zero then ensure both the following are true   */
 1754|       |            /*    Current CTB is not the first CTB in a tile row             */
 1755|       |            /*    Current CTB is not the first CTB in a slice                */
 1756|       |            /*****************************************************************/
 1757|  1.34M|            if((0 != cu_pos_x) ||
  ------------------
  |  Branch (1757:16): [True: 548k, False: 800k]
  ------------------
 1758|  1.34M|                            (((0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) &&
  ------------------
  |  Branch (1758:31): [True: 767k, False: 32.9k]
  |  Branch (1758:74): [True: 22.4k, False: 10.4k]
  ------------------
 1759|   800k|                                            (0 != ps_codec->s_parse.i4_ctb_tile_x)))
  ------------------
  |  Branch (1759:45): [True: 767k, False: 22.7k]
  ------------------
 1760|  1.31M|            {
 1761|  1.31M|                u4_ct_depth_left >>= ((u4_min_cu_y % 16) * 2);
 1762|  1.31M|                u4_ct_depth_left &= 3;
 1763|  1.31M|                if((WORD32)u4_ct_depth_left > ct_depth)
  ------------------
  |  Branch (1763:20): [True: 734k, False: 581k]
  ------------------
 1764|   734k|                    ctxt_idx++;
 1765|  1.31M|            }
 1766|  1.34M|            TRACE_CABAC_CTXT("split_cu_flag", ps_cabac->u4_range, ctxt_idx);
 1767|  1.34M|            split_cu_flag = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
 1768|  1.34M|            AEV_TRACE("split_cu_flag", split_cu_flag, ps_cabac->u4_range);
 1769|  1.34M|        }
 1770|  2.35M|        else
 1771|  2.35M|        {
 1772|  2.35M|            if(log2_cb_size > ps_sps->i1_log2_min_coding_block_size)
  ------------------
  |  Branch (1772:16): [True: 64.3k, False: 2.29M]
  ------------------
 1773|  64.3k|                split_cu_flag = 1;
 1774|  2.29M|            else
 1775|  2.29M|                split_cu_flag = 0;
 1776|  2.35M|        }
 1777|       |
 1778|  3.70M|        if(0 == split_cu_flag)
  ------------------
  |  Branch (1778:12): [True: 2.84M, False: 861k]
  ------------------
 1779|  2.84M|        {
 1780|       |            /* Update top ct_depth */
 1781|  2.84M|            u4_ct_depth_top = *pu4_ct_depth_top;
 1782|       |            /* Since Max cb_size is 64, maximum of 8 bits will be set or reset */
 1783|       |            /* Also since Coding block will be within 64x64 grid, only 8bits within a WORD32
 1784|       |             * need to be updated. These 8 bits will not cross 8 bit boundaries
 1785|       |             */
 1786|  2.84M|            u4_mask = DUP_LSB_11(cb_size / 8);
  ------------------
  |  |   81|  2.84M|#define DUP_LSB_11(x) ((UWORD32)0xFFFFFFFF >> (32 - ((x) * 2)))
  ------------------
 1787|       |
 1788|  2.84M|            u4_top_mask = u4_mask << ((u4_min_cu_x % 16) * 2);
 1789|  2.84M|            u4_ct_depth_top &= ~u4_top_mask;
 1790|       |
 1791|  2.84M|            if(ct_depth)
  ------------------
  |  Branch (1791:16): [True: 2.67M, False: 169k]
  ------------------
 1792|  2.67M|            {
 1793|  2.67M|                u4_top_mask = gau4_ct_depth_mask[ct_depth] & u4_mask;
 1794|       |
 1795|  2.67M|                u4_top_mask = u4_top_mask << ((u4_min_cu_x % 16) * 2);
 1796|  2.67M|                u4_ct_depth_top |= u4_top_mask;
 1797|  2.67M|            }
 1798|       |
 1799|  2.84M|            *pu4_ct_depth_top = u4_ct_depth_top;
 1800|       |
 1801|       |            /* Update left ct_depth */
 1802|  2.84M|            u4_ct_depth_left = ps_codec->s_parse.u4_ct_depth_left;
 1803|       |
 1804|  2.84M|            u4_left_mask = u4_mask << ((u4_min_cu_y % 16) * 2);
 1805|       |
 1806|  2.84M|            u4_ct_depth_left &= ~u4_left_mask;
 1807|  2.84M|            if(ct_depth)
  ------------------
  |  Branch (1807:16): [True: 2.67M, False: 169k]
  ------------------
 1808|  2.67M|            {
 1809|  2.67M|                u4_left_mask = gau4_ct_depth_mask[ct_depth] & u4_mask;
 1810|       |
 1811|  2.67M|                u4_left_mask = u4_left_mask << ((u4_min_cu_y % 16) * 2);
 1812|  2.67M|                u4_ct_depth_left |= u4_left_mask;
 1813|  2.67M|            }
 1814|       |
 1815|  2.84M|            ps_codec->s_parse.u4_ct_depth_left = u4_ct_depth_left;
 1816|  2.84M|        }
 1817|  3.70M|    }
 1818|  3.70M|    if((ps_pps->i1_cu_qp_delta_enabled_flag) &&
  ------------------
  |  Branch (1818:8): [True: 1.12M, False: 2.58M]
  ------------------
 1819|  3.70M|                    (log2_cb_size >= ps_pps->i1_log2_min_cu_qp_delta_size))
  ------------------
  |  Branch (1819:21): [True: 205k, False: 916k]
  ------------------
 1820|   205k|    {
 1821|   205k|        ps_codec->s_parse.i4_is_cu_qp_delta_coded = 0;
 1822|   205k|        ps_codec->s_parse.i4_cu_qp_delta = 0;
 1823|   205k|    }
 1824|  3.70M|    if(split_cu_flag)
  ------------------
  |  Branch (1824:8): [True: 861k, False: 2.84M]
  ------------------
 1825|   861k|    {
 1826|   861k|        x1 = x0 + ((1 << log2_cb_size) >> 1);
 1827|   861k|        y1 = y0 + ((1 << log2_cb_size) >> 1);
 1828|       |
 1829|   861k|        ret = ihevcd_parse_coding_quadtree(ps_codec, x0, y0, log2_cb_size - 1, ct_depth + 1);
 1830|   861k|        RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   861k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 24, False: 861k]
  |  |  ------------------
  ------------------
 1831|       |
 1832|       |        /* At frame boundaries coding quadtree nodes are sent only if they fall within the frame */
 1833|   861k|        if(x1 < ps_sps->i2_pic_width_in_luma_samples)
  ------------------
  |  Branch (1833:12): [True: 834k, False: 26.4k]
  ------------------
 1834|   834k|        {
 1835|   834k|            ret = ihevcd_parse_coding_quadtree(ps_codec, x1, y0, log2_cb_size - 1, ct_depth + 1);
 1836|   834k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   834k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 5, False: 834k]
  |  |  ------------------
  ------------------
 1837|   834k|        }
 1838|       |
 1839|   861k|        if(y1 < ps_sps->i2_pic_height_in_luma_samples)
  ------------------
  |  Branch (1839:12): [True: 826k, False: 34.4k]
  ------------------
 1840|   826k|        {
 1841|   826k|            ret = ihevcd_parse_coding_quadtree(ps_codec, x0, y1, log2_cb_size - 1, ct_depth + 1);
 1842|   826k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   826k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 3, False: 826k]
  |  |  ------------------
  ------------------
 1843|   826k|        }
 1844|       |
 1845|   861k|        if((x1 < ps_sps->i2_pic_width_in_luma_samples) &&
  ------------------
  |  Branch (1845:12): [True: 834k, False: 26.4k]
  ------------------
 1846|   861k|                        (y1 < ps_sps->i2_pic_height_in_luma_samples))
  ------------------
  |  Branch (1846:25): [True: 800k, False: 33.7k]
  ------------------
 1847|   800k|        {
 1848|   800k|            ret = ihevcd_parse_coding_quadtree(ps_codec, x1, y1, log2_cb_size - 1, ct_depth + 1);
 1849|   800k|            RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|   800k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 4, False: 800k]
  |  |  ------------------
  ------------------
 1850|   800k|        }
 1851|   861k|    }
 1852|  2.84M|    else
 1853|  2.84M|    {
 1854|  2.84M|        WORD32 qp = ps_codec->s_parse.u4_qp;
 1855|       |        /* Set current group QP if current CU is aligned with the group */
 1856|  2.84M|        {
 1857|  2.84M|            WORD32 cu_pos_x = ps_codec->s_parse.s_cu.i4_pos_x << 3;
 1858|  2.84M|            WORD32 cu_pos_y = ps_codec->s_parse.s_cu.i4_pos_y << 3;
 1859|       |
 1860|  2.84M|            WORD32 qpg_x = (cu_pos_x - (cu_pos_x & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1)));
 1861|  2.84M|            WORD32 qpg_y = (cu_pos_y - (cu_pos_y & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1)));
 1862|       |
 1863|  2.84M|            if((cu_pos_x == qpg_x) &&
  ------------------
  |  Branch (1863:16): [True: 949k, False: 1.89M]
  ------------------
 1864|  2.84M|                            (cu_pos_y == qpg_y))
  ------------------
  |  Branch (1864:29): [True: 491k, False: 458k]
  ------------------
 1865|   491k|            {
 1866|   491k|                ps_codec->s_parse.u4_qpg = ps_codec->s_parse.u4_qp;
 1867|       |
 1868|   491k|                ps_codec->s_parse.s_cu.i4_cu_qp_delta = 0;
 1869|       |
 1870|   491k|            }
 1871|  2.84M|        }
 1872|       |
 1873|  2.84M|        ret = ihevcd_parse_coding_unit(ps_codec, x0, y0, log2_cb_size);
 1874|  2.84M|        RETURN_IF((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret, ret);
  ------------------
  |  |   37|  2.84M|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 15, False: 2.84M]
  |  |  ------------------
  ------------------
 1875|       |
 1876|  2.84M|        if(ps_pps->i1_cu_qp_delta_enabled_flag)
  ------------------
  |  Branch (1876:12): [True: 838k, False: 2.00M]
  ------------------
 1877|   838k|        {
 1878|   838k|            WORD32 qp_pred, qp_left, qp_top;
 1879|   838k|            WORD32 cu_pos_x;
 1880|   838k|            WORD32 cu_pos_y;
 1881|   838k|            WORD32 qpg_x;
 1882|   838k|            WORD32 qpg_y;
 1883|   838k|            WORD32 i, j;
 1884|   838k|            WORD32 cur_cu_offset;
 1885|   838k|            tu_t *ps_tu = ps_codec->s_parse.ps_tu;
 1886|   838k|            WORD32 cb_size = 1 << ps_codec->s_parse.s_cu.i4_log2_cb_size;
 1887|       |
 1888|   838k|            cu_pos_x = ps_codec->s_parse.s_cu.i4_pos_x << 3;
 1889|   838k|            cu_pos_y = ps_codec->s_parse.s_cu.i4_pos_y << 3;
 1890|       |
 1891|   838k|            qpg_x = (cu_pos_x - (cu_pos_x & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1))) >> 3;
 1892|   838k|            qpg_y = (cu_pos_y - (cu_pos_y & ((1 << ps_pps->i1_log2_min_cu_qp_delta_size) - 1))) >> 3;
 1893|       |
 1894|       |            /*previous coded Qp*/
 1895|   838k|            qp_left = ps_codec->s_parse.u4_qpg;
 1896|   838k|            qp_top = ps_codec->s_parse.u4_qpg;
 1897|       |
 1898|   838k|            if(qpg_x > 0)
  ------------------
  |  Branch (1898:16): [True: 85.6k, False: 753k]
  ------------------
 1899|  85.6k|            {
 1900|  85.6k|                qp_left = ps_codec->s_parse.ai1_8x8_cu_qp[qpg_x - 1 + (qpg_y * 8)];
 1901|  85.6k|            }
 1902|   838k|            if(qpg_y > 0)
  ------------------
  |  Branch (1902:16): [True: 89.5k, False: 749k]
  ------------------
 1903|  89.5k|            {
 1904|  89.5k|                qp_top = ps_codec->s_parse.ai1_8x8_cu_qp[qpg_x + ((qpg_y - 1) * 8)];
 1905|  89.5k|            }
 1906|       |
 1907|   838k|            qp_pred = (qp_left + qp_top + 1) >> 1;
 1908|       |            /* Since qp_pred + ps_codec->s_parse.s_cu.i4_cu_qp_delta can be negative,
 1909|       |            52 is added before taking modulo 52 */
 1910|   838k|            qp = (qp_pred + ps_codec->s_parse.s_cu.i4_cu_qp_delta + 52) % 52;
 1911|       |
 1912|   838k|            cur_cu_offset = (cu_pos_x >> 3) + cu_pos_y;
 1913|  1.98M|            for(i = 0; i < (cb_size >> 3); i++)
  ------------------
  |  Branch (1913:24): [True: 1.14M, False: 838k]
  ------------------
 1914|  1.14M|            {
 1915|  3.72M|                for(j = 0; j < (cb_size >> 3); j++)
  ------------------
  |  Branch (1915:28): [True: 2.58M, False: 1.14M]
  ------------------
 1916|  2.58M|                {
 1917|  2.58M|                    ps_codec->s_parse.ai1_8x8_cu_qp[cur_cu_offset + (i * 8) + j] = qp;
 1918|  2.58M|                }
 1919|  1.14M|            }
 1920|       |
 1921|   838k|            ps_codec->s_parse.u4_qp = qp;
 1922|   838k|            ps_codec->s_parse.s_cu.i4_qp = qp;
 1923|       |
 1924|       |
 1925|       |            /* When change in QP is signaled, update the QP in TUs that are already parsed in the CU */
 1926|   838k|            {
 1927|   838k|                tu_t *ps_tu_tmp;
 1928|   838k|                ps_tu_tmp = ps_tu - ps_codec->s_parse.s_cu.i4_tu_cnt;
 1929|   838k|                ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
 1930|  2.31M|                while(ps_tu_tmp != ps_tu)
  ------------------
  |  Branch (1930:23): [True: 1.48M, False: 838k]
  ------------------
 1931|  1.48M|                {
 1932|  1.48M|                    ps_tu_tmp->b7_qp = ps_codec->s_parse.u4_qp;
 1933|       |
 1934|  1.48M|                    ps_tu_tmp++;
 1935|  1.48M|                }
 1936|   838k|            }
 1937|   838k|            if(ps_codec->s_parse.s_cu.i4_cu_qp_delta)
  ------------------
  |  Branch (1937:16): [True: 245k, False: 592k]
  ------------------
 1938|   245k|            {
 1939|   245k|                WORD32 ctb_indx;
 1940|   245k|                ctb_indx = ps_codec->s_parse.i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_codec->s_parse.i4_ctb_y;
 1941|   245k|                ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp_const_in_ctb[ctb_indx >> 3] &= (~(1 << (ctb_indx & 7)));
 1942|   245k|            }
 1943|       |
 1944|   838k|        }
 1945|       |        /* Populate CU_info maps for current CU*/
 1946|  2.84M|        if(ps_codec->u1_enable_cu_info)
  ------------------
  |  Branch (1946:12): [True: 0, False: 2.84M]
  ------------------
 1947|      0|        {
 1948|      0|            WORD32 cu_info_map_stride = ALIGN64(ps_codec->i4_wd) >> 3;
  ------------------
  |  |   50|      0|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1949|      0|            UWORD8 num_8x8_blks = 1 << (log2_cb_size - 3);
 1950|      0|            WORD32 vert_8x8, horz_8x8;
 1951|      0|            UWORD8 *pu1_cur_cu_type_map =
 1952|      0|                ps_codec->as_buf_id_info_map[ps_codec->as_process[0].
 1953|      0|                    i4_cur_pic_buf_id].pu1_cu_type_map;
 1954|      0|            UWORD8 *pu1_cur_qp_map =
 1955|      0|                ps_codec->as_buf_id_info_map[ps_codec->as_process[0].i4_cur_pic_buf_id].pu1_qp_map;
 1956|      0|            UWORD8 *pu1_cur_type_cu = pu1_cur_cu_type_map + (x0 >> 3) +
 1957|      0|                (y0 >> 3) * cu_info_map_stride;
 1958|      0|            UWORD8 *pu1_cur_qp_cu = pu1_cur_qp_map + (x0 >> 3) +
 1959|      0|                (y0 >> 3) * cu_info_map_stride;
 1960|      0|            for(vert_8x8 = 0; vert_8x8 < num_8x8_blks; vert_8x8++)
  ------------------
  |  Branch (1960:31): [True: 0, False: 0]
  ------------------
 1961|      0|            {
 1962|      0|                for(horz_8x8 = 0; horz_8x8 < num_8x8_blks; horz_8x8++)
  ------------------
  |  Branch (1962:35): [True: 0, False: 0]
  ------------------
 1963|      0|                {
 1964|      0|                    pu1_cur_qp_cu[horz_8x8] = qp;
 1965|      0|                    pu1_cur_type_cu[horz_8x8] = ps_codec->s_parse.s_cu.i4_pred_mode;
 1966|      0|                }
 1967|      0|                pu1_cur_qp_cu += cu_info_map_stride;
 1968|      0|                pu1_cur_type_cu += cu_info_map_stride;
 1969|      0|            }
 1970|      0|        }
 1971|       |
 1972|  2.84M|    }
 1973|       |
 1974|       |
 1975|       |
 1976|       |
 1977|  3.70M|    return ret;
 1978|  3.70M|}
ihevcd_parse_sao:
 2001|  41.3k|{
 2002|  41.3k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2003|  41.3k|    sps_t *ps_sps;
 2004|  41.3k|    sao_t *ps_sao;
 2005|  41.3k|    WORD32 rx;
 2006|  41.3k|    WORD32 ry;
 2007|  41.3k|    WORD32 value;
 2008|  41.3k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
 2009|  41.3k|    WORD32 sao_merge_left_flag;
 2010|  41.3k|    WORD32 sao_merge_up_flag;
 2011|  41.3k|    slice_header_t *ps_slice_hdr;
 2012|  41.3k|    cab_ctxt_t *ps_cabac = &ps_codec->s_parse.s_cabac;
 2013|  41.3k|    WORD32 ctxt_idx;
 2014|       |
 2015|  41.3k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base;
 2016|  41.3k|    ps_slice_hdr += (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  41.3k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  41.3k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2017|       |
 2018|  41.3k|    ps_sps = (ps_codec->s_parse.ps_sps);
 2019|  41.3k|    rx = ps_codec->s_parse.i4_ctb_x;
 2020|  41.3k|    ry = ps_codec->s_parse.i4_ctb_y;
 2021|       |
 2022|  41.3k|    ps_sao = ps_codec->s_parse.ps_pic_sao + rx + ry * ps_sps->i2_pic_wd_in_ctb;
 2023|       |
 2024|       |    /* Default values */
 2025|  41.3k|    ps_sao->b3_y_type_idx = 0;
 2026|  41.3k|    ps_sao->b3_cb_type_idx = 0;
 2027|  41.3k|    ps_sao->b3_cr_type_idx = 0;
 2028|       |
 2029|  41.3k|    UNUSED(value);
  ------------------
  |  |   38|  41.3k|#define UNUSED(x) ((void)(x))
  ------------------
 2030|  41.3k|    ctxt_idx = IHEVC_CAB_SAO_MERGE;
 2031|  41.3k|    sao_merge_left_flag = 0;
 2032|  41.3k|    sao_merge_up_flag = 0;
 2033|  41.3k|    if(rx > 0)
  ------------------
  |  Branch (2033:8): [True: 35.5k, False: 5.83k]
  ------------------
 2034|  35.5k|    {
 2035|       |        /*TODO:Implemented only for slice. condition for tile is not tested*/
 2036|  35.5k|        if(((0 != ps_codec->s_parse.i4_ctb_slice_x) || (0 != ps_codec->s_parse.i4_ctb_slice_y)) &&
  ------------------
  |  Branch (2036:13): [True: 35.3k, False: 156]
  |  Branch (2036:56): [True: 1, False: 155]
  ------------------
 2037|  35.5k|                        (0 != ps_codec->s_parse.i4_ctb_tile_x))
  ------------------
  |  Branch (2037:25): [True: 35.2k, False: 66]
  ------------------
 2038|  35.2k|        {
 2039|       |
 2040|  35.2k|            TRACE_CABAC_CTXT("sao_merge_flag", ps_cabac->u4_range, ctxt_idx);
 2041|  35.2k|            sao_merge_left_flag = ihevcd_cabac_decode_bin(ps_cabac,
 2042|  35.2k|                                                          ps_bitstrm,
 2043|  35.2k|                                                          ctxt_idx);
 2044|  35.2k|            AEV_TRACE("sao_merge_flag", sao_merge_left_flag, ps_cabac->u4_range);
 2045|  35.2k|        }
 2046|       |
 2047|  35.5k|    }
 2048|  41.3k|    if(ry > 0 && !sao_merge_left_flag)
  ------------------
  |  Branch (2048:8): [True: 31.6k, False: 9.73k]
  |  Branch (2048:18): [True: 23.5k, False: 8.03k]
  ------------------
 2049|  23.5k|    {
 2050|  23.5k|        if((ps_codec->s_parse.i4_ctb_slice_y > 0) && (ps_codec->s_parse.i4_ctb_tile_y > 0))
  ------------------
  |  Branch (2050:12): [True: 23.3k, False: 218]
  |  Branch (2050:54): [True: 22.6k, False: 716]
  ------------------
 2051|  22.6k|        {
 2052|  22.6k|            TRACE_CABAC_CTXT("sao_merge_flag", ps_cabac->u4_range, ctxt_idx);
 2053|  22.6k|            sao_merge_up_flag = ihevcd_cabac_decode_bin(ps_cabac,
 2054|  22.6k|                                                        ps_bitstrm,
 2055|  22.6k|                                                        ctxt_idx);
 2056|  22.6k|            AEV_TRACE("sao_merge_flag", sao_merge_up_flag, ps_cabac->u4_range);
 2057|  22.6k|        }
 2058|  23.5k|    }
 2059|  41.3k|    ctxt_idx = IHEVC_CAB_SAO_TYPE;
 2060|       |
 2061|  41.3k|    if(sao_merge_left_flag)
  ------------------
  |  Branch (2061:8): [True: 10.3k, False: 31.0k]
  ------------------
 2062|  10.3k|    {
 2063|  10.3k|        *ps_sao = *(ps_sao - 1);
 2064|  10.3k|    }
 2065|  31.0k|    else if(sao_merge_up_flag)
  ------------------
  |  Branch (2065:13): [True: 4.40k, False: 26.6k]
  ------------------
 2066|  4.40k|    {
 2067|  4.40k|        *ps_sao = *(ps_sao - ps_sps->i2_pic_wd_in_ctb);
 2068|  4.40k|    }
 2069|  26.6k|    else // if(!sao_merge_up_flag && !sao_merge_left_flag)
 2070|  26.6k|    {
 2071|  26.6k|        WORD32 c_idx;
 2072|  26.6k|        WORD32 sao_type_idx = 0;
 2073|   106k|        for(c_idx = 0; c_idx < 3; c_idx++)
  ------------------
  |  Branch (2073:24): [True: 79.9k, False: 26.6k]
  ------------------
 2074|  79.9k|        {
 2075|  79.9k|            if((ps_slice_hdr->i1_slice_sao_luma_flag && c_idx == 0) || (ps_slice_hdr->i1_slice_sao_chroma_flag && c_idx > 0))
  ------------------
  |  Branch (2075:17): [True: 75.6k, False: 4.23k]
  |  Branch (2075:57): [True: 25.2k, False: 50.4k]
  |  Branch (2075:73): [True: 49.6k, False: 5.05k]
  |  Branch (2075:115): [True: 48.2k, False: 1.41k]
  ------------------
 2076|  73.4k|            {
 2077|       |
 2078|       |
 2079|       |                /* sao_type_idx will be same for c_idx == 1 and c_idx == 2 - hence not initialized to zero for c_idx == 2*/
 2080|       |
 2081|  73.4k|                if(c_idx == 0)
  ------------------
  |  Branch (2081:20): [True: 25.2k, False: 48.2k]
  ------------------
 2082|  25.2k|                {
 2083|  25.2k|                    sao_type_idx = 0;
 2084|  25.2k|                    TRACE_CABAC_CTXT("sao_type_idx", ps_cabac->u4_range, ctxt_idx);
 2085|  25.2k|                    sao_type_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
 2086|       |
 2087|  25.2k|                    if(sao_type_idx)
  ------------------
  |  Branch (2087:24): [True: 19.0k, False: 6.14k]
  ------------------
 2088|  19.0k|                    {
 2089|  19.0k|                        sao_type_idx += ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
 2090|  19.0k|                    }
 2091|  25.2k|                    AEV_TRACE("sao_type_idx", sao_type_idx,  ps_cabac->u4_range);
 2092|       |
 2093|  25.2k|                    ps_sao->b3_y_type_idx = sao_type_idx;
 2094|  25.2k|                }
 2095|  73.4k|                if(c_idx == 1)
  ------------------
  |  Branch (2095:20): [True: 24.1k, False: 49.3k]
  ------------------
 2096|  24.1k|                {
 2097|  24.1k|                    sao_type_idx = 0;
 2098|  24.1k|                    TRACE_CABAC_CTXT("sao_type_idx", ps_cabac->u4_range, ctxt_idx);
 2099|  24.1k|                    sao_type_idx = ihevcd_cabac_decode_bin(ps_cabac, ps_bitstrm, ctxt_idx);
 2100|  24.1k|                    if(sao_type_idx)
  ------------------
  |  Branch (2100:24): [True: 15.7k, False: 8.33k]
  ------------------
 2101|  15.7k|                    {
 2102|  15.7k|                        sao_type_idx += ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
 2103|  15.7k|                    }
 2104|       |
 2105|  24.1k|                    AEV_TRACE("sao_type_idx", sao_type_idx,  ps_cabac->u4_range);
 2106|       |
 2107|  24.1k|                    ps_sao->b3_cb_type_idx = sao_type_idx;
 2108|  24.1k|                    ps_sao->b3_cr_type_idx = sao_type_idx;
 2109|  24.1k|                }
 2110|       |
 2111|  73.4k|                if(sao_type_idx != 0)
  ------------------
  |  Branch (2111:20): [True: 50.6k, False: 22.8k]
  ------------------
 2112|  50.6k|                {
 2113|  50.6k|                    WORD32 i;
 2114|  50.6k|                    WORD32 sao_offset[4];
 2115|  50.6k|                    WORD32 sao_band_position = 0;
 2116|  50.6k|                    WORD32 c_max =  (1 << (MIN(BIT_DEPTH, 10) - 5)) - 1;
  ------------------
  |  |   43|  50.6k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2117|   253k|                    for(i = 0; i < 4; i++)
  ------------------
  |  Branch (2117:32): [True: 202k, False: 50.6k]
  ------------------
 2118|   202k|                    {
 2119|   202k|                        sao_offset[i] = ihevcd_cabac_decode_bypass_bins_tunary(ps_cabac, ps_bitstrm, c_max);
 2120|   202k|                        AEV_TRACE("sao_offset_abs", sao_offset[i], ps_cabac->u4_range);
 2121|       |
 2122|   202k|                        if((2 == sao_type_idx) && (i > 1))
  ------------------
  |  Branch (2122:28): [True: 84.6k, False: 117k]
  |  Branch (2122:51): [True: 42.3k, False: 42.3k]
  ------------------
 2123|  42.3k|                        {
 2124|  42.3k|                            sao_offset[i] = -sao_offset[i];
 2125|  42.3k|                        }
 2126|   202k|                    }
 2127|       |
 2128|  50.6k|                    if(sao_type_idx == 1)
  ------------------
  |  Branch (2128:24): [True: 29.4k, False: 21.1k]
  ------------------
 2129|  29.4k|                    {
 2130|   147k|                        for(i = 0; i < 4; i++)
  ------------------
  |  Branch (2130:36): [True: 117k, False: 29.4k]
  ------------------
 2131|   117k|                        {
 2132|   117k|                            if(sao_offset[i] != 0)
  ------------------
  |  Branch (2132:32): [True: 46.8k, False: 71.0k]
  ------------------
 2133|  46.8k|                            {
 2134|  46.8k|                                value = ihevcd_cabac_decode_bypass_bin(ps_cabac, ps_bitstrm);
 2135|  46.8k|                                AEV_TRACE("sao_offset_sign", value, ps_cabac->u4_range);
 2136|       |
 2137|  46.8k|                                if(value)
  ------------------
  |  Branch (2137:36): [True: 23.7k, False: 23.0k]
  ------------------
 2138|  23.7k|                                {
 2139|  23.7k|                                    sao_offset[i] = -sao_offset[i];
 2140|  23.7k|                                }
 2141|  46.8k|                            }
 2142|   117k|                        }
 2143|  29.4k|                        value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 5);
 2144|  29.4k|                        AEV_TRACE("sao_band_position", value, ps_cabac->u4_range);
 2145|       |
 2146|  29.4k|                        sao_band_position = value;
 2147|  29.4k|                    }
 2148|  21.1k|                    else
 2149|  21.1k|                    {
 2150|  21.1k|                        if(c_idx == 0)
  ------------------
  |  Branch (2150:28): [True: 7.07k, False: 14.0k]
  ------------------
 2151|  7.07k|                        {
 2152|  7.07k|                            value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 2);
 2153|  7.07k|                            AEV_TRACE("sao_eo_class", value, ps_cabac->u4_range);
 2154|       |
 2155|  7.07k|                            ps_sao->b3_y_type_idx += value;
 2156|  7.07k|                        }
 2157|       |
 2158|  21.1k|                        if(c_idx == 1)
  ------------------
  |  Branch (2158:28): [True: 7.04k, False: 14.1k]
  ------------------
 2159|  7.04k|                        {
 2160|  7.04k|                            value = ihevcd_cabac_decode_bypass_bins(ps_cabac, ps_bitstrm, 2);
 2161|  7.04k|                            AEV_TRACE("sao_eo_class", value, ps_cabac->u4_range);
 2162|       |
 2163|  7.04k|                            ps_sao->b3_cb_type_idx += value;
 2164|  7.04k|                            ps_sao->b3_cr_type_idx += value;
 2165|  7.04k|                        }
 2166|  21.1k|                    }
 2167|       |
 2168|  50.6k|                    if(0 == c_idx)
  ------------------
  |  Branch (2168:24): [True: 19.0k, False: 31.5k]
  ------------------
 2169|  19.0k|                    {
 2170|  19.0k|                        ps_sao->b4_y_offset_1 = sao_offset[0];
 2171|  19.0k|                        ps_sao->b4_y_offset_2 = sao_offset[1];
 2172|  19.0k|                        ps_sao->b4_y_offset_3 = sao_offset[2];
 2173|  19.0k|                        ps_sao->b4_y_offset_4 = sao_offset[3];
 2174|       |
 2175|  19.0k|                        ps_sao->b5_y_band_pos = sao_band_position;
 2176|  19.0k|                    }
 2177|  31.5k|                    else if(1 == c_idx)
  ------------------
  |  Branch (2177:29): [True: 15.7k, False: 15.7k]
  ------------------
 2178|  15.7k|                    {
 2179|  15.7k|                        ps_sao->b4_cb_offset_1 = sao_offset[0];
 2180|  15.7k|                        ps_sao->b4_cb_offset_2 = sao_offset[1];
 2181|  15.7k|                        ps_sao->b4_cb_offset_3 = sao_offset[2];
 2182|  15.7k|                        ps_sao->b4_cb_offset_4 = sao_offset[3];
 2183|       |
 2184|  15.7k|                        ps_sao->b5_cb_band_pos = sao_band_position;
 2185|  15.7k|                    }
 2186|  15.7k|                    else // 2 == c_idx
 2187|  15.7k|                    {
 2188|  15.7k|                        ps_sao->b4_cr_offset_1 = sao_offset[0];
 2189|  15.7k|                        ps_sao->b4_cr_offset_2 = sao_offset[1];
 2190|  15.7k|                        ps_sao->b4_cr_offset_3 = sao_offset[2];
 2191|  15.7k|                        ps_sao->b4_cr_offset_4 = sao_offset[3];
 2192|       |
 2193|  15.7k|                        ps_sao->b5_cr_band_pos = sao_band_position;
 2194|  15.7k|                    }
 2195|  50.6k|                }
 2196|  73.4k|            }
 2197|  79.9k|        }
 2198|  26.6k|    }
 2199|       |
 2200|  41.3k|    return ret;
 2201|  41.3k|}
ihevcd_set_ctb_skip:
 2222|  5.86M|{
 2223|  5.86M|    tu_t *ps_tu;
 2224|  5.86M|    pu_t *ps_pu;
 2225|  5.86M|    sps_t *ps_sps = ps_codec->s_parse.ps_sps;
 2226|  5.86M|    WORD32 ctb_size = 1 << ps_sps->i1_log2_ctb_size;
 2227|  5.86M|    WORD32 ctb_skip_wd, ctb_skip_ht;
 2228|  5.86M|    WORD32 rows_remaining, cols_remaining;
 2229|  5.86M|    WORD32 tu_abs_x, tu_abs_y;
 2230|  5.86M|    WORD32 numbytes_row =  (ps_sps->i2_pic_width_in_luma_samples + 63) / 64;
 2231|  5.86M|    UWORD8 *pu1_pic_intra_flag;
 2232|  5.86M|    UWORD32 u4_mask;
 2233|  5.86M|    WORD32 pu_x,pu_y;
 2234|       |
 2235|       |    /* Set pu wd and ht based on whether the ctb is complete or not */
 2236|  5.86M|    rows_remaining = ps_sps->i2_pic_height_in_luma_samples
 2237|  5.86M|                    - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size);
 2238|  5.86M|    ctb_skip_ht = MIN(ctb_size, rows_remaining);
  ------------------
  |  |   43|  5.86M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 5.71M, False: 152k]
  |  |  ------------------
  ------------------
 2239|       |
 2240|  5.86M|    cols_remaining = ps_sps->i2_pic_width_in_luma_samples
 2241|  5.86M|                    - (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size);
 2242|  5.86M|    ctb_skip_wd = MIN(ctb_size, cols_remaining);
  ------------------
  |  |   43|  5.86M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 5.75M, False: 113k]
  |  |  ------------------
  ------------------
 2243|       |
 2244|  5.86M|    ps_codec->s_parse.s_cu.i4_pred_mode = PRED_MODE_SKIP;
 2245|  5.86M|    ps_codec->s_parse.s_cu.i4_part_mode = PART_2Nx2N;
 2246|       |
 2247|  22.4M|    for (pu_y = 0; pu_y < ctb_skip_ht ; pu_y += MIN_CU_SIZE)
  ------------------
  |  |  363|  16.5M|#define MIN_CU_SIZE         8
  ------------------
  |  Branch (2247:20): [True: 16.5M, False: 5.86M]
  ------------------
 2248|  16.5M|    {
 2249|  84.9M|        for (pu_x = 0; pu_x < ctb_skip_wd ; pu_x += MIN_CU_SIZE)
  ------------------
  |  |  363|  68.3M|#define MIN_CU_SIZE         8
  ------------------
  |  Branch (2249:24): [True: 68.3M, False: 16.5M]
  ------------------
 2250|  68.3M|        {
 2251|  68.3M|            ps_tu = ps_codec->s_parse.ps_tu;
 2252|  68.3M|            ps_tu->b1_cb_cbf = 0;
 2253|  68.3M|            ps_tu->b1_cr_cbf = 0;
 2254|  68.3M|            ps_tu->b1_y_cbf = 0;
 2255|  68.3M|            ps_tu->b4_pos_x = pu_x >> 2;
 2256|  68.3M|            ps_tu->b4_pos_y = pu_y >> 2;
 2257|  68.3M|            ps_tu->b1_transquant_bypass = 0;
 2258|  68.3M|            ps_tu->b3_size = 1;
 2259|  68.3M|            ps_tu->b7_qp = ps_codec->s_parse.u4_qp;
 2260|  68.3M|            ps_tu->b3_chroma_intra_mode_idx = INTRA_PRED_CHROMA_IDX_NONE;
  ------------------
  |  |  518|  68.3M|#define INTRA_PRED_CHROMA_IDX_NONE  7
  ------------------
 2261|  68.3M|            ps_tu->b6_luma_intra_mode   = INTRA_PRED_NONE;
  ------------------
  |  |  511|  68.3M|#define INTRA_PRED_NONE  63
  ------------------
 2262|  68.3M|            ps_tu->b1_first_tu_in_cu = 1;
 2263|       |
 2264|  68.3M|            ps_codec->s_parse.ps_tu++;
 2265|  68.3M|            ps_codec->s_parse.s_cu.i4_tu_cnt++;
 2266|  68.3M|            ps_codec->s_parse.i4_pic_tu_idx++;
 2267|       |
 2268|  68.3M|            tu_abs_x = (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size) + pu_x;
 2269|  68.3M|            tu_abs_y = (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size) + pu_y;
 2270|  68.3M|            pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
 2271|  68.3M|            pu1_pic_intra_flag += (tu_abs_y >> 3) * numbytes_row;
 2272|  68.3M|            pu1_pic_intra_flag += (tu_abs_x >> 6);
 2273|  68.3M|            u4_mask = (LSB_ONES((MIN_CU_SIZE >> 3)) << (((tu_abs_x) / 8) % 8));
  ------------------
  |  |   72|  68.3M|#define LSB_ONES(x) ((UWORD32)0xFFFFFFFF >> (32 - (x)))
  ------------------
 2274|  68.3M|            u4_mask = ~u4_mask;
 2275|  68.3M|            *pu1_pic_intra_flag &= u4_mask;
 2276|       |
 2277|  68.3M|            ps_pu = ps_codec->s_parse.ps_pu;
 2278|  68.3M|            ps_pu->b2_part_idx = 0;
 2279|  68.3M|            ps_pu->b4_pos_x = pu_x >> 2;
 2280|  68.3M|            ps_pu->b4_pos_y = pu_y >> 2;
 2281|  68.3M|            ps_pu->b4_wd = 1;
 2282|  68.3M|            ps_pu->b4_ht = 1;
 2283|  68.3M|            ps_pu->b1_intra_flag = 0;
 2284|  68.3M|            ps_pu->b3_part_mode = ps_codec->s_parse.s_cu.i4_part_mode;
 2285|  68.3M|            ps_pu->b1_merge_flag = 1;
 2286|  68.3M|            ps_pu->b3_merge_idx = 0;
 2287|       |
 2288|  68.3M|            ps_codec->s_parse.ps_pu++;
 2289|  68.3M|            ps_codec->s_parse.i4_pic_pu_idx++;
 2290|  68.3M|        }
 2291|  16.5M|    }
 2292|  5.86M|}
ihevcd_parse_slice_data:
 2314|  11.1k|{
 2315|       |
 2316|  11.1k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2317|  11.1k|    WORD32 end_of_slice_flag = 0;
 2318|  11.1k|    sps_t *ps_sps;
 2319|  11.1k|    pps_t *ps_pps;
 2320|  11.1k|    slice_header_t *ps_slice_hdr;
 2321|  11.1k|    WORD32 end_of_pic;
 2322|  11.1k|    tile_t *ps_tile, *ps_tile_prev;
 2323|  11.1k|    WORD32 i;
 2324|  11.1k|    WORD32 ctb_addr;
 2325|  11.1k|    WORD32 tile_idx;
 2326|  11.1k|    WORD32 cabac_init_idc;
 2327|  11.1k|    WORD32 ctb_size;
 2328|  11.1k|    WORD32 num_ctb_in_row;
 2329|  11.1k|    WORD32 num_min4x4_in_ctb;
 2330|  11.1k|    WORD32 slice_qp;
 2331|  11.1k|    WORD32 slice_start_ctb_idx;
 2332|  11.1k|    WORD32 tile_start_ctb_idx;
 2333|       |
 2334|       |
 2335|  11.1k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base;
 2336|  11.1k|    ps_pps = ps_codec->s_parse.ps_pps_base;
 2337|  11.1k|    ps_sps = ps_codec->s_parse.ps_sps_base;
 2338|       |
 2339|       |    /* Get current slice header, pps and sps */
 2340|  11.1k|    ps_slice_hdr += (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  11.1k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  11.1k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2341|  11.1k|    ps_pps  += ps_slice_hdr->i1_pps_id;
 2342|  11.1k|    ps_sps  += ps_pps->i1_sps_id;
 2343|       |
 2344|  11.1k|    if(0 != ps_codec->s_parse.i4_cur_slice_idx)
  ------------------
  |  Branch (2344:8): [True: 945, False: 10.1k]
  ------------------
 2345|    945|    {
 2346|    945|        if(!ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (2346:12): [True: 416, False: 529]
  ------------------
 2347|    416|        {
 2348|    416|            ps_codec->s_parse.i4_cur_independent_slice_idx =
 2349|    416|                    ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1);
  ------------------
  |  |  153|    416|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    416|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2350|    416|        }
 2351|    945|    }
 2352|       |
 2353|       |
 2354|  11.1k|    ctb_size = 1 << ps_sps->i1_log2_ctb_size;
 2355|  11.1k|    num_min4x4_in_ctb = (ctb_size / 4) * (ctb_size / 4);
 2356|  11.1k|    num_ctb_in_row = ps_sps->i2_pic_wd_in_ctb;
 2357|       |
 2358|       |    /* Update the parse context */
 2359|  11.1k|    if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2359:8): [True: 5.42k, False: 5.71k]
  ------------------
 2360|  5.42k|    {
 2361|  5.42k|        ps_codec->s_parse.i4_ctb_x = ps_slice_hdr->i2_ctb_x;
 2362|  5.42k|        ps_codec->s_parse.i4_ctb_y = ps_slice_hdr->i2_ctb_y;
 2363|  5.42k|    }
 2364|  11.1k|    ps_codec->s_parse.ps_pps = ps_pps;
 2365|  11.1k|    ps_codec->s_parse.ps_sps = ps_sps;
 2366|  11.1k|    ps_codec->s_parse.ps_slice_hdr = ps_slice_hdr;
 2367|       |
 2368|       |    /* Derive Tile positions for the current CTB */
 2369|       |    /* Change this to lookup if required */
 2370|  11.1k|    ihevcd_get_tile_pos(ps_pps, ps_sps, ps_codec->s_parse.i4_ctb_x,
 2371|  11.1k|                        ps_codec->s_parse.i4_ctb_y,
 2372|  11.1k|                        &ps_codec->s_parse.i4_ctb_tile_x,
 2373|  11.1k|                        &ps_codec->s_parse.i4_ctb_tile_y,
 2374|  11.1k|                        &tile_idx);
 2375|  11.1k|    ps_codec->s_parse.ps_tile = ps_pps->ps_tile + tile_idx;
 2376|  11.1k|    ps_codec->s_parse.i4_cur_tile_idx = tile_idx;
 2377|  11.1k|    ps_tile = ps_codec->s_parse.ps_tile;
 2378|  11.1k|    if(tile_idx)
  ------------------
  |  Branch (2378:8): [True: 697, False: 10.4k]
  ------------------
 2379|    697|        ps_tile_prev = ps_tile - 1;
 2380|  10.4k|    else
 2381|  10.4k|        ps_tile_prev = ps_tile;
 2382|       |
 2383|       |    /* If the present slice is dependent, then store the previous
 2384|       |     * independent slices' ctb x and y values for decoding process */
 2385|  11.1k|    if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2385:8): [True: 5.42k, False: 5.71k]
  ------------------
 2386|  5.42k|    {
 2387|  5.42k|        if(1 == ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (2387:12): [True: 323, False: 5.09k]
  ------------------
 2388|    323|        {
 2389|       |            /*If slice is present at the start of a new tile*/
 2390|    323|            if((0 == ps_codec->s_parse.i4_ctb_tile_x) && (0 == ps_codec->s_parse.i4_ctb_tile_y))
  ------------------
  |  Branch (2390:16): [True: 303, False: 20]
  |  Branch (2390:58): [True: 128, False: 175]
  ------------------
 2391|    128|            {
 2392|    128|                ps_codec->s_parse.i4_ctb_slice_x = 0;
 2393|    128|                ps_codec->s_parse.i4_ctb_slice_y = 0;
 2394|    128|            }
 2395|    323|        }
 2396|       |
 2397|  5.42k|        if(!ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (2397:12): [True: 5.09k, False: 323]
  ------------------
 2398|  5.09k|        {
 2399|  5.09k|            ps_codec->s_parse.i4_ctb_slice_x = 0;
 2400|  5.09k|            ps_codec->s_parse.i4_ctb_slice_y = 0;
 2401|  5.09k|        }
 2402|  5.42k|    }
 2403|       |
 2404|       |    /* Frame level initializations */
 2405|  11.1k|    if((0 == ps_codec->s_parse.i4_ctb_y) &&
  ------------------
  |  Branch (2405:8): [True: 7.56k, False: 3.56k]
  ------------------
 2406|  11.1k|                    (0 == ps_codec->s_parse.i4_ctb_x))
  ------------------
  |  Branch (2406:21): [True: 5.69k, False: 1.86k]
  ------------------
 2407|  5.69k|    {
 2408|  5.69k|        ret = ihevcd_parse_pic_init(ps_codec);
 2409|  5.69k|        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  5.69k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 341, False: 5.35k]
  |  |  ------------------
  ------------------
 2410|       |
 2411|  5.35k|        ps_codec->s_parse.pu4_pic_tu_idx[0] = 0;
 2412|  5.35k|        ps_codec->s_parse.pu4_pic_pu_idx[0] = 0;
 2413|  5.35k|        ps_codec->s_parse.i4_cur_independent_slice_idx = 0;
 2414|  5.35k|        ps_codec->s_parse.i4_ctb_tile_x = 0;
 2415|  5.35k|        ps_codec->s_parse.i4_ctb_tile_y = 0;
 2416|  5.35k|    }
 2417|       |
 2418|  10.7k|    {
 2419|       |        /* Updating the poc list of current slice to ps_mv_buf */
 2420|  10.7k|        mv_buf_t *ps_mv_buf = ps_codec->s_parse.ps_cur_mv_buf;
 2421|       |
 2422|  10.7k|        if(ps_slice_hdr->i1_num_ref_idx_l1_active != 0)
  ------------------
  |  Branch (2422:12): [True: 2.04k, False: 8.75k]
  ------------------
 2423|  2.04k|        {
 2424|  8.03k|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (2424:24): [True: 5.98k, False: 2.04k]
  ------------------
 2425|  5.98k|            {
 2426|  5.98k|                ps_mv_buf->ai4_l1_collocated_poc[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list1[i].pv_pic_buf)->i4_abs_poc;
  ------------------
  |  |  153|  5.98k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  5.98k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2427|  5.98k|                ps_mv_buf->ai1_l1_collocated_poc_lt[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list1[i].pv_pic_buf)->u1_used_as_ref;
  ------------------
  |  |  153|  5.98k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  5.98k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2428|  5.98k|            }
 2429|  2.04k|        }
 2430|       |
 2431|  10.7k|        if(ps_slice_hdr->i1_num_ref_idx_l0_active != 0)
  ------------------
  |  Branch (2431:12): [True: 2.22k, False: 8.57k]
  ------------------
 2432|  2.22k|        {
 2433|  6.73k|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (2433:24): [True: 4.51k, False: 2.22k]
  ------------------
 2434|  4.51k|            {
 2435|  4.51k|                ps_mv_buf->ai4_l0_collocated_poc[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list0[i].pv_pic_buf)->i4_abs_poc;
  ------------------
  |  |  153|  4.51k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  4.51k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2436|  4.51k|                ps_mv_buf->ai1_l0_collocated_poc_lt[(ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1))][i] = ((pic_buf_t *)ps_slice_hdr->as_ref_pic_list0[i].pv_pic_buf)->u1_used_as_ref;
  ------------------
  |  |  153|  4.51k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  4.51k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 2437|  4.51k|            }
 2438|  2.22k|        }
 2439|  10.7k|    }
 2440|       |
 2441|       |    /*Initialize the low delay flag at the beginning of every slice*/
 2442|  10.7k|    if((0 == ps_codec->s_parse.i4_ctb_slice_x) || (0 == ps_codec->s_parse.i4_ctb_slice_y))
  ------------------
  |  Branch (2442:8): [True: 6.35k, False: 4.44k]
  |  Branch (2442:51): [True: 2.13k, False: 2.31k]
  ------------------
 2443|  8.48k|    {
 2444|       |        /* Lowdelay flag */
 2445|  8.48k|        WORD32 cur_poc, ref_list_poc, flag = 1;
 2446|  8.48k|        cur_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
 2447|  11.3k|        for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (2447:20): [True: 3.35k, False: 7.95k]
  ------------------
 2448|  3.35k|        {
 2449|  3.35k|            ref_list_poc = ((mv_buf_t *)ps_slice_hdr->as_ref_pic_list0[i].pv_mv_buf)->i4_abs_poc;
 2450|  3.35k|            if(ref_list_poc > cur_poc)
  ------------------
  |  Branch (2450:16): [True: 529, False: 2.82k]
  ------------------
 2451|    529|            {
 2452|    529|                flag = 0;
 2453|    529|                break;
 2454|    529|            }
 2455|  3.35k|        }
 2456|  8.48k|        if(flag && (ps_slice_hdr->i1_slice_type == BSLICE))
  ------------------
  |  Branch (2456:12): [True: 7.95k, False: 529]
  |  Branch (2456:20): [True: 1.28k, False: 6.67k]
  ------------------
 2457|  1.28k|        {
 2458|  4.28k|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (2458:24): [True: 3.20k, False: 1.08k]
  ------------------
 2459|  3.20k|            {
 2460|  3.20k|                ref_list_poc = ((mv_buf_t *)ps_slice_hdr->as_ref_pic_list1[i].pv_mv_buf)->i4_abs_poc;
 2461|  3.20k|                if(ref_list_poc > cur_poc)
  ------------------
  |  Branch (2461:20): [True: 200, False: 3.00k]
  ------------------
 2462|    200|                {
 2463|    200|                    flag = 0;
 2464|    200|                    break;
 2465|    200|                }
 2466|  3.20k|            }
 2467|  1.28k|        }
 2468|  8.48k|        ps_slice_hdr->i1_low_delay_flag = flag;
 2469|  8.48k|    }
 2470|       |
 2471|       |    /* initialize the cabac init idc based on slice type */
 2472|  10.7k|    if(ps_slice_hdr->i1_slice_type == ISLICE)
  ------------------
  |  Branch (2472:8): [True: 8.57k, False: 2.22k]
  ------------------
 2473|  8.57k|    {
 2474|  8.57k|        cabac_init_idc = 0;
 2475|  8.57k|    }
 2476|  2.22k|    else if(ps_slice_hdr->i1_slice_type == PSLICE)
  ------------------
  |  Branch (2476:13): [True: 180, False: 2.04k]
  ------------------
 2477|    180|    {
 2478|    180|        cabac_init_idc = ps_slice_hdr->i1_cabac_init_flag ? 2 : 1;
  ------------------
  |  Branch (2478:26): [True: 81, False: 99]
  ------------------
 2479|    180|    }
 2480|  2.04k|    else
 2481|  2.04k|    {
 2482|  2.04k|        cabac_init_idc = ps_slice_hdr->i1_cabac_init_flag ? 1 : 2;
  ------------------
  |  Branch (2482:26): [True: 1.04k, False: 997]
  ------------------
 2483|  2.04k|    }
 2484|       |
 2485|  10.7k|    slice_qp = ps_slice_hdr->i1_slice_qp_delta + ps_pps->i1_pic_init_qp;
 2486|  10.7k|    slice_qp = CLIP3(slice_qp, 0, 51);
  ------------------
  |  |   40|  10.7k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 10.7k]
  |  |  |  Branch (40:53): [True: 0, False: 10.7k]
  |  |  ------------------
  ------------------
 2487|       |
 2488|       |    /*Update QP value for every indepndent slice or for every dependent slice that begins at the start of a new tile*/
 2489|  10.7k|    if((0 == ps_slice_hdr->i1_dependent_slice_flag) ||
  ------------------
  |  Branch (2489:8): [True: 10.2k, False: 529]
  ------------------
 2490|  10.7k|                    ((1 == ps_slice_hdr->i1_dependent_slice_flag) && ((0 == ps_codec->s_parse.i4_ctb_tile_x) && (0 == ps_codec->s_parse.i4_ctb_tile_y))))
  ------------------
  |  Branch (2490:22): [True: 529, False: 0]
  |  Branch (2490:71): [True: 481, False: 48]
  |  Branch (2490:113): [True: 200, False: 281]
  ------------------
 2491|  10.4k|    {
 2492|  10.4k|        ps_codec->s_parse.u4_qp = slice_qp;
 2493|  10.4k|    }
 2494|       |
 2495|       |    /*Cabac init at the beginning of a slice*/
 2496|       |    //If the slice is a dependent slice, not present at the start of a tile
 2497|  10.7k|    if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2497:8): [True: 5.40k, False: 5.38k]
  ------------------
 2498|  5.40k|    {
 2499|  5.40k|        if((1 == ps_slice_hdr->i1_dependent_slice_flag) && (!((ps_codec->s_parse.i4_ctb_tile_x == 0) && (ps_codec->s_parse.i4_ctb_tile_y == 0))))
  ------------------
  |  Branch (2499:12): [True: 323, False: 5.08k]
  |  Branch (2499:63): [True: 303, False: 20]
  |  Branch (2499:105): [True: 128, False: 175]
  ------------------
 2500|    195|        {
 2501|    195|            if((0 == ps_pps->i1_entropy_coding_sync_enabled_flag) || (ps_pps->i1_entropy_coding_sync_enabled_flag && (0 != ps_codec->s_parse.i4_ctb_x)))
  ------------------
  |  Branch (2501:16): [True: 55, False: 140]
  |  Branch (2501:71): [True: 140, False: 0]
  |  Branch (2501:118): [True: 7, False: 133]
  ------------------
 2502|     62|            {
 2503|     62|                ihevcd_cabac_reset(&ps_codec->s_parse.s_cabac,
 2504|     62|                                   &ps_codec->s_parse.s_bitstrm);
 2505|     62|            }
 2506|    195|        }
 2507|  5.21k|        else if((0 == ps_pps->i1_entropy_coding_sync_enabled_flag) || (ps_pps->i1_entropy_coding_sync_enabled_flag && (0 != ps_codec->s_parse.i4_ctb_x)))
  ------------------
  |  Branch (2507:17): [True: 4.23k, False: 973]
  |  Branch (2507:72): [True: 973, False: 0]
  |  Branch (2507:119): [True: 1, False: 972]
  ------------------
 2508|  4.23k|        {
 2509|  4.23k|            ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
 2510|  4.23k|                                    &ps_codec->s_parse.s_bitstrm,
 2511|  4.23k|                                    slice_qp,
 2512|  4.23k|                                    cabac_init_idc,
 2513|  4.23k|                                    &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0]);
 2514|  4.23k|            if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (2514:16): [True: 21, False: 4.21k]
  ------------------
 2515|     21|            {
 2516|     21|                ps_codec->i4_slice_error = 1;
 2517|     21|                end_of_slice_flag = 1;
 2518|     21|                ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2519|     21|            }
 2520|  4.23k|        }
 2521|  5.40k|    }
 2522|       |
 2523|       |
 2524|  10.7k|    do
 2525|  6.24M|    {
 2526|       |
 2527|  6.24M|        {
 2528|  6.24M|            WORD32 cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
 2529|  6.24M|                            + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 2530|  6.24M|            if(1 == ps_codec->i4_num_cores && 0 == cur_ctb_idx % RESET_TU_BUF_NCTB)
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  4.94M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2530:16): [True: 4.94M, False: 1.30M]
  |  Branch (2530:47): [True: 1.36k, False: 4.94M]
  ------------------
 2531|  1.36k|            {
 2532|  1.36k|                ps_codec->s_parse.ps_tu = ps_codec->s_parse.ps_pic_tu;
 2533|  1.36k|                ps_codec->s_parse.i4_pic_tu_idx = 0;
 2534|  1.36k|            }
 2535|  6.24M|        }
 2536|       |
 2537|  6.24M|        end_of_pic = 0;
 2538|       |        /* Section:7.3.7 Coding tree unit syntax */
 2539|       |        /* coding_tree_unit() inlined here */
 2540|       |        /* If number of cores is greater than 1, then add job to the queue */
 2541|       |        //TODO: Dual core implementation might need a different algo for better load balancing
 2542|       |        /* At the start of ctb row parsing in a tile, queue a job for processing the current tile row */
 2543|  6.24M|        ps_codec->s_parse.i4_ctb_num_pcm_blks = 0;
 2544|       |
 2545|       |
 2546|       |        /*At the beginning of each tile-which is not the beginning of a slice, cabac context must be initialized.
 2547|       |         * Hence, check for the tile beginning here */
 2548|  6.24M|        if(((0 == ps_codec->s_parse.i4_ctb_tile_x) && (0 == ps_codec->s_parse.i4_ctb_tile_y))
  ------------------
  |  Branch (2548:13): [True: 134k, False: 6.11M]
  |  Branch (2548:55): [True: 8.45k, False: 126k]
  ------------------
 2549|  6.24M|                        && (!((ps_tile->u1_pos_x == 0) && (ps_tile->u1_pos_y == 0)))
  ------------------
  |  Branch (2549:31): [True: 7.46k, False: 993]
  |  Branch (2549:59): [True: 5.35k, False: 2.10k]
  ------------------
 2550|  6.24M|                        && (!((0 == ps_codec->s_parse.i4_ctb_slice_x) && (0 == ps_codec->s_parse.i4_ctb_slice_y))))
  ------------------
  |  Branch (2550:31): [True: 2.10k, False: 993]
  |  Branch (2550:74): [True: 128, False: 1.98k]
  ------------------
 2551|  2.97k|        {
 2552|  2.97k|            slice_qp = ps_slice_hdr->i1_slice_qp_delta + ps_pps->i1_pic_init_qp;
 2553|  2.97k|            slice_qp = CLIP3(slice_qp, 0, 51);
  ------------------
  |  |   40|  2.97k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 0, False: 2.97k]
  |  |  |  Branch (40:53): [True: 0, False: 2.97k]
  |  |  ------------------
  ------------------
 2554|  2.97k|            ps_codec->s_parse.u4_qp = slice_qp;
 2555|       |
 2556|  2.97k|            ihevcd_get_tile_pos(ps_pps, ps_sps, ps_codec->s_parse.i4_ctb_x,
 2557|  2.97k|                                ps_codec->s_parse.i4_ctb_y,
 2558|  2.97k|                                &ps_codec->s_parse.i4_ctb_tile_x,
 2559|  2.97k|                                &ps_codec->s_parse.i4_ctb_tile_y,
 2560|  2.97k|                                &tile_idx);
 2561|       |
 2562|  2.97k|            ps_codec->s_parse.ps_tile = ps_pps->ps_tile + tile_idx;
 2563|  2.97k|            ps_codec->s_parse.i4_cur_tile_idx = tile_idx;
 2564|  2.97k|            ps_tile_prev = ps_tile - 1;
 2565|       |
 2566|  2.97k|            tile_start_ctb_idx = ps_tile->u1_pos_x
 2567|  2.97k|                            + ps_tile->u1_pos_y * (ps_sps->i2_pic_wd_in_ctb);
 2568|       |
 2569|  2.97k|            slice_start_ctb_idx =  ps_slice_hdr->i2_ctb_x
 2570|  2.97k|                            + ps_slice_hdr->i2_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 2571|       |
 2572|       |            /*For slices that span across multiple tiles*/
 2573|  2.97k|            if(slice_start_ctb_idx < tile_start_ctb_idx)
  ------------------
  |  Branch (2573:16): [True: 2.93k, False: 41]
  ------------------
 2574|  2.93k|            {       /* 2 Cases
 2575|       |             * 1 - slice spans across frame-width- but does not start from 1st column
 2576|       |             * 2 - Slice spans across multiple tiles anywhere is a frame
 2577|       |             */
 2578|  2.93k|                ps_codec->s_parse.i4_ctb_slice_y = ps_tile->u1_pos_y - ps_slice_hdr->i2_ctb_y;
 2579|  2.93k|                if(!(((ps_slice_hdr->i2_ctb_x + ps_tile_prev->u2_wd) % ps_sps->i2_pic_wd_in_ctb) == ps_tile->u1_pos_x)) //Case 2
  ------------------
  |  Branch (2579:20): [True: 596, False: 2.33k]
  ------------------
 2580|    596|                {
 2581|    596|                    if(ps_slice_hdr->i2_ctb_y <= ps_tile->u1_pos_y)
  ------------------
  |  Branch (2581:24): [True: 596, False: 0]
  ------------------
 2582|    596|                    {
 2583|       |                        //Check if ctb x is before or after
 2584|    596|                        if(ps_slice_hdr->i2_ctb_x > ps_tile->u1_pos_x)
  ------------------
  |  Branch (2584:28): [True: 6, False: 590]
  ------------------
 2585|      6|                        {
 2586|      6|                            ps_codec->s_parse.i4_ctb_slice_y -= 1;
 2587|      6|                        }
 2588|    596|                    }
 2589|    596|                }
 2590|       |                /*ps_codec->s_parse.i4_ctb_slice_y = ps_tile->u1_pos_y - ps_slice_hdr->i2_ctb_y;
 2591|       |                if (ps_slice_hdr->i2_ctb_y <= ps_tile->u1_pos_y)
 2592|       |                {
 2593|       |                    //Check if ctb x is before or after
 2594|       |                    if (ps_slice_hdr->i2_ctb_x > ps_tile->u1_pos_x )
 2595|       |                    {
 2596|       |                        ps_codec->s_parse.i4_ctb_slice_y -= 1 ;
 2597|       |                    }
 2598|       |                }*/
 2599|  2.93k|            }
 2600|       |
 2601|       |            /* Cabac init is done unconditionally at the start of the tile irrespective
 2602|       |             * of whether it is a dependent or an independent slice */
 2603|  2.97k|            if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2603:16): [True: 161, False: 2.81k]
  ------------------
 2604|    161|            {
 2605|    161|                ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
 2606|    161|                                        &ps_codec->s_parse.s_bitstrm,
 2607|    161|                                        slice_qp,
 2608|    161|                                        cabac_init_idc,
 2609|    161|                                        &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0]);
 2610|    161|                if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (2610:20): [True: 1, False: 160]
  ------------------
 2611|      1|                {
 2612|      1|                    ps_codec->i4_slice_error = 1;
 2613|      1|                    end_of_slice_flag = 1;
 2614|      1|                    ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2615|      1|                }
 2616|       |
 2617|    161|            }
 2618|  2.97k|        }
 2619|       |        /* If number of cores is greater than 1, then add job to the queue */
 2620|       |        //TODO: Dual core implementation might need a different algo for better load balancing
 2621|       |        /* At the start of ctb row parsing in a tile, queue a job for processing the current tile row */
 2622|       |
 2623|  6.24M|        if(0 == ps_codec->s_parse.i4_ctb_tile_x)
  ------------------
  |  Branch (2623:12): [True: 134k, False: 6.11M]
  ------------------
 2624|   134k|        {
 2625|       |
 2626|   134k|            if(1 < ps_codec->i4_num_cores)
  ------------------
  |  Branch (2626:16): [True: 61.6k, False: 73.1k]
  ------------------
 2627|  61.6k|            {
 2628|  61.6k|                proc_job_t s_job;
 2629|  61.6k|                IHEVCD_ERROR_T ret;
 2630|  61.6k|                s_job.i4_cmd    = CMD_PROCESS;
 2631|  61.6k|                s_job.i2_ctb_cnt = (WORD16)ps_tile->u2_wd;
 2632|  61.6k|                s_job.i2_ctb_x = (WORD16)ps_codec->s_parse.i4_ctb_x;
 2633|  61.6k|                s_job.i2_ctb_y = (WORD16)ps_codec->s_parse.i4_ctb_y;
 2634|  61.6k|                s_job.i2_slice_idx = (WORD16)ps_codec->s_parse.i4_cur_slice_idx;
 2635|  61.6k|                s_job.i4_tu_coeff_data_ofst = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data -
 2636|  61.6k|                                (UWORD8 *)ps_codec->s_parse.pv_pic_tu_coeff_data;
 2637|  61.6k|                ret = ihevcd_jobq_queue((jobq_t *)ps_codec->s_parse.pv_proc_jobq, &s_job, sizeof(proc_job_t), 1);
 2638|       |
 2639|  61.6k|                if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (2639:20): [True: 0, False: 61.6k]
  ------------------
 2640|      0|                    return ret;
 2641|  61.6k|            }
 2642|  73.1k|            else
 2643|  73.1k|            {
 2644|  73.1k|                process_ctxt_t *ps_proc = &ps_codec->as_process[0];
 2645|  73.1k|                WORD32 tu_coeff_data_ofst = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data -
 2646|  73.1k|                                (UWORD8 *)ps_codec->s_parse.pv_pic_tu_coeff_data;
 2647|       |
 2648|       |                /* If the codec is running in single core mode,
 2649|       |                 * initialize zeroth process context
 2650|       |                 * TODO: Dual core mode might need a different implementation instead of jobq
 2651|       |                 */
 2652|       |
 2653|  73.1k|                ps_proc->i4_ctb_cnt = ps_tile->u2_wd;
 2654|  73.1k|                ps_proc->i4_ctb_x   = ps_codec->s_parse.i4_ctb_x;
 2655|  73.1k|                ps_proc->i4_ctb_y   = ps_codec->s_parse.i4_ctb_y;
 2656|  73.1k|                ps_proc->i4_cur_slice_idx = ps_codec->s_parse.i4_cur_slice_idx;
 2657|       |
 2658|  73.1k|                ihevcd_init_proc_ctxt(ps_proc, tu_coeff_data_ofst);
 2659|  73.1k|            }
 2660|   134k|        }
 2661|       |
 2662|       |
 2663|       |        /* Restore cabac context model from top right CTB if entropy sync is enabled */
 2664|  6.24M|        if(ps_pps->i1_entropy_coding_sync_enabled_flag)
  ------------------
  |  Branch (2664:12): [True: 2.39M, False: 3.85M]
  ------------------
 2665|  2.39M|        {
 2666|       |            /*TODO Handle single CTB and top-right belonging to a different slice */
 2667|  2.39M|            if(0 == ps_codec->s_parse.i4_ctb_x && 0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2667:16): [True: 20.7k, False: 2.37M]
  |  Branch (2667:51): [True: 1.43k, False: 19.2k]
  ------------------
 2668|  1.43k|            {
 2669|       |                //WORD32 size = sizeof(ps_codec->s_parse.s_cabac.au1_ctxt_models);
 2670|  1.43k|                WORD32 default_ctxt = 0;
 2671|       |
 2672|  1.43k|                if((0 == ps_codec->s_parse.i4_ctb_slice_y) && (!ps_slice_hdr->i1_dependent_slice_flag))
  ------------------
  |  Branch (2672:20): [True: 972, False: 459]
  |  Branch (2672:63): [True: 844, False: 128]
  ------------------
 2673|    844|                    default_ctxt = 1;
 2674|  1.43k|                if(1 == ps_sps->i2_pic_wd_in_ctb)
  ------------------
  |  Branch (2674:20): [True: 642, False: 789]
  ------------------
 2675|    642|                    default_ctxt = 1;
 2676|       |
 2677|  1.43k|                ps_codec->s_parse.u4_qp = slice_qp;
 2678|  1.43k|                if(default_ctxt)
  ------------------
  |  Branch (2678:20): [True: 1.10k, False: 326]
  ------------------
 2679|  1.10k|                {
 2680|       |                    //memcpy(&ps_codec->s_parse.s_cabac.au1_ctxt_models, &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0], size);
 2681|  1.10k|                    ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
 2682|  1.10k|                                            &ps_codec->s_parse.s_bitstrm,
 2683|  1.10k|                                            slice_qp,
 2684|  1.10k|                                            cabac_init_idc,
 2685|  1.10k|                                            &gau1_ihevc_cab_ctxts[cabac_init_idc][slice_qp][0]);
 2686|       |
 2687|  1.10k|                    if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (2687:24): [True: 2, False: 1.10k]
  ------------------
 2688|      2|                    {
 2689|      2|                        ps_codec->i4_slice_error = 1;
 2690|      2|                        end_of_slice_flag = 1;
 2691|      2|                        ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2692|      2|                    }
 2693|  1.10k|                }
 2694|    326|                else
 2695|    326|                {
 2696|       |                    //memcpy(&ps_codec->s_parse.s_cabac.au1_ctxt_models, &ps_codec->s_parse.s_cabac.au1_ctxt_models_sync, size);
 2697|    326|                    ret = ihevcd_cabac_init(&ps_codec->s_parse.s_cabac,
 2698|    326|                                            &ps_codec->s_parse.s_bitstrm,
 2699|    326|                                            slice_qp,
 2700|    326|                                            cabac_init_idc,
 2701|    326|                                            (const UWORD8 *)&ps_codec->s_parse.s_cabac.au1_ctxt_models_sync);
 2702|       |
 2703|    326|                    if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (2703:24): [True: 7, False: 319]
  ------------------
 2704|      7|                    {
 2705|      7|                        ps_codec->i4_slice_error = 1;
 2706|      7|                        end_of_slice_flag = 1;
 2707|      7|                        ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2708|      7|                    }
 2709|    326|                }
 2710|  1.43k|            }
 2711|  2.39M|        }
 2712|       |
 2713|       |
 2714|       |
 2715|  6.24M|        if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2715:12): [True: 380k, False: 5.86M]
  ------------------
 2716|   380k|        {
 2717|   380k|            if(ps_slice_hdr->i1_slice_sao_luma_flag || ps_slice_hdr->i1_slice_sao_chroma_flag)
  ------------------
  |  Branch (2717:16): [True: 39.8k, False: 340k]
  |  Branch (2717:56): [True: 1.54k, False: 339k]
  ------------------
 2718|  41.3k|                ihevcd_parse_sao(ps_codec);
 2719|   380k|        }
 2720|  5.86M|        else
 2721|  5.86M|        {
 2722|  5.86M|            sao_t *ps_sao = ps_codec->s_parse.ps_pic_sao +
 2723|  5.86M|                            ps_codec->s_parse.i4_ctb_x +
 2724|  5.86M|                            ps_codec->s_parse.i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
 2725|       |
 2726|       |            /* Default values */
 2727|  5.86M|            ps_sao->b3_y_type_idx = 0;
 2728|  5.86M|            ps_sao->b3_cb_type_idx = 0;
 2729|  5.86M|            ps_sao->b3_cr_type_idx = 0;
 2730|  5.86M|        }
 2731|       |
 2732|       |        //AEV_TRACE("CTB x", ps_codec->s_parse.i4_ctb_x, 0);
 2733|       |        //AEV_TRACE("CTB y", ps_codec->s_parse.i4_ctb_y, 0);
 2734|       |
 2735|  6.24M|        {
 2736|  6.24M|            WORD32 ctb_indx;
 2737|  6.24M|            ctb_indx = ps_codec->s_parse.i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_codec->s_parse.i4_ctb_y;
 2738|  6.24M|            ps_codec->s_parse.s_bs_ctxt.pu1_pic_qp_const_in_ctb[ctb_indx >> 3] |= (1 << (ctb_indx & 7));
 2739|  6.24M|            {
 2740|  6.24M|                UWORD16 *pu1_slice_idx = ps_codec->s_parse.pu1_slice_idx;
 2741|  6.24M|                pu1_slice_idx[ctb_indx] = ps_codec->s_parse.i4_cur_independent_slice_idx;
 2742|  6.24M|            }
 2743|  6.24M|        }
 2744|       |
 2745|  6.24M|        if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2745:12): [True: 380k, False: 5.86M]
  ------------------
 2746|   380k|        {
 2747|   380k|            tu_t *ps_tu = ps_codec->s_parse.ps_tu;
 2748|   380k|            WORD32 i4_tu_cnt = ps_codec->s_parse.s_cu.i4_tu_cnt;
 2749|   380k|            WORD32 i4_pic_tu_idx = ps_codec->s_parse.i4_pic_tu_idx;
 2750|       |
 2751|   380k|            pu_t *ps_pu = ps_codec->s_parse.ps_pu;
 2752|   380k|            WORD32 i4_pic_pu_idx = ps_codec->s_parse.i4_pic_pu_idx;
 2753|       |
 2754|   380k|            UWORD8 *pu1_tu_coeff_data = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data;
 2755|       |
 2756|   380k|            ret = ihevcd_parse_coding_quadtree(ps_codec,
 2757|   380k|                                               (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size),
 2758|   380k|                                               (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size),
 2759|   380k|                                               ps_sps->i1_log2_ctb_size,
 2760|   380k|                                               0);
 2761|       |            /* Check for error */
 2762|   380k|            if (ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (2762:17): [True: 15, False: 380k]
  ------------------
 2763|     15|            {
 2764|       |                /* Reset tu and pu parameters, and signal current ctb as skip */
 2765|     15|                WORD32 tu_coeff_data_reset_size;
 2766|       |
 2767|     15|                ps_codec->s_parse.ps_tu = ps_tu;
 2768|     15|                ps_codec->s_parse.s_cu.i4_tu_cnt = i4_tu_cnt;
 2769|     15|                ps_codec->s_parse.i4_pic_tu_idx = i4_pic_tu_idx;
 2770|       |
 2771|     15|                ps_codec->s_parse.ps_pu = ps_pu;
 2772|     15|                ps_codec->s_parse.i4_pic_pu_idx = i4_pic_pu_idx;
 2773|       |
 2774|     15|                tu_coeff_data_reset_size = (UWORD8 *)ps_codec->s_parse.pv_tu_coeff_data - pu1_tu_coeff_data;
 2775|     15|                memset(pu1_tu_coeff_data, 0, tu_coeff_data_reset_size);
 2776|     15|                ps_codec->s_parse.pv_tu_coeff_data = (void *)pu1_tu_coeff_data;
 2777|       |
 2778|     15|                ihevcd_set_ctb_skip(ps_codec);
 2779|       |
 2780|       |                /* Set slice error to suppress further parsing and
 2781|       |                 * signal end of slice.
 2782|       |                 */
 2783|     15|                ps_codec->i4_slice_error = 1;
 2784|     15|                end_of_slice_flag = 1;
 2785|     15|                ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 2786|     15|            }
 2787|   380k|        }
 2788|  5.86M|        else
 2789|  5.86M|        {
 2790|  5.86M|            ihevcd_set_ctb_skip(ps_codec);
 2791|  5.86M|        }
 2792|       |
 2793|  6.24M|        if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (2793:12): [True: 380k, False: 5.86M]
  ------------------
 2794|   380k|            end_of_slice_flag = ihevcd_cabac_decode_terminate(&ps_codec->s_parse.s_cabac, &ps_codec->s_parse.s_bitstrm);
 2795|       |
 2796|  6.24M|        AEV_TRACE("end_of_slice_flag", end_of_slice_flag, ps_codec->s_parse.s_cabac.u4_range);
 2797|       |
 2798|       |
 2799|       |        /* In case of tiles or entropy sync, terminate cabac and copy cabac context backed up at the end of top-right CTB */
 2800|  6.24M|        if(ps_pps->i1_tiles_enabled_flag || ps_pps->i1_entropy_coding_sync_enabled_flag)
  ------------------
  |  Branch (2800:12): [True: 2.71M, False: 3.53M]
  |  Branch (2800:45): [True: 105k, False: 3.43M]
  ------------------
 2801|  2.81M|        {
 2802|  2.81M|            WORD32 end_of_tile = 0;
 2803|  2.81M|            WORD32 end_of_tile_row = 0;
 2804|       |
 2805|       |            /* Take a back up of cabac context models if entropy sync is enabled */
 2806|  2.81M|            if(ps_pps->i1_entropy_coding_sync_enabled_flag || ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (2806:16): [True: 2.39M, False: 425k]
  |  Branch (2806:63): [True: 425k, False: 0]
  ------------------
 2807|  2.81M|            {
 2808|  2.81M|                if(1 == ps_codec->s_parse.i4_ctb_x)
  ------------------
  |  Branch (2808:20): [True: 23.4k, False: 2.79M]
  ------------------
 2809|  23.4k|                {
 2810|  23.4k|                    WORD32 size = sizeof(ps_codec->s_parse.s_cabac.au1_ctxt_models);
 2811|  23.4k|                    memcpy(&ps_codec->s_parse.s_cabac.au1_ctxt_models_sync, &ps_codec->s_parse.s_cabac.au1_ctxt_models, size);
 2812|  23.4k|                }
 2813|  2.81M|            }
 2814|       |
 2815|       |            /* Since tiles and entropy sync are not enabled simultaneously, the following will not result in any problems */
 2816|  2.81M|            if((ps_codec->s_parse.i4_ctb_tile_x + 1) == (ps_tile->u2_wd))
  ------------------
  |  Branch (2816:16): [True: 33.9k, False: 2.78M]
  ------------------
 2817|  33.9k|            {
 2818|  33.9k|                end_of_tile_row = 1;
 2819|  33.9k|                if((ps_codec->s_parse.i4_ctb_tile_y + 1) == ps_tile->u2_ht)
  ------------------
  |  Branch (2819:20): [True: 4.32k, False: 29.6k]
  ------------------
 2820|  4.32k|                    end_of_tile = 1;
 2821|  33.9k|            }
 2822|  2.81M|            if((0 == end_of_slice_flag) && (0 == ps_codec->i4_slice_error) &&
  ------------------
  |  Branch (2822:16): [True: 2.81M, False: 76]
  |  Branch (2822:44): [True: 16.7k, False: 2.80M]
  ------------------
 2823|  2.81M|                            ((ps_pps->i1_tiles_enabled_flag && end_of_tile) ||
  ------------------
  |  Branch (2823:31): [True: 15.2k, False: 1.46k]
  |  Branch (2823:64): [True: 539, False: 14.7k]
  ------------------
 2824|  16.7k|                                            (ps_pps->i1_entropy_coding_sync_enabled_flag && end_of_tile_row)))
  ------------------
  |  Branch (2824:46): [True: 7.33k, False: 8.85k]
  |  Branch (2824:93): [True: 805, False: 6.52k]
  ------------------
 2825|  1.34k|            {
 2826|  1.34k|                WORD32 end_of_sub_stream_one_bit;
 2827|  1.34k|                end_of_sub_stream_one_bit = ihevcd_cabac_decode_terminate(&ps_codec->s_parse.s_cabac, &ps_codec->s_parse.s_bitstrm);
 2828|  1.34k|                AEV_TRACE("end_of_sub_stream_one_bit", end_of_sub_stream_one_bit, ps_codec->s_parse.s_cabac.u4_range);
 2829|       |
 2830|       |                /* TODO: Remove the check for offset when HM is updated to include a byte unconditionally even for aligned location */
 2831|       |                /* For Ittiam streams this check should not be there, for HM9.1 streams this should be there */
 2832|  1.34k|                if(ps_codec->s_parse.s_bitstrm.u4_bit_ofst % 8)
  ------------------
  |  Branch (2832:20): [True: 1.13k, False: 213]
  ------------------
 2833|  1.13k|                    ihevcd_bits_flush_to_byte_boundary(&ps_codec->s_parse.s_bitstrm);
 2834|       |
 2835|  1.34k|                UNUSED(end_of_sub_stream_one_bit);
  ------------------
  |  |   38|  1.34k|#define UNUSED(x) ((void)(x))
  ------------------
 2836|  1.34k|            }
 2837|  2.81M|        }
 2838|  6.24M|        {
 2839|  6.24M|            WORD32 ctb_indx;
 2840|       |
 2841|  6.24M|            ctb_addr = ps_codec->s_parse.i4_ctb_y * num_ctb_in_row + ps_codec->s_parse.i4_ctb_x;
 2842|       |
 2843|  6.24M|            ctb_indx = ++ctb_addr;
 2844|       |
 2845|       |            /* Store pu_idx for next CTB in frame level pu_idx array */
 2846|       |
 2847|       |            //In case of multiple tiles, if end-of-tile row is reached
 2848|  6.24M|            if((ps_tile->u2_wd == (ps_codec->s_parse.i4_ctb_tile_x + 1)) && (ps_tile->u2_wd != ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (2848:16): [True: 134k, False: 6.11M]
  |  Branch (2848:77): [True: 13.7k, False: 121k]
  ------------------
 2849|  13.7k|            {
 2850|  13.7k|                ctb_indx = (ps_sps->i2_pic_wd_in_ctb * (ps_codec->s_parse.i4_ctb_tile_y + 1 + ps_tile->u1_pos_y)) + ps_tile->u1_pos_x; //idx is the beginning of next row in current tile.
 2851|  13.7k|                if(ps_tile->u2_ht == (ps_codec->s_parse.i4_ctb_tile_y + 1))
  ------------------
  |  Branch (2851:20): [True: 1.84k, False: 11.9k]
  ------------------
 2852|  1.84k|                {
 2853|       |                    //If the current ctb is the last tile's last ctb
 2854|  1.84k|                    if((ps_tile->u2_wd + ps_tile->u1_pos_x == ps_sps->i2_pic_wd_in_ctb) && ((ps_tile->u2_ht + ps_tile->u1_pos_y == ps_sps->i2_pic_ht_in_ctb)))
  ------------------
  |  Branch (2854:24): [True: 856, False: 993]
  |  Branch (2854:92): [True: 399, False: 457]
  ------------------
 2855|    399|                    {
 2856|    399|                        ctb_indx = ctb_addr; //Next continuous ctb address
 2857|    399|                    }
 2858|  1.45k|                    else //Not last tile's end , but a tile end
 2859|  1.45k|                    {
 2860|  1.45k|                        tile_t *ps_next_tile = ps_codec->s_parse.ps_tile + 1;
 2861|  1.45k|                        ctb_indx = ps_next_tile->u1_pos_x + (ps_next_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb); //idx is the beginning of first row in next tile.
 2862|  1.45k|                    }
 2863|  1.84k|                }
 2864|  13.7k|            }
 2865|       |
 2866|  6.24M|            ps_codec->s_parse.pu4_pic_pu_idx[ctb_indx] = ps_codec->s_parse.i4_pic_pu_idx;
 2867|  6.24M|            ps_codec->s_parse.i4_next_pu_ctb_cnt = ctb_indx;
 2868|       |
 2869|  6.24M|            ps_codec->s_parse.pu1_pu_map += num_min4x4_in_ctb;
 2870|       |
 2871|       |            /* Store tu_idx for next CTB in frame level tu_idx array */
 2872|  6.24M|            if(1 == ps_codec->i4_num_cores)
  ------------------
  |  Branch (2872:16): [True: 4.94M, False: 1.30M]
  ------------------
 2873|  4.94M|            {
 2874|  4.94M|                ctb_indx = (0 == ctb_addr % RESET_TU_BUF_NCTB) ?
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  4.94M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2874:28): [True: 0, False: 4.94M]
  ------------------
 2875|  4.94M|                                RESET_TU_BUF_NCTB : ctb_addr % RESET_TU_BUF_NCTB;
  ------------------
  |  |  179|      0|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|      0|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|      0|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|      0|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                              RESET_TU_BUF_NCTB : ctb_addr % RESET_TU_BUF_NCTB;
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  9.89M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2876|       |
 2877|       |                //In case of multiple tiles, if end-of-tile row is reached
 2878|  4.94M|                if((ps_tile->u2_wd == (ps_codec->s_parse.i4_ctb_tile_x + 1)) && (ps_tile->u2_wd != ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (2878:20): [True: 73.1k, False: 4.87M]
  |  Branch (2878:81): [True: 10.0k, False: 63.1k]
  ------------------
 2879|  10.0k|                {
 2880|  10.0k|                    ctb_indx = (ps_sps->i2_pic_wd_in_ctb * (ps_codec->s_parse.i4_ctb_tile_y + 1 + ps_tile->u1_pos_y)) + ps_tile->u1_pos_x; //idx is the beginning of next row in current tile.
 2881|  10.0k|                    if(ps_tile->u2_ht == (ps_codec->s_parse.i4_ctb_tile_y + 1))
  ------------------
  |  Branch (2881:24): [True: 1.30k, False: 8.73k]
  ------------------
 2882|  1.30k|                    {
 2883|       |                        //If the current ctb is the last tile's last ctb
 2884|  1.30k|                        if((ps_tile->u2_wd + ps_tile->u1_pos_x == ps_sps->i2_pic_wd_in_ctb) && ((ps_tile->u2_ht + ps_tile->u1_pos_y == ps_sps->i2_pic_ht_in_ctb)))
  ------------------
  |  Branch (2884:28): [True: 627, False: 679]
  |  Branch (2884:96): [True: 215, False: 412]
  ------------------
 2885|    215|                        {
 2886|    215|                            ctb_indx = (0 == ctb_addr % RESET_TU_BUF_NCTB) ?
  ------------------
  |  |  179|    215|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|    215|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|    215|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    215|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|    215|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|    215|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2886:40): [True: 0, False: 215]
  ------------------
 2887|    215|                                            RESET_TU_BUF_NCTB : ctb_addr % RESET_TU_BUF_NCTB;
  ------------------
  |  |  179|      0|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|      0|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|      0|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|      0|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                                          RESET_TU_BUF_NCTB : ctb_addr % RESET_TU_BUF_NCTB;
  ------------------
  |  |  179|    215|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|    430|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|    215|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|    215|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|    215|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|    215|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2888|    215|                        }
 2889|  1.09k|                        else  //Not last tile's end , but a tile end
 2890|  1.09k|                        {
 2891|  1.09k|                            tile_t *ps_next_tile = ps_codec->s_parse.ps_tile + 1;
 2892|  1.09k|                            ctb_indx =  ps_next_tile->u1_pos_x + (ps_next_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb); //idx is the beginning of first row in next tile.
 2893|  1.09k|                        }
 2894|  1.30k|                    }
 2895|  10.0k|                }
 2896|  4.94M|                ps_codec->s_parse.i4_next_tu_ctb_cnt = ctb_indx;
 2897|  4.94M|                ps_codec->s_parse.pu4_pic_tu_idx[ctb_indx] = ps_codec->s_parse.i4_pic_tu_idx;
 2898|  4.94M|            }
 2899|  1.30M|            else
 2900|  1.30M|            {
 2901|  1.30M|                ctb_indx = ctb_addr;
 2902|  1.30M|                if((ps_tile->u2_wd == (ps_codec->s_parse.i4_ctb_tile_x + 1)) && (ps_tile->u2_wd != ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (2902:20): [True: 61.6k, False: 1.24M]
  |  Branch (2902:81): [True: 3.73k, False: 57.9k]
  ------------------
 2903|  3.73k|                {
 2904|  3.73k|                    ctb_indx = (ps_sps->i2_pic_wd_in_ctb * (ps_codec->s_parse.i4_ctb_tile_y + 1 + ps_tile->u1_pos_y)) + ps_tile->u1_pos_x; //idx is the beginning of next row in current tile.
 2905|  3.73k|                    if(ps_tile->u2_ht == (ps_codec->s_parse.i4_ctb_tile_y + 1))
  ------------------
  |  Branch (2905:24): [True: 543, False: 3.19k]
  ------------------
 2906|    543|                    {
 2907|       |                        //If the current ctb is the last tile's last ctb
 2908|    543|                        if((ps_tile->u2_wd + ps_tile->u1_pos_x == ps_sps->i2_pic_wd_in_ctb) && ((ps_tile->u2_ht + ps_tile->u1_pos_y == ps_sps->i2_pic_ht_in_ctb)))
  ------------------
  |  Branch (2908:28): [True: 229, False: 314]
  |  Branch (2908:96): [True: 184, False: 45]
  ------------------
 2909|    184|                        {
 2910|    184|                            ctb_indx = ctb_addr;
 2911|    184|                        }
 2912|    359|                        else  //Not last tile's end , but a tile end
 2913|    359|                        {
 2914|    359|                            tile_t *ps_next_tile = ps_codec->s_parse.ps_tile + 1;
 2915|    359|                            ctb_indx =  ps_next_tile->u1_pos_x + (ps_next_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb); //idx is the beginning of first row in next tile.
 2916|    359|                        }
 2917|    543|                    }
 2918|  3.73k|                }
 2919|  1.30M|                ps_codec->s_parse.i4_next_tu_ctb_cnt = ctb_indx;
 2920|  1.30M|                ps_codec->s_parse.pu4_pic_tu_idx[ctb_indx] = ps_codec->s_parse.i4_pic_tu_idx;
 2921|  1.30M|            }
 2922|  6.24M|            ps_codec->s_parse.pu1_tu_map += num_min4x4_in_ctb;
 2923|  6.24M|        }
 2924|       |
 2925|       |        /* QP array population has to be done if deblocking is enabled in the picture
 2926|       |         * but some of the slices in the pic have it disabled */
 2927|  6.24M|        if((0 != ps_codec->i4_disable_deblk_pic) &&
  ------------------
  |  Branch (2927:12): [True: 0, False: 6.24M]
  ------------------
 2928|  6.24M|                (1 == ps_slice_hdr->i1_slice_disable_deblocking_filter_flag))
  ------------------
  |  Branch (2928:17): [True: 0, False: 0]
  ------------------
 2929|      0|        {
 2930|      0|            bs_ctxt_t *ps_bs_ctxt = &ps_codec->s_parse.s_bs_ctxt;
 2931|      0|            WORD32 log2_ctb_size = ps_sps->i1_log2_ctb_size;
 2932|      0|            UWORD8 *pu1_qp;
 2933|      0|            WORD32 qp_strd;
 2934|      0|            WORD32 u4_qp_const_in_ctb;
 2935|      0|            WORD32 cur_ctb_idx;
 2936|      0|            WORD32 next_ctb_idx;
 2937|      0|            WORD32 cur_tu_idx;
 2938|      0|            WORD32 i4_ctb_tu_cnt;
 2939|      0|            tu_t *ps_tu;
 2940|       |
 2941|      0|            cur_ctb_idx = ps_codec->s_parse.i4_ctb_x + ps_sps->i2_pic_wd_in_ctb * ps_codec->s_parse.i4_ctb_y;
 2942|       |            /* ctb_size/8 elements per CTB */
 2943|      0|            qp_strd = ps_sps->i2_pic_wd_in_ctb << (log2_ctb_size - 3);
 2944|      0|            pu1_qp = ps_bs_ctxt->pu1_pic_qp + ((ps_codec->s_parse.i4_ctb_x + ps_codec->s_parse.i4_ctb_y * qp_strd) << (log2_ctb_size - 3));
 2945|       |
 2946|      0|            u4_qp_const_in_ctb = ps_bs_ctxt->pu1_pic_qp_const_in_ctb[cur_ctb_idx >> 3] & (1 << (cur_ctb_idx & 7));
 2947|       |
 2948|      0|            next_ctb_idx = ps_codec->s_parse.i4_next_tu_ctb_cnt;
 2949|      0|            if(1 == ps_codec->i4_num_cores)
  ------------------
  |  Branch (2949:16): [True: 0, False: 0]
  ------------------
 2950|      0|            {
 2951|      0|                i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
 2952|      0|                                ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|      0|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|      0|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|      0|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|      0|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2953|       |
 2954|      0|                cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|      0|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|      0|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|      0|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|      0|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|      0|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2955|      0|            }
 2956|      0|            else
 2957|      0|            {
 2958|      0|                i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
 2959|      0|                                ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
 2960|       |
 2961|      0|                cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
 2962|      0|            }
 2963|       |
 2964|      0|            ps_tu = &ps_codec->s_parse.ps_pic_tu[cur_tu_idx];
 2965|       |
 2966|      0|            if(u4_qp_const_in_ctb)
  ------------------
  |  Branch (2966:16): [True: 0, False: 0]
  ------------------
 2967|      0|            {
 2968|      0|                pu1_qp[0] = ps_tu->b7_qp;
 2969|      0|            }
 2970|      0|            else
 2971|      0|            {
 2972|      0|                for(i = 0; i < i4_ctb_tu_cnt; i++, ps_tu++)
  ------------------
  |  Branch (2972:28): [True: 0, False: 0]
  ------------------
 2973|      0|                {
 2974|      0|                    WORD32 start_pos_x;
 2975|      0|                    WORD32 start_pos_y;
 2976|      0|                    WORD32 tu_size;
 2977|       |
 2978|       |                    /* start_pos_x and start_pos_y are in units of min TU size (4x4) */
 2979|      0|                    start_pos_x = ps_tu->b4_pos_x;
 2980|      0|                    start_pos_y = ps_tu->b4_pos_y;
 2981|       |
 2982|      0|                    tu_size = 1 << (ps_tu->b3_size + 2);
 2983|      0|                    tu_size >>= 2; /* TU size divided by 4 */
 2984|       |
 2985|      0|                    if(0 == (start_pos_x & 1) && 0 == (start_pos_y & 1))
  ------------------
  |  Branch (2985:24): [True: 0, False: 0]
  |  Branch (2985:50): [True: 0, False: 0]
  ------------------
 2986|      0|                    {
 2987|      0|                        WORD32 row, col;
 2988|      0|                        for(row = start_pos_y; row < start_pos_y + tu_size; row += 2)
  ------------------
  |  Branch (2988:48): [True: 0, False: 0]
  ------------------
 2989|      0|                        {
 2990|      0|                            for(col = start_pos_x; col < start_pos_x + tu_size; col += 2)
  ------------------
  |  Branch (2990:52): [True: 0, False: 0]
  ------------------
 2991|      0|                            {
 2992|      0|                                pu1_qp[(row >> 1) * qp_strd + (col >> 1)] = ps_tu->b7_qp;
 2993|      0|                            }
 2994|      0|                        }
 2995|      0|                    }
 2996|      0|                }
 2997|      0|            }
 2998|      0|        }
 2999|       |
 3000|  6.24M|        if(ps_codec->i4_num_cores <= MV_PRED_NUM_CORES_THRESHOLD)
  ------------------
  |  |  126|  6.24M|#define MV_PRED_NUM_CORES_THRESHOLD 2
  ------------------
  |  Branch (3000:12): [True: 5.49M, False: 752k]
  ------------------
 3001|  5.49M|        {
 3002|       |            /*************************************************/
 3003|       |            /****************   MV pred **********************/
 3004|       |            /*************************************************/
 3005|  5.49M|            WORD8 u1_top_ctb_avail = 1;
 3006|  5.49M|            WORD8 u1_left_ctb_avail = 1;
 3007|  5.49M|            WORD8 u1_top_lt_ctb_avail = 1;
 3008|  5.49M|            WORD8 u1_top_rt_ctb_avail = 1;
 3009|  5.49M|            WORD16 i2_wd_in_ctb;
 3010|       |
 3011|  5.49M|            tile_start_ctb_idx = ps_tile->u1_pos_x
 3012|  5.49M|                            + ps_tile->u1_pos_y * (ps_sps->i2_pic_wd_in_ctb);
 3013|       |
 3014|  5.49M|            slice_start_ctb_idx =  ps_slice_hdr->i2_ctb_x
 3015|  5.49M|                            + ps_slice_hdr->i2_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 3016|       |
 3017|  5.49M|            if((slice_start_ctb_idx < tile_start_ctb_idx))
  ------------------
  |  Branch (3017:16): [True: 431k, False: 5.06M]
  ------------------
 3018|   431k|            {
 3019|       |                //Slices span across multiple tiles.
 3020|   431k|                i2_wd_in_ctb = ps_sps->i2_pic_wd_in_ctb;
 3021|   431k|            }
 3022|  5.06M|            else
 3023|  5.06M|            {
 3024|  5.06M|                i2_wd_in_ctb = ps_tile->u2_wd;
 3025|  5.06M|            }
 3026|       |            /* slice and tile boundaries */
 3027|  5.49M|            if((0 == ps_codec->s_parse.i4_ctb_y) || (0 == ps_codec->s_parse.i4_ctb_tile_y))
  ------------------
  |  Branch (3027:16): [True: 94.9k, False: 5.40M]
  |  Branch (3027:53): [True: 14.1k, False: 5.38M]
  ------------------
 3028|   109k|            {
 3029|   109k|                u1_top_ctb_avail = 0;
 3030|   109k|                u1_top_lt_ctb_avail = 0;
 3031|   109k|                u1_top_rt_ctb_avail = 0;
 3032|   109k|            }
 3033|       |
 3034|  5.49M|            if((0 == ps_codec->s_parse.i4_ctb_x) || (0 == ps_codec->s_parse.i4_ctb_tile_x))
  ------------------
  |  Branch (3034:16): [True: 85.0k, False: 5.41M]
  |  Branch (3034:53): [True: 6.18k, False: 5.40M]
  ------------------
 3035|  91.2k|            {
 3036|  91.2k|                u1_left_ctb_avail = 0;
 3037|  91.2k|                u1_top_lt_ctb_avail = 0;
 3038|  91.2k|                if((0 == ps_codec->s_parse.i4_ctb_slice_y) || (0 == ps_codec->s_parse.i4_ctb_tile_y))
  ------------------
  |  Branch (3038:20): [True: 17.3k, False: 73.9k]
  |  Branch (3038:63): [True: 2.80k, False: 71.1k]
  ------------------
 3039|  20.1k|                {
 3040|  20.1k|                    u1_top_ctb_avail = 0;
 3041|  20.1k|                    if((i2_wd_in_ctb - 1) != ps_codec->s_parse.i4_ctb_slice_x) //TODO: For tile, not implemented
  ------------------
  |  Branch (3041:24): [True: 17.9k, False: 2.21k]
  ------------------
 3042|  17.9k|                    {
 3043|  17.9k|                        u1_top_rt_ctb_avail = 0;
 3044|  17.9k|                    }
 3045|  20.1k|                }
 3046|  91.2k|            }
 3047|       |            /*For slices not beginning at start of a ctb row*/
 3048|  5.40M|            else if(ps_codec->s_parse.i4_ctb_x > 0)
  ------------------
  |  Branch (3048:21): [True: 5.40M, False: 0]
  ------------------
 3049|  5.40M|            {
 3050|  5.40M|                if((0 == ps_codec->s_parse.i4_ctb_slice_y) || (0 == ps_codec->s_parse.i4_ctb_tile_y))
  ------------------
  |  Branch (3050:20): [True: 2.18M, False: 3.21M]
  |  Branch (3050:63): [True: 28.0k, False: 3.18M]
  ------------------
 3051|  2.21M|                {
 3052|  2.21M|                    u1_top_ctb_avail = 0;
 3053|  2.21M|                    u1_top_lt_ctb_avail = 0;
 3054|  2.21M|                    if(0 == ps_codec->s_parse.i4_ctb_slice_x)
  ------------------
  |  Branch (3054:24): [True: 211, False: 2.21M]
  ------------------
 3055|    211|                    {
 3056|    211|                        u1_left_ctb_avail = 0;
 3057|    211|                    }
 3058|  2.21M|                    if((i2_wd_in_ctb - 1) != ps_codec->s_parse.i4_ctb_slice_x)
  ------------------
  |  Branch (3058:24): [True: 2.21M, False: 3.44k]
  ------------------
 3059|  2.21M|                    {
 3060|  2.21M|                        u1_top_rt_ctb_avail = 0;
 3061|  2.21M|                    }
 3062|  2.21M|                }
 3063|  3.18M|                else if((1 == ps_codec->s_parse.i4_ctb_slice_y) && (0 == ps_codec->s_parse.i4_ctb_slice_x))
  ------------------
  |  Branch (3063:25): [True: 62.3k, False: 3.12M]
  |  Branch (3063:68): [True: 89, False: 62.2k]
  ------------------
 3064|     89|                {
 3065|     89|                    u1_top_lt_ctb_avail = 0;
 3066|     89|                }
 3067|  5.40M|            }
 3068|       |
 3069|  5.49M|            if(((ps_sps->i2_pic_wd_in_ctb - 1) == ps_codec->s_parse.i4_ctb_x) || ((ps_tile->u2_wd - 1) == ps_codec->s_parse.i4_ctb_tile_x))
  ------------------
  |  Branch (3069:16): [True: 85.0k, False: 5.41M]
  |  Branch (3069:82): [True: 6.18k, False: 5.40M]
  ------------------
 3070|  91.2k|            {
 3071|  91.2k|                u1_top_rt_ctb_avail = 0;
 3072|  91.2k|            }
 3073|       |
 3074|  5.49M|            if(PSLICE == ps_slice_hdr->i1_slice_type
  ------------------
  |  Branch (3074:16): [True: 2.14k, False: 5.49M]
  ------------------
 3075|  5.49M|                            || BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (3075:32): [True: 198k, False: 5.29M]
  ------------------
 3076|   201k|            {
 3077|   201k|                mv_ctxt_t s_mv_ctxt;
 3078|   201k|                process_ctxt_t *ps_proc;
 3079|   201k|                UWORD32 *pu4_ctb_top_pu_idx;
 3080|   201k|                UWORD32 *pu4_ctb_left_pu_idx;
 3081|   201k|                UWORD32 *pu4_ctb_top_left_pu_idx;
 3082|   201k|                WORD32 i4_ctb_pu_cnt;
 3083|   201k|                WORD32 cur_ctb_idx;
 3084|   201k|                WORD32 next_ctb_idx;
 3085|   201k|                WORD32 cur_pu_idx;
 3086|   201k|                ps_proc = &ps_codec->as_process[(ps_codec->i4_num_cores == 1) ? 1 : (ps_codec->i4_num_cores - 1)];
  ------------------
  |  Branch (3086:49): [True: 170k, False: 30.1k]
  ------------------
 3087|   201k|                cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
 3088|   201k|                                + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 3089|   201k|                next_ctb_idx = ps_codec->s_parse.i4_next_pu_ctb_cnt;
 3090|   201k|                i4_ctb_pu_cnt = ps_codec->s_parse.pu4_pic_pu_idx[next_ctb_idx]
 3091|   201k|                                - ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
 3092|       |
 3093|   201k|                cur_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
 3094|       |
 3095|   201k|                pu4_ctb_top_pu_idx = ps_proc->pu4_pic_pu_idx_top
 3096|   201k|                                + (ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   201k|#define MIN_PU_SIZE         4
  ------------------
 3097|   201k|                pu4_ctb_left_pu_idx = ps_proc->pu4_pic_pu_idx_left;
 3098|   201k|                pu4_ctb_top_left_pu_idx = &ps_proc->u4_ctb_top_left_pu_idx;
 3099|       |
 3100|       |                /* Initializing s_mv_ctxt */
 3101|   201k|                {
 3102|   201k|                    s_mv_ctxt.ps_pps = ps_pps;
 3103|   201k|                    s_mv_ctxt.ps_sps = ps_sps;
 3104|   201k|                    s_mv_ctxt.ps_slice_hdr = ps_slice_hdr;
 3105|   201k|                    s_mv_ctxt.i4_ctb_x = ps_codec->s_parse.i4_ctb_x;
 3106|   201k|                    s_mv_ctxt.i4_ctb_y = ps_codec->s_parse.i4_ctb_y;
 3107|   201k|                    s_mv_ctxt.ps_pu = &ps_codec->s_parse.ps_pic_pu[cur_pu_idx];
 3108|   201k|                    s_mv_ctxt.ps_pic_pu = ps_codec->s_parse.ps_pic_pu;
 3109|   201k|                    s_mv_ctxt.ps_tile = ps_tile;
 3110|   201k|                    s_mv_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
 3111|   201k|                    s_mv_ctxt.pu4_pic_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx;
 3112|   201k|                    s_mv_ctxt.pu1_pic_pu_map = ps_codec->s_parse.pu1_pic_pu_map;
 3113|   201k|                    s_mv_ctxt.i4_ctb_pu_cnt = i4_ctb_pu_cnt;
 3114|   201k|                    s_mv_ctxt.i4_ctb_start_pu_idx = cur_pu_idx;
 3115|   201k|                    s_mv_ctxt.u1_top_ctb_avail = u1_top_ctb_avail;
 3116|   201k|                    s_mv_ctxt.u1_top_rt_ctb_avail = u1_top_rt_ctb_avail;
 3117|   201k|                    s_mv_ctxt.u1_top_lt_ctb_avail = u1_top_lt_ctb_avail;
 3118|   201k|                    s_mv_ctxt.u1_left_ctb_avail = u1_left_ctb_avail;
 3119|   201k|                }
 3120|       |
 3121|   201k|                ihevcd_get_mv_ctb(&s_mv_ctxt, pu4_ctb_top_pu_idx,
 3122|   201k|                                  pu4_ctb_left_pu_idx, pu4_ctb_top_left_pu_idx);
 3123|       |
 3124|   201k|            }
 3125|  5.29M|            else
 3126|  5.29M|            {
 3127|  5.29M|                WORD32 num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|  5.29M|#define MIN_PU_SIZE         4
  ------------------
                              WORD32 num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|  5.29M|#define MIN_PU_SIZE         4
  ------------------
 3128|  5.29M|                UWORD8 *pu1_pic_pu_map_ctb = ps_codec->s_parse.pu1_pic_pu_map +
 3129|  5.29M|                                (ps_codec->s_parse.i4_ctb_x + ps_codec->s_parse.i4_ctb_y * ps_sps->i2_pic_wd_in_ctb) * num_minpu_in_ctb;
 3130|  5.29M|                process_ctxt_t *ps_proc = &ps_codec->as_process[(ps_codec->i4_num_cores == 1) ? 1 : (ps_codec->i4_num_cores - 1)];
  ------------------
  |  Branch (3130:65): [True: 4.77M, False: 520k]
  ------------------
 3131|  5.29M|                WORD32 row, col;
 3132|  5.29M|                WORD32 pu_cnt;
 3133|  5.29M|                WORD32 num_pu_per_ctb;
 3134|  5.29M|                WORD32 cur_ctb_idx;
 3135|  5.29M|                WORD32 next_ctb_idx;
 3136|  5.29M|                WORD32 ctb_start_pu_idx;
 3137|  5.29M|                UWORD32 *pu4_nbr_pu_idx = ps_proc->pu4_pic_pu_idx_map;
 3138|  5.29M|                WORD32 nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  341|  5.29M|#define MAX_CTB_SIZE        64
  ------------------
                              WORD32 nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  357|  5.29M|#define MIN_PU_SIZE         4
  ------------------
 3139|  5.29M|                pu_t *ps_pu;
 3140|  5.29M|                WORD32 ctb_size_in_min_pu = (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|  5.29M|#define MIN_PU_SIZE         4
  ------------------
 3141|       |
 3142|       |                /* Neighbor PU idx update inside CTB */
 3143|       |                /* 1byte per 4x4. Indicates the PU idx that 4x4 block belongs to */
 3144|       |
 3145|  5.29M|                cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
 3146|  5.29M|                                + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 3147|  5.29M|                next_ctb_idx = ps_codec->s_parse.i4_next_pu_ctb_cnt;
 3148|  5.29M|                num_pu_per_ctb = ps_codec->s_parse.pu4_pic_pu_idx[next_ctb_idx]
 3149|  5.29M|                                - ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
 3150|  5.29M|                ctb_start_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
 3151|  5.29M|                ps_pu = &ps_codec->s_parse.ps_pic_pu[ctb_start_pu_idx];
 3152|       |
 3153|  51.5M|                for(pu_cnt = 0; pu_cnt < num_pu_per_ctb; pu_cnt++, ps_pu++)
  ------------------
  |  Branch (3153:33): [True: 46.2M, False: 5.29M]
  ------------------
 3154|  46.2M|                {
 3155|  46.2M|                    UWORD32 cur_pu_idx;
 3156|  46.2M|                    WORD32 pu_ht = (ps_pu->b4_ht + 1) << 2;
 3157|  46.2M|                    WORD32 pu_wd = (ps_pu->b4_wd + 1) << 2;
 3158|       |
 3159|  46.2M|                    cur_pu_idx = ctb_start_pu_idx + pu_cnt;
 3160|       |
 3161|   141M|                    for(row = 0; row < pu_ht / MIN_PU_SIZE; row++)
  ------------------
  |  |  357|   141M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (3161:34): [True: 94.9M, False: 46.2M]
  ------------------
 3162|   305M|                        for(col = 0; col < pu_wd / MIN_PU_SIZE; col++)
  ------------------
  |  |  357|   305M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (3162:38): [True: 210M, False: 94.9M]
  ------------------
 3163|   210M|                            pu4_nbr_pu_idx[(1 + ps_pu->b4_pos_x + col)
 3164|   210M|                                            + (1 + ps_pu->b4_pos_y + row)
 3165|   210M|                                            * nbr_pu_idx_strd] =
 3166|   210M|                                            cur_pu_idx;
 3167|  46.2M|                }
 3168|       |
 3169|       |                /* Updating Top and Left pointers */
 3170|  5.29M|                {
 3171|  5.29M|                    WORD32 rows_remaining = ps_sps->i2_pic_height_in_luma_samples
 3172|  5.29M|                                    - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size);
 3173|  5.29M|                    WORD32 ctb_size_left = MIN(ctb_size, rows_remaining);
  ------------------
  |  |   43|  5.29M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 5.20M, False: 88.5k]
  |  |  ------------------
  ------------------
 3174|       |
 3175|       |                    /* Top Left */
 3176|       |                    /* saving top left before updating top ptr, as updating top ptr will overwrite the top left for the next ctb */
 3177|  5.29M|                    ps_proc->u4_ctb_top_left_pu_idx = ps_proc->pu4_pic_pu_idx_top[(ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE) + ctb_size / MIN_PU_SIZE - 1];
  ------------------
  |  |  357|  5.29M|#define MIN_PU_SIZE         4
  ------------------
                                  ps_proc->u4_ctb_top_left_pu_idx = ps_proc->pu4_pic_pu_idx_top[(ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE) + ctb_size / MIN_PU_SIZE - 1];
  ------------------
  |  |  357|  5.29M|#define MIN_PU_SIZE         4
  ------------------
 3178|  33.3M|                    for(i = 0; i < ctb_size / MIN_PU_SIZE; i++)
  ------------------
  |  |  357|  33.3M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (3178:32): [True: 28.0M, False: 5.29M]
  ------------------
 3179|  28.0M|                    {
 3180|       |                        /* Left */
 3181|       |                        /* Last column of au4_nbr_pu_idx */
 3182|  28.0M|                        ps_proc->pu4_pic_pu_idx_left[i] = pu4_nbr_pu_idx[(ctb_size / MIN_PU_SIZE)
  ------------------
  |  |  357|  28.0M|#define MIN_PU_SIZE         4
  ------------------
 3183|  28.0M|                                        + (i + 1) * nbr_pu_idx_strd];
 3184|       |                        /* Top */
 3185|       |                        /* Last row of au4_nbr_pu_idx */
 3186|  28.0M|                        ps_proc->pu4_pic_pu_idx_top[(ps_codec->s_parse.i4_ctb_x * ctb_size / MIN_PU_SIZE) + i] =
  ------------------
  |  |  357|  28.0M|#define MIN_PU_SIZE         4
  ------------------
 3187|  28.0M|                                        pu4_nbr_pu_idx[(ctb_size_left / MIN_PU_SIZE) * nbr_pu_idx_strd + i + 1];
  ------------------
  |  |  357|  28.0M|#define MIN_PU_SIZE         4
  ------------------
 3188|       |
 3189|  28.0M|                    }
 3190|  5.29M|                }
 3191|       |
 3192|       |                /* Updating the CTB level PU idx (Used for collocated MV pred)*/
 3193|  5.29M|                {
 3194|  5.29M|                    WORD32 ctb_row, ctb_col, index_pic_map, index_nbr_map;
 3195|  5.29M|                    WORD32 first_pu_of_ctb;
 3196|  5.29M|                    first_pu_of_ctb = pu4_nbr_pu_idx[1 + nbr_pu_idx_strd];
 3197|  5.29M|                    UWORD32 cur_ctb_ht_in_min_pu = MIN(((ps_sps->i2_pic_height_in_luma_samples
  ------------------
  |  |   43|  5.29M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 82.7k, False: 5.21M]
  |  |  ------------------
  ------------------
 3198|  5.29M|                            - (ps_codec->s_parse.i4_ctb_y << ps_sps->i1_log2_ctb_size)) / MIN_PU_SIZE), ctb_size_in_min_pu);
 3199|  5.29M|                    UWORD32 cur_ctb_wd_in_min_pu = MIN(((ps_sps->i2_pic_width_in_luma_samples
  ------------------
  |  |   43|  5.29M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 46.9k, False: 5.24M]
  |  |  ------------------
  ------------------
 3200|  5.29M|                                - (ps_codec->s_parse.i4_ctb_x << ps_sps->i1_log2_ctb_size)) / MIN_PU_SIZE), ctb_size_in_min_pu);
 3201|       |
 3202|  5.29M|                    index_pic_map = 0 * ctb_size_in_min_pu + 0;
 3203|  5.29M|                    index_nbr_map = (0 + 1) * nbr_pu_idx_strd + (0 + 1);
 3204|       |
 3205|  32.8M|                    for(ctb_row = 0; ctb_row < cur_ctb_ht_in_min_pu; ctb_row++)
  ------------------
  |  Branch (3205:38): [True: 27.5M, False: 5.29M]
  ------------------
 3206|  27.5M|                    {
 3207|   237M|                        for(ctb_col = 0; ctb_col < cur_ctb_wd_in_min_pu; ctb_col++)
  ------------------
  |  Branch (3207:42): [True: 210M, False: 27.5M]
  ------------------
 3208|   210M|                        {
 3209|   210M|                            pu1_pic_pu_map_ctb[index_pic_map + ctb_col] = pu4_nbr_pu_idx[index_nbr_map + ctb_col]
 3210|   210M|                                            - first_pu_of_ctb;
 3211|   210M|                        }
 3212|  27.5M|                        index_pic_map += ctb_size_in_min_pu;
 3213|  27.5M|                        index_nbr_map += nbr_pu_idx_strd;
 3214|  27.5M|                    }
 3215|  5.29M|                }
 3216|  5.29M|            }
 3217|       |
 3218|       |            /*************************************************/
 3219|       |            /******************  BS, QP  *********************/
 3220|       |            /*************************************************/
 3221|       |            /* Check if deblock is disabled for the current slice or if it is disabled for the current picture
 3222|       |             * because of disable deblock api
 3223|       |             */
 3224|  5.49M|            if(0 == ps_codec->i4_disable_deblk_pic)
  ------------------
  |  Branch (3224:16): [True: 5.49M, False: 0]
  ------------------
 3225|  5.49M|            {
 3226|       |                /* Boundary strength calculation is done irrespective of whether deblocking is disabled
 3227|       |                 * in the slice or not, to handle deblocking slice boundaries */
 3228|  5.49M|                if((0 == ps_codec->i4_slice_error))
  ------------------
  |  Branch (3228:20): [True: 139k, False: 5.35M]
  ------------------
 3229|   139k|                {
 3230|   139k|                    WORD32 i4_ctb_tu_cnt;
 3231|   139k|                    WORD32 cur_ctb_idx, next_ctb_idx;
 3232|   139k|                    WORD32 cur_pu_idx;
 3233|   139k|                    WORD32 cur_tu_idx;
 3234|   139k|                    process_ctxt_t *ps_proc;
 3235|       |
 3236|   139k|                    ps_proc = &ps_codec->as_process[(ps_codec->i4_num_cores == 1) ? 1 : (ps_codec->i4_num_cores - 1)];
  ------------------
  |  Branch (3236:53): [True: 10.9k, False: 128k]
  ------------------
 3237|   139k|                    cur_ctb_idx = ps_codec->s_parse.i4_ctb_x
 3238|   139k|                                    + ps_codec->s_parse.i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 3239|       |
 3240|   139k|                    cur_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx[cur_ctb_idx];
 3241|   139k|                    next_ctb_idx = ps_codec->s_parse.i4_next_tu_ctb_cnt;
 3242|   139k|                    if(1 == ps_codec->i4_num_cores)
  ------------------
  |  Branch (3242:24): [True: 10.9k, False: 128k]
  ------------------
 3243|  10.9k|                    {
 3244|  10.9k|                        i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
 3245|  10.9k|                                        ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|  10.9k|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  10.9k|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  10.9k|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  10.9k|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  10.9k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  10.9k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3246|       |
 3247|  10.9k|                        cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|  10.9k|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  10.9k|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  10.9k|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  10.9k|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  10.9k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  10.9k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3248|  10.9k|                    }
 3249|   128k|                    else
 3250|   128k|                    {
 3251|   128k|                        i4_ctb_tu_cnt = ps_codec->s_parse.pu4_pic_tu_idx[next_ctb_idx] -
 3252|   128k|                                        ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
 3253|       |
 3254|   128k|                        cur_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx[cur_ctb_idx];
 3255|   128k|                    }
 3256|       |
 3257|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_pps = ps_codec->s_parse.ps_pps;
 3258|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_sps = ps_codec->s_parse.ps_sps;
 3259|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_codec = ps_codec;
 3260|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_tu_cnt = i4_ctb_tu_cnt;
 3261|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_x = ps_codec->s_parse.i4_ctb_x;
 3262|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_y = ps_codec->s_parse.i4_ctb_y;
 3263|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_tile_x = ps_codec->s_parse.i4_ctb_tile_x;
 3264|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_tile_y = ps_codec->s_parse.i4_ctb_tile_y;
 3265|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_slice_x = ps_codec->s_parse.i4_ctb_slice_x;
 3266|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_ctb_slice_y = ps_codec->s_parse.i4_ctb_slice_y;
 3267|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_tu = &ps_codec->s_parse.ps_pic_tu[cur_tu_idx];
 3268|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_pu = &ps_codec->s_parse.ps_pic_pu[cur_pu_idx];
 3269|   139k|                    ps_codec->s_parse.s_bs_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
 3270|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_next_pu_ctb_cnt = ps_codec->s_parse.i4_next_pu_ctb_cnt;
 3271|   139k|                    ps_codec->s_parse.s_bs_ctxt.i4_next_tu_ctb_cnt = ps_codec->s_parse.i4_next_tu_ctb_cnt;
 3272|   139k|                    ps_codec->s_parse.s_bs_ctxt.pu1_slice_idx = ps_codec->s_parse.pu1_slice_idx;
 3273|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
 3274|   139k|                    ps_codec->s_parse.s_bs_ctxt.ps_tile = ps_codec->s_parse.ps_tile;
 3275|       |
 3276|   139k|                    if(ISLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (3276:24): [True: 117k, False: 21.4k]
  ------------------
 3277|   117k|                    {
 3278|   117k|                        ihevcd_ctb_boundary_strength_islice(&ps_codec->s_parse.s_bs_ctxt);
 3279|   117k|                    }
 3280|  21.4k|                    else
 3281|  21.4k|                    {
 3282|  21.4k|                        ihevcd_ctb_boundary_strength_pbslice(&ps_codec->s_parse.s_bs_ctxt);
 3283|  21.4k|                    }
 3284|   139k|                }
 3285|       |
 3286|       |                /* Boundary strength is set to zero if deblocking is disabled for the current slice */
 3287|  5.49M|                if(0 != ps_slice_hdr->i1_slice_disable_deblocking_filter_flag)
  ------------------
  |  Branch (3287:20): [True: 126k, False: 5.36M]
  ------------------
 3288|   126k|                {
 3289|   126k|                    WORD32 bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) * (ctb_size * ctb_size / 8 / 16);
 3290|       |
 3291|   126k|                    UWORD32 *pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_codec->s_parse.s_bs_ctxt.pu4_pic_vert_bs +
 3292|   126k|                                    ps_codec->s_parse.i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
 3293|   126k|                                    ps_codec->s_parse.i4_ctb_y * bs_strd);
 3294|   126k|                    UWORD32 *pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_codec->s_parse.s_bs_ctxt.pu4_pic_horz_bs +
 3295|   126k|                                    ps_codec->s_parse.i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
 3296|   126k|                                    ps_codec->s_parse.i4_ctb_y * bs_strd);
 3297|       |
 3298|   126k|                    memset(pu4_vert_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
 3299|   126k|                    memset(pu4_horz_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
 3300|   126k|                }
 3301|  5.49M|            }
 3302|       |
 3303|  5.49M|        }
 3304|       |
 3305|  6.24M|        DATA_SYNC();
  ------------------
  |  |  100|  6.24M|#define DATA_SYNC()  __sync_synchronize()
  ------------------
 3306|       |
 3307|       |        /* Update the parse status map */
 3308|  6.24M|        {
 3309|  6.24M|            sps_t *ps_sps = ps_codec->s_parse.ps_sps;
 3310|  6.24M|            UWORD8 *pu1_buf;
 3311|  6.24M|            WORD32 idx;
 3312|  6.24M|            idx = (ps_codec->s_parse.i4_ctb_x);
 3313|  6.24M|            idx += ((ps_codec->s_parse.i4_ctb_y) * ps_sps->i2_pic_wd_in_ctb);
 3314|  6.24M|            pu1_buf = (ps_codec->pu1_parse_map + idx);
 3315|  6.24M|            *pu1_buf = 1;
 3316|  6.24M|        }
 3317|       |
 3318|       |        /* Increment CTB x and y positions */
 3319|  6.24M|        ps_codec->s_parse.i4_ctb_tile_x++;
 3320|  6.24M|        ps_codec->s_parse.i4_ctb_x++;
 3321|  6.24M|        ps_codec->s_parse.i4_ctb_slice_x++;
 3322|       |
 3323|       |        /*If tiles are enabled, handle the slice counters differently*/
 3324|  6.24M|        if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (3324:12): [True: 2.71M, False: 3.53M]
  ------------------
 3325|  2.71M|        {
 3326|       |            //Indicates multiple tiles in a slice case
 3327|  2.71M|            tile_start_ctb_idx = ps_tile->u1_pos_x
 3328|  2.71M|                            + ps_tile->u1_pos_y * (ps_sps->i2_pic_wd_in_ctb);
 3329|       |
 3330|  2.71M|            slice_start_ctb_idx =  ps_slice_hdr->i2_ctb_x
 3331|  2.71M|                            + ps_slice_hdr->i2_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
 3332|       |
 3333|  2.71M|            if((slice_start_ctb_idx < tile_start_ctb_idx))
  ------------------
  |  Branch (3333:16): [True: 470k, False: 2.24M]
  ------------------
 3334|   470k|            {
 3335|   470k|                if(ps_codec->s_parse.i4_ctb_slice_x == (ps_tile->u1_pos_x + ps_tile->u2_wd))
  ------------------
  |  Branch (3335:20): [True: 12.8k, False: 457k]
  ------------------
 3336|  12.8k|                {
 3337|       |                    /* Reached end of slice row within a tile /frame */
 3338|  12.8k|                    ps_codec->s_parse.i4_ctb_slice_y++;
 3339|  12.8k|                    ps_codec->s_parse.i4_ctb_slice_x = ps_tile->u1_pos_x; //todo:Check
 3340|  12.8k|                }
 3341|   470k|            }
 3342|       |            //Indicates multiple slices in a tile case - hence, reset slice_x
 3343|  2.24M|            else if(ps_codec->s_parse.i4_ctb_slice_x == (ps_tile->u2_wd))
  ------------------
  |  Branch (3343:21): [True: 4.41k, False: 2.23M]
  ------------------
 3344|  4.41k|            {
 3345|  4.41k|                ps_codec->s_parse.i4_ctb_slice_y++;
 3346|  4.41k|                ps_codec->s_parse.i4_ctb_slice_x = 0;
 3347|  4.41k|            }
 3348|  2.71M|        }
 3349|  3.53M|        else
 3350|  3.53M|        {
 3351|  3.53M|            if(ps_codec->s_parse.i4_ctb_slice_x == ps_tile->u2_wd)
  ------------------
  |  Branch (3351:16): [True: 90.1k, False: 3.44M]
  ------------------
 3352|  90.1k|            {
 3353|       |                /* Reached end of slice row within a tile /frame */
 3354|  90.1k|                ps_codec->s_parse.i4_ctb_slice_y++;
 3355|  90.1k|                ps_codec->s_parse.i4_ctb_slice_x = 0;
 3356|  90.1k|            }
 3357|  3.53M|        }
 3358|       |
 3359|       |
 3360|  6.24M|        if(ps_codec->s_parse.i4_ctb_tile_x == (ps_tile->u2_wd))
  ------------------
  |  Branch (3360:12): [True: 134k, False: 6.11M]
  ------------------
 3361|   134k|        {
 3362|       |            /* Reached end of tile row */
 3363|   134k|            ps_codec->s_parse.i4_ctb_tile_x = 0;
 3364|   134k|            ps_codec->s_parse.i4_ctb_x = ps_tile->u1_pos_x;
 3365|       |
 3366|   134k|            ps_codec->s_parse.i4_ctb_tile_y++;
 3367|   134k|            ps_codec->s_parse.i4_ctb_y++;
 3368|       |
 3369|   134k|            if(ps_codec->s_parse.i4_ctb_tile_y == (ps_tile->u2_ht))
  ------------------
  |  Branch (3369:16): [True: 8.45k, False: 126k]
  ------------------
 3370|  8.45k|            {
 3371|       |                /* Reached End of Tile */
 3372|  8.45k|                ps_codec->s_parse.i4_ctb_tile_y = 0;
 3373|  8.45k|                ps_codec->s_parse.i4_ctb_tile_x = 0;
 3374|  8.45k|                ps_codec->s_parse.ps_tile++;
 3375|       |
 3376|  8.45k|                if((ps_tile->u2_ht + ps_tile->u1_pos_y  ==  ps_sps->i2_pic_ht_in_ctb) && (ps_tile->u2_wd + ps_tile->u1_pos_x  ==  ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (3376:20): [True: 5.89k, False: 2.56k]
  |  Branch (3376:90): [True: 5.35k, False: 536]
  ------------------
 3377|  5.35k|                {
 3378|       |                    /* Reached end of frame */
 3379|  5.35k|                    end_of_pic = 1;
 3380|  5.35k|                    ps_codec->s_parse.i4_ctb_x = 0;
 3381|  5.35k|                    ps_codec->s_parse.i4_ctb_y = ps_sps->i2_pic_ht_in_ctb;
 3382|  5.35k|                }
 3383|  3.10k|                else
 3384|  3.10k|                {
 3385|       |                    /* Initialize ctb_x and ctb_y to start of next tile */
 3386|  3.10k|                    ps_tile = ps_codec->s_parse.ps_tile;
 3387|  3.10k|                    ps_codec->s_parse.i4_ctb_x = ps_tile->u1_pos_x;
 3388|  3.10k|                    ps_codec->s_parse.i4_ctb_y = ps_tile->u1_pos_y;
 3389|  3.10k|                    ps_codec->s_parse.i4_ctb_tile_y = 0;
 3390|  3.10k|                    ps_codec->s_parse.i4_ctb_tile_x = 0;
 3391|  3.10k|                    ps_codec->s_parse.i4_ctb_slice_x = ps_tile->u1_pos_x;
 3392|  3.10k|                    ps_codec->s_parse.i4_ctb_slice_y = ps_tile->u1_pos_y;
 3393|       |
 3394|  3.10k|                }
 3395|  8.45k|            }
 3396|       |
 3397|   134k|        }
 3398|       |
 3399|  6.24M|        ps_codec->s_parse.i4_next_ctb_indx = ps_codec->s_parse.i4_ctb_x +
 3400|  6.24M|                        ps_codec->s_parse.i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
 3401|       |
 3402|       |        /* If the current slice is in error, check if the next slice's address
 3403|       |         * is reached and mark the end_of_slice flag */
 3404|  6.24M|        if(ps_codec->i4_slice_error)
  ------------------
  |  Branch (3404:12): [True: 5.86M, False: 380k]
  ------------------
 3405|  5.86M|        {
 3406|  5.86M|            slice_header_t *ps_slice_hdr_next = ps_slice_hdr + 1;
 3407|  5.86M|            WORD32 next_slice_addr = ps_slice_hdr_next->i2_ctb_x +
 3408|  5.86M|                            ps_slice_hdr_next->i2_ctb_y * ps_sps->i2_pic_wd_in_ctb;
 3409|       |
 3410|  5.86M|            if(ps_codec->s_parse.i4_next_ctb_indx == next_slice_addr)
  ------------------
  |  Branch (3410:16): [True: 4.27k, False: 5.86M]
  ------------------
 3411|  4.27k|                end_of_slice_flag = 1;
 3412|  5.86M|        }
 3413|       |
 3414|       |        /* If the codec is running in single core mode
 3415|       |         * then call process function for current CTB
 3416|       |         */
 3417|  6.24M|        if((1 == ps_codec->i4_num_cores) && (ps_codec->s_parse.i4_ctb_tile_x == 0))
  ------------------
  |  Branch (3417:12): [True: 4.94M, False: 1.30M]
  |  Branch (3417:45): [True: 73.1k, False: 4.87M]
  ------------------
 3418|  73.1k|        {
 3419|  73.1k|            process_ctxt_t *ps_proc = &ps_codec->as_process[0];
 3420|       |//          ps_proc->i4_ctb_cnt = ihevcd_nctb_cnt(ps_codec, ps_sps);
 3421|  73.1k|            ps_proc->i4_ctb_cnt = ps_proc->ps_tile->u2_wd;
 3422|  73.1k|            ihevcd_process(ps_proc);
 3423|  73.1k|        }
 3424|       |
 3425|       |        /* If the bytes for the current slice are exhausted
 3426|       |         * set end_of_slice flag to 1
 3427|       |         * This slice will be treated as incomplete */
 3428|  6.24M|        if((UWORD8 *)ps_codec->s_parse.s_bitstrm.pu1_buf_max + BITSTRM_OFF_THRS <
  ------------------
  |  |   83|  6.24M|#define BITSTRM_OFF_THRS 8
  ------------------
  |  Branch (3428:12): [True: 648k, False: 5.59M]
  ------------------
 3429|  6.24M|                                        ((UWORD8 *)ps_codec->s_parse.s_bitstrm.pu4_buf + (ps_codec->s_parse.s_bitstrm.u4_bit_ofst / 8)))
 3430|   648k|        {
 3431|       |            // end_of_slice_flag = ps_codec->i4_slice_error ? 0 : 1;
 3432|       |
 3433|   648k|            if(0 == ps_codec->i4_slice_error)
  ------------------
  |  Branch (3433:16): [True: 4.18k, False: 644k]
  ------------------
 3434|  4.18k|                end_of_slice_flag = 1;
 3435|   648k|        }
 3436|       |
 3437|       |
 3438|  6.24M|        if(end_of_pic)
  ------------------
  |  Branch (3438:12): [True: 5.35k, False: 6.24M]
  ------------------
 3439|  5.35k|            break;
 3440|  6.24M|    } while(!end_of_slice_flag);
  ------------------
  |  Branch (3440:13): [True: 6.23M, False: 5.43k]
  ------------------
 3441|       |
 3442|       |    /* Reset slice error */
 3443|  10.7k|    ps_codec->i4_slice_error = 0;
 3444|       |
 3445|       |    /* Increment the slice index for parsing next slice */
 3446|  10.7k|    if(0 == end_of_pic)
  ------------------
  |  Branch (3446:8): [True: 5.43k, False: 5.35k]
  ------------------
 3447|  5.43k|    {
 3448|  5.43k|        while(1)
  ------------------
  |  Branch (3448:15): [Folded - Ignored]
  ------------------
 3449|  5.43k|        {
 3450|       |
 3451|  5.43k|            WORD32 parse_slice_idx;
 3452|  5.43k|            parse_slice_idx = ps_codec->s_parse.i4_cur_slice_idx;
 3453|  5.43k|            parse_slice_idx++;
 3454|       |
 3455|  5.43k|            {
 3456|       |                /* If the next slice header is not initialized, update cur_slice_idx and break */
 3457|  5.43k|                if((1 == ps_codec->i4_num_cores) || (0 != (parse_slice_idx & (MAX_SLICE_HDR_CNT - 1))))
  ------------------
  |  |  153|  3.74k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  3.74k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  |  Branch (3457:20): [True: 1.69k, False: 3.74k]
  |  Branch (3457:53): [True: 3.74k, False: 0]
  ------------------
 3458|  5.43k|                {
 3459|  5.43k|                    ps_codec->s_parse.i4_cur_slice_idx = parse_slice_idx;
 3460|  5.43k|                    break;
 3461|  5.43k|                }
 3462|       |
 3463|       |                /* If the next slice header is initialised, wait for the parsed slices to be processed */
 3464|      0|                else
 3465|      0|                {
 3466|      0|                    WORD32 ctb_indx = 0;
 3467|       |
 3468|      0|                    while(ctb_indx != ps_sps->i4_pic_size_in_ctb)
  ------------------
  |  Branch (3468:27): [True: 0, False: 0]
  ------------------
 3469|      0|                    {
 3470|      0|                        WORD32 parse_status = *(ps_codec->pu1_parse_map + ctb_indx);
 3471|      0|                        volatile WORD32 proc_status = *(ps_codec->pu1_proc_map + ctb_indx) & 1;
 3472|       |
 3473|      0|                        if(parse_status == proc_status)
  ------------------
  |  Branch (3473:28): [True: 0, False: 0]
  ------------------
 3474|      0|                            ctb_indx++;
 3475|      0|                    }
 3476|      0|                    ps_codec->s_parse.i4_cur_slice_idx = parse_slice_idx;
 3477|      0|                    break;
 3478|      0|                }
 3479|       |
 3480|  5.43k|            }
 3481|  5.43k|        }
 3482|       |
 3483|  5.43k|    }
 3484|  5.35k|    else
 3485|  5.35k|    {
 3486|       |#if FRAME_ILF_PAD
 3487|       |        if(FRAME_ILF_PAD && 1 == ps_codec->i4_num_cores)
 3488|       |        {
 3489|       |            if(ps_slice_hdr->i4_abs_pic_order_cnt == 0)
 3490|       |            {
 3491|       |                DUMP_PRE_ILF(ps_codec->as_process[0].pu1_cur_pic_luma,
 3492|       |                             ps_codec->as_process[0].pu1_cur_pic_chroma,
 3493|       |                             ps_sps->i2_pic_width_in_luma_samples,
 3494|       |                             ps_sps->i2_pic_height_in_luma_samples,
 3495|       |                             ps_codec->i4_strd);
 3496|       |
 3497|       |                DUMP_BS(ps_codec->as_process[0].s_bs_ctxt.pu4_pic_vert_bs,
 3498|       |                        ps_codec->as_process[0].s_bs_ctxt.pu4_pic_horz_bs,
 3499|       |                        ps_sps->i2_pic_wd_in_ctb * (ctb_size * ctb_size / 8 / 16) * ps_sps->i2_pic_ht_in_ctb,
 3500|       |                        (ps_sps->i2_pic_wd_in_ctb + 1) * (ctb_size * ctb_size / 8 / 16) * ps_sps->i2_pic_ht_in_ctb);
 3501|       |
 3502|       |                DUMP_QP(ps_codec->as_process[0].s_bs_ctxt.pu1_pic_qp,
 3503|       |                        (ps_sps->i2_pic_height_in_luma_samples * ps_sps->i2_pic_width_in_luma_samples) / (MIN_CU_SIZE * MIN_CU_SIZE));
 3504|       |
 3505|       |                DUMP_QP_CONST_IN_CTB(ps_codec->as_process[0].s_bs_ctxt.pu1_pic_qp_const_in_ctb,
 3506|       |                                     (ps_sps->i2_pic_height_in_luma_samples * ps_sps->i2_pic_width_in_luma_samples) / (MIN_CTB_SIZE * MIN_CTB_SIZE) / 8);
 3507|       |
 3508|       |                DUMP_NO_LOOP_FILTER(ps_codec->as_process[0].pu1_pic_no_loop_filter_flag,
 3509|       |                                    (ps_sps->i2_pic_width_in_luma_samples / MIN_CU_SIZE) * (ps_sps->i2_pic_height_in_luma_samples / MIN_CU_SIZE) / 8);
 3510|       |
 3511|       |                DUMP_OFFSETS(ps_slice_hdr->i1_beta_offset_div2,
 3512|       |                             ps_slice_hdr->i1_tc_offset_div2,
 3513|       |                             ps_pps->i1_pic_cb_qp_offset,
 3514|       |                             ps_pps->i1_pic_cr_qp_offset);
 3515|       |            }
 3516|       |            ps_codec->s_parse.s_deblk_ctxt.ps_pps = ps_codec->s_parse.ps_pps;
 3517|       |            ps_codec->s_parse.s_deblk_ctxt.ps_sps = ps_codec->s_parse.ps_sps;
 3518|       |            ps_codec->s_parse.s_deblk_ctxt.ps_codec = ps_codec;
 3519|       |            ps_codec->s_parse.s_deblk_ctxt.ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
 3520|       |            ps_codec->s_parse.s_deblk_ctxt.is_chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
 3521|       |
 3522|       |            ps_codec->s_parse.s_sao_ctxt.ps_pps = ps_codec->s_parse.ps_pps;
 3523|       |            ps_codec->s_parse.s_sao_ctxt.ps_sps = ps_codec->s_parse.ps_sps;
 3524|       |            ps_codec->s_parse.s_sao_ctxt.ps_codec = ps_codec;
 3525|       |            ps_codec->s_parse.s_sao_ctxt.ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
 3526|       |
 3527|       |            ihevcd_ilf_pad_frame(&ps_codec->s_parse.s_deblk_ctxt, &ps_codec->s_parse.s_sao_ctxt);
 3528|       |
 3529|       |        }
 3530|       |#endif
 3531|  5.35k|        ps_codec->s_parse.i4_end_of_frame = 1;
 3532|  5.35k|    }
 3533|  10.7k|    return ret;
 3534|  10.7k|}

ihevcd_ref_pic_list_modification:
  143|    782|{
  144|    782|    WORD32 ret = IHEVCD_SUCCESS;
  145|    782|    WORD32 value;
  146|    782|    WORD32 i;
  147|    782|    rplm_t *ps_rplm;
  148|    782|    WORD32 num_bits_list_entry;
  149|       |
  150|    782|    ps_rplm = &(ps_slice_hdr->s_rplm);
  151|       |
  152|       |    /* Calculate Ceil(Log2(num_poc_total_curr)) */
  153|    782|    {
  154|    782|        num_bits_list_entry = 32 - CLZ(num_poc_total_curr);
  155|       |        /* Check if num_poc_total_curr is power of 2 */
  156|    782|        if(0 == (num_poc_total_curr & (num_poc_total_curr - 1)))
  ------------------
  |  Branch (156:12): [True: 139, False: 643]
  ------------------
  157|    139|        {
  158|    139|            num_bits_list_entry--;
  159|    139|        }
  160|    782|    }
  161|       |
  162|    782|    if(ps_slice_hdr->i1_slice_type  == PSLICE || ps_slice_hdr->i1_slice_type  == BSLICE)
  ------------------
  |  Branch (162:8): [True: 9, False: 773]
  |  Branch (162:50): [True: 773, False: 0]
  ------------------
  163|    782|    {
  164|    782|        BITS_PARSE("ref_pic_list_modification_flag_l0", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    782|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  165|    782|        ps_rplm->i1_ref_pic_list_modification_flag_l0 = value;
  166|       |
  167|    782|        if(ps_rplm->i1_ref_pic_list_modification_flag_l0)
  ------------------
  |  Branch (167:12): [True: 418, False: 364]
  ------------------
  168|  1.71k|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l0_active; i++)
  ------------------
  |  Branch (168:24): [True: 1.29k, False: 418]
  ------------------
  169|  1.29k|            {
  170|  1.29k|                BITS_PARSE("list_entry_l0", value, ps_bitstrm, num_bits_list_entry);
  ------------------
  |  |  148|  1.29k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  171|  1.29k|                ps_rplm->i1_list_entry_l0[i] = value;
  172|       |
  173|  1.29k|                ps_rplm->i1_list_entry_l0[i] = CLIP3(ps_rplm->i1_list_entry_l0[i], 0, num_poc_total_curr - 1);
  ------------------
  |  |   40|  1.29k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 596, False: 698]
  |  |  |  Branch (40:53): [True: 0, False: 698]
  |  |  ------------------
  ------------------
  174|  1.29k|            }
  175|    782|    }
  176|       |
  177|    782|    if(ps_slice_hdr->i1_slice_type  == BSLICE)
  ------------------
  |  Branch (177:8): [True: 773, False: 9]
  ------------------
  178|    773|    {
  179|    773|        BITS_PARSE("ref_pic_list_modification_flag_l1", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    773|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  180|    773|        ps_rplm->i1_ref_pic_list_modification_flag_l1 = value;
  181|       |
  182|    773|        if(ps_rplm->i1_ref_pic_list_modification_flag_l1)
  ------------------
  |  Branch (182:12): [True: 358, False: 415]
  ------------------
  183|  1.55k|            for(i = 0; i < ps_slice_hdr->i1_num_ref_idx_l1_active; i++)
  ------------------
  |  Branch (183:24): [True: 1.19k, False: 358]
  ------------------
  184|  1.19k|            {
  185|  1.19k|                BITS_PARSE("list_entry_l1", value, ps_bitstrm, num_bits_list_entry);
  ------------------
  |  |  148|  1.19k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  186|  1.19k|                ps_rplm->i1_list_entry_l1[i] = value;
  187|       |
  188|  1.19k|                ps_rplm->i1_list_entry_l1[i] = CLIP3(ps_rplm->i1_list_entry_l1[i], 0, num_poc_total_curr - 1);
  ------------------
  |  |   40|  1.19k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  ------------------
  |  |  |  Branch (40:29): [True: 672, False: 521]
  |  |  |  Branch (40:53): [True: 0, False: 521]
  |  |  ------------------
  ------------------
  189|  1.19k|            }
  190|       |
  191|    773|    }
  192|       |
  193|    782|    return ret;
  194|    782|}
ihevcd_parse_slice_header:
  219|  23.9k|{
  220|  23.9k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  221|  23.9k|    UWORD32 value;
  222|  23.9k|    WORD32 i4_value;
  223|  23.9k|    WORD32 i, j;
  224|  23.9k|    WORD32 sps_id;
  225|       |
  226|  23.9k|    pps_t *ps_pps;
  227|  23.9k|    sps_t *ps_sps;
  228|  23.9k|    slice_header_t *ps_slice_hdr;
  229|  23.9k|    WORD32 disable_deblocking_filter_flag;
  230|  23.9k|    bitstrm_t *ps_bitstrm = &ps_codec->s_parse.s_bitstrm;
  231|  23.9k|    WORD32 idr_pic_flag;
  232|  23.9k|    WORD32 pps_id;
  233|  23.9k|    WORD32 first_slice_in_pic_flag;
  234|  23.9k|    WORD32 no_output_of_prior_pics_flag = 0;
  235|  23.9k|    WORD8 i1_nal_unit_type = ps_nal->i1_nal_unit_type;
  236|  23.9k|    WORD32 num_poc_total_curr = 0;
  237|  23.9k|    UWORD32 slice_address;
  238|  23.9k|    WORD32 prev_slice_incomplete_flag = 0;
  239|       |
  240|  23.9k|    if(ps_codec->i4_slice_error == 1)
  ------------------
  |  Branch (240:8): [True: 2.51k, False: 21.4k]
  ------------------
  241|  2.51k|        return ret;
  242|       |
  243|  21.4k|    idr_pic_flag = (NAL_IDR_W_LP == i1_nal_unit_type) ||
  ------------------
  |  Branch (243:20): [True: 1.78k, False: 19.6k]
  ------------------
  244|  21.4k|                    (NAL_IDR_N_LP == i1_nal_unit_type);
  ------------------
  |  Branch (244:21): [True: 4.47k, False: 15.1k]
  ------------------
  245|       |
  246|       |
  247|  21.4k|    BITS_PARSE("first_slice_in_pic_flag", first_slice_in_pic_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|  21.4k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  248|  21.4k|    if((NAL_BLA_W_LP <= i1_nal_unit_type) &&
  ------------------
  |  Branch (248:8): [True: 9.28k, False: 12.1k]
  ------------------
  249|  21.4k|       (NAL_RSV_RAP_VCL23          >= i1_nal_unit_type))
  ------------------
  |  Branch (249:8): [True: 9.28k, False: 0]
  ------------------
  250|  9.28k|    {
  251|  9.28k|        BITS_PARSE("no_output_of_prior_pics_flag", no_output_of_prior_pics_flag, ps_bitstrm, 1);
  ------------------
  |  |  148|  9.28k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  252|  9.28k|    }
  253|  21.4k|    UEV_PARSE("pic_parameter_set_id", pps_id, ps_bitstrm);
  ------------------
  |  |  155|  21.4k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  254|  21.4k|    if(pps_id < 0 || pps_id > MAX_PPS_CNT - 2)
  ------------------
  |  |  334|  20.9k|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  |  Branch (254:8): [True: 507, False: 20.9k]
  |  Branch (254:22): [True: 2.81k, False: 18.1k]
  ------------------
  255|  3.32k|    {
  256|  3.32k|        return IHEVCD_INVALID_PARAMETER;
  257|  3.32k|    }
  258|       |
  259|       |    /* Get the current PPS structure */
  260|  18.1k|    ps_pps = ps_codec->s_parse.ps_pps_base + pps_id;
  261|  18.1k|    if(0 == ps_pps->i1_pps_valid)
  ------------------
  |  Branch (261:8): [True: 1.15k, False: 16.9k]
  ------------------
  262|  1.15k|    {
  263|  1.15k|        pps_t *ps_pps_ref = ps_codec->ps_pps_base;
  264|  1.62k|        while(0 == ps_pps_ref->i1_pps_valid)
  ------------------
  |  Branch (264:15): [True: 473, False: 1.15k]
  ------------------
  265|    473|        {
  266|    473|            ps_pps_ref++;
  267|    473|            if((ps_pps_ref - ps_codec->ps_pps_base >= MAX_PPS_CNT - 1))
  ------------------
  |  |  334|    473|#define MAX_PPS_CNT         (64 + 1)
  ------------------
  |  Branch (267:16): [True: 0, False: 473]
  ------------------
  268|      0|                return IHEVCD_INVALID_HEADER;
  269|    473|        }
  270|       |
  271|  1.15k|        ihevcd_copy_pps(ps_codec, pps_id, ps_pps_ref->i1_pps_id);
  272|  1.15k|    }
  273|       |
  274|       |    /* Get SPS id for the current PPS */
  275|  18.1k|    sps_id = ps_pps->i1_sps_id;
  276|       |
  277|       |    /* Get the current SPS structure */
  278|  18.1k|    ps_sps = ps_codec->s_parse.ps_sps_base + sps_id;
  279|       |
  280|       |    /* When the current slice is the first in a pic,
  281|       |     *  check whether the previous frame is complete
  282|       |     *  If the previous frame is incomplete -
  283|       |     *  treat the remaining CTBs as skip */
  284|  18.1k|    if((0 != ps_codec->u4_pic_cnt || ps_codec->i4_pic_present) &&
  ------------------
  |  Branch (284:9): [True: 14.2k, False: 3.83k]
  |  Branch (284:38): [True: 434, False: 3.39k]
  ------------------
  285|  18.1k|                    first_slice_in_pic_flag)
  ------------------
  |  Branch (285:21): [True: 9.03k, False: 5.69k]
  ------------------
  286|  9.03k|    {
  287|  9.03k|        if(ps_codec->i4_pic_present)
  ------------------
  |  Branch (287:12): [True: 759, False: 8.27k]
  ------------------
  288|    759|        {
  289|    759|            slice_header_t *ps_slice_hdr_next;
  290|    759|            ps_codec->i4_slice_error = 1;
  291|    759|            ps_codec->s_parse.i4_cur_slice_idx--;
  292|    759|            if(ps_codec->s_parse.i4_cur_slice_idx < 0)
  ------------------
  |  Branch (292:16): [True: 0, False: 759]
  ------------------
  293|      0|                ps_codec->s_parse.i4_cur_slice_idx = 0;
  294|       |
  295|    759|            ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + ((ps_codec->s_parse.i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|    759|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    759|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  296|    759|            ps_slice_hdr_next->i2_ctb_x = 0;
  297|    759|            ps_slice_hdr_next->i2_ctb_y = ps_codec->s_parse.ps_sps->i2_pic_ht_in_ctb;
  298|    759|            return ret;
  299|    759|        }
  300|  8.27k|        else
  301|  8.27k|        {
  302|  8.27k|            ps_codec->i4_slice_error = 0;
  303|  8.27k|        }
  304|  9.03k|    }
  305|       |
  306|  17.3k|    if(first_slice_in_pic_flag)
  ------------------
  |  Branch (306:8): [True: 9.73k, False: 7.64k]
  ------------------
  307|  9.73k|    {
  308|  9.73k|        ps_codec->s_parse.i4_cur_slice_idx = 0;
  309|  9.73k|    }
  310|  7.64k|    else
  311|  7.64k|    {
  312|       |        /* If the current slice is not the first slice in the pic,
  313|       |         * but the first one to be parsed, set the current slice indx to 1
  314|       |         * Treat the first slice to be missing and copy the current slice header
  315|       |         * to the first one */
  316|  7.64k|        if(0 == ps_codec->i4_pic_present)
  ------------------
  |  Branch (316:12): [True: 5.44k, False: 2.20k]
  ------------------
  317|  5.44k|            ps_codec->s_parse.i4_cur_slice_idx = 1;
  318|  7.64k|    }
  319|       |
  320|  17.3k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr_base + (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  17.3k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  17.3k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  321|  17.3k|    memset(ps_slice_hdr, 0, sizeof(*ps_slice_hdr));
  322|       |
  323|  17.3k|    if((ps_pps->i1_dependent_slice_enabled_flag) &&
  ------------------
  |  Branch (323:8): [True: 11.2k, False: 6.07k]
  ------------------
  324|  17.3k|       (!first_slice_in_pic_flag))
  ------------------
  |  Branch (324:8): [True: 5.36k, False: 5.93k]
  ------------------
  325|  5.36k|    {
  326|  5.36k|        BITS_PARSE("dependent_slice_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  5.36k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  327|       |
  328|       |        /* First slice to be decoded in the current picture can't be dependent slice */
  329|  5.36k|        if (value && 0 == ps_codec->i4_pic_present)
  ------------------
  |  Branch (329:13): [True: 4.32k, False: 1.04k]
  |  Branch (329:22): [True: 2.76k, False: 1.55k]
  ------------------
  330|  2.76k|        {
  331|  2.76k|             return IHEVCD_IGNORE_SLICE;
  332|  2.76k|        }
  333|       |
  334|       |        /* If dependendent slice, copy slice header from previous slice */
  335|  2.59k|        if(value && (ps_codec->s_parse.i4_cur_slice_idx > 0))
  ------------------
  |  Branch (335:12): [True: 1.55k, False: 1.04k]
  |  Branch (335:21): [True: 1.55k, False: 0]
  ------------------
  336|  1.55k|        {
  337|  1.55k|            ihevcd_copy_slice_hdr(ps_codec,
  338|  1.55k|                                  (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1)),
  ------------------
  |  |  153|  1.55k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  1.55k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  339|  1.55k|                                  ((ps_codec->s_parse.i4_cur_slice_idx - 1) & (MAX_SLICE_HDR_CNT - 1)));
  ------------------
  |  |  153|  1.55k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  1.55k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  340|  1.55k|        }
  341|  2.59k|        ps_slice_hdr->i1_dependent_slice_flag = value;
  342|  2.59k|    }
  343|  12.0k|    else
  344|  12.0k|    {
  345|  12.0k|        ps_slice_hdr->i1_dependent_slice_flag = 0;
  346|  12.0k|    }
  347|  14.6k|    ps_slice_hdr->i1_nal_unit_type = i1_nal_unit_type;
  348|  14.6k|    ps_slice_hdr->i1_pps_id = pps_id;
  349|  14.6k|    ps_slice_hdr->i1_first_slice_in_pic_flag = first_slice_in_pic_flag;
  350|       |
  351|  14.6k|    ps_slice_hdr->i1_no_output_of_prior_pics_flag = 1;
  352|  14.6k|    if((NAL_BLA_W_LP <= i1_nal_unit_type) &&
  ------------------
  |  Branch (352:8): [True: 8.28k, False: 6.32k]
  ------------------
  353|  14.6k|                    (NAL_RSV_RAP_VCL23          >= i1_nal_unit_type))
  ------------------
  |  Branch (353:21): [True: 8.28k, False: 0]
  ------------------
  354|  8.28k|    {
  355|  8.28k|        ps_slice_hdr->i1_no_output_of_prior_pics_flag = no_output_of_prior_pics_flag;
  356|  8.28k|    }
  357|  14.6k|    ps_slice_hdr->i1_pps_id = pps_id;
  358|       |
  359|  14.6k|    if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (359:8): [True: 4.87k, False: 9.73k]
  ------------------
  360|  4.87k|    {
  361|  4.87k|        WORD32 num_bits;
  362|       |
  363|       |        /* Use CLZ to compute Ceil( Log2( PicSizeInCtbsY ) ) */
  364|  4.87k|        num_bits = 32 - CLZ(ps_sps->i4_pic_size_in_ctb - 1);
  365|  4.87k|        BITS_PARSE("slice_address", value, ps_bitstrm, num_bits);
  ------------------
  |  |  148|  4.87k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  366|       |
  367|  4.87k|        slice_address = value;
  368|       |        /* If slice address is greater than the number of CTBs in a picture,
  369|       |         * ignore the slice */
  370|  4.87k|        if(value >= ps_sps->i4_pic_size_in_ctb || value == 0)
  ------------------
  |  Branch (370:12): [True: 237, False: 4.64k]
  |  Branch (370:51): [True: 472, False: 4.16k]
  ------------------
  371|    709|            return IHEVCD_IGNORE_SLICE;
  372|  4.87k|    }
  373|  9.73k|    else
  374|  9.73k|    {
  375|  9.73k|        slice_address = 0;
  376|  9.73k|    }
  377|       |
  378|  13.8k|    if(!ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (378:8): [True: 12.4k, False: 1.44k]
  ------------------
  379|  12.4k|    {
  380|  12.4k|        ps_slice_hdr->i1_pic_output_flag = 1;
  381|  12.4k|        ps_slice_hdr->i4_pic_order_cnt_lsb = 0;
  382|  12.4k|        ps_slice_hdr->i1_num_long_term_sps = 0;
  383|  12.4k|        ps_slice_hdr->i1_num_long_term_pics = 0;
  384|       |
  385|  43.0k|        for(i = 0; i < ps_pps->i1_num_extra_slice_header_bits; i++)
  ------------------
  |  Branch (385:20): [True: 30.5k, False: 12.4k]
  ------------------
  386|  30.5k|        {
  387|  30.5k|            BITS_PARSE("slice_reserved_undetermined_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  30.5k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  388|       |            //slice_reserved_undetermined_flag[ i ]
  389|  30.5k|        }
  390|  12.4k|        UEV_PARSE("slice_type", value, ps_bitstrm);
  ------------------
  |  |  155|  12.4k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  391|  12.4k|        if(value > 2)
  ------------------
  |  Branch (391:12): [True: 994, False: 11.4k]
  ------------------
  392|    994|        {
  393|    994|            return IHEVCD_INVALID_PARAMETER;
  394|    994|        }
  395|  11.4k|        ps_slice_hdr->i1_slice_type = value;
  396|       |
  397|       |        /* If the picture is IRAP, slice type must be equal to ISLICE */
  398|  11.4k|        if((ps_slice_hdr->i1_nal_unit_type >= NAL_BLA_W_LP) &&
  ------------------
  |  Branch (398:12): [True: 6.95k, False: 4.50k]
  ------------------
  399|  11.4k|                        (ps_slice_hdr->i1_nal_unit_type <= NAL_RSV_RAP_VCL23))
  ------------------
  |  Branch (399:25): [True: 6.95k, False: 0]
  ------------------
  400|  6.95k|            ps_slice_hdr->i1_slice_type = ISLICE;
  401|       |
  402|  11.4k|        if((ps_slice_hdr->i1_slice_type < 0) ||
  ------------------
  |  Branch (402:12): [True: 0, False: 11.4k]
  ------------------
  403|  11.4k|                        (ps_slice_hdr->i1_slice_type > 2))
  ------------------
  |  Branch (403:25): [True: 0, False: 11.4k]
  ------------------
  404|      0|            return IHEVCD_IGNORE_SLICE;
  405|       |
  406|  11.4k|        if(ps_pps->i1_output_flag_present_flag)
  ------------------
  |  Branch (406:12): [True: 4.49k, False: 6.96k]
  ------------------
  407|  4.49k|        {
  408|  4.49k|            BITS_PARSE("pic_output_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.49k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  409|  4.49k|            ps_slice_hdr->i1_pic_output_flag = value;
  410|  4.49k|        }
  411|  11.4k|        ps_slice_hdr->i1_colour_plane_id = 0;
  412|  11.4k|        if(1 == ps_sps->i1_separate_colour_plane_flag)
  ------------------
  |  Branch (412:12): [True: 0, False: 11.4k]
  ------------------
  413|      0|        {
  414|      0|            BITS_PARSE("colour_plane_id", value, ps_bitstrm, 2);
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  415|      0|            ps_slice_hdr->i1_colour_plane_id = value;
  416|      0|        }
  417|  11.4k|        ps_slice_hdr->i1_slice_temporal_mvp_enable_flag = 0;
  418|       |
  419|  11.4k|        if(!idr_pic_flag)
  ------------------
  |  Branch (419:12): [True: 6.19k, False: 5.26k]
  ------------------
  420|  6.19k|        {
  421|       |
  422|  6.19k|            WORD32 st_rps_idx;
  423|  6.19k|            WORD32 num_neg_pics;
  424|  6.19k|            WORD32 num_pos_pics;
  425|  6.19k|            WORD8 *pi1_used;
  426|       |
  427|  6.19k|            BITS_PARSE("pic_order_cnt_lsb", value, ps_bitstrm, ps_sps->i1_log2_max_pic_order_cnt_lsb);
  ------------------
  |  |  148|  6.19k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  428|       |            //value = ihevcd_extend_sign_bit(value, ps_sps->i1_log2_max_pic_order_cnt_lsb);
  429|  6.19k|            ps_slice_hdr->i4_pic_order_cnt_lsb = value;
  430|       |
  431|  6.19k|            BITS_PARSE("short_term_ref_pic_set_sps_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  6.19k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  432|  6.19k|            ps_slice_hdr->i1_short_term_ref_pic_set_sps_flag = value;
  433|       |
  434|  6.19k|            if(1 == ps_slice_hdr->i1_short_term_ref_pic_set_sps_flag)
  ------------------
  |  Branch (434:16): [True: 4.20k, False: 1.98k]
  ------------------
  435|  4.20k|            {
  436|  4.20k|                WORD32 numbits;
  437|       |
  438|  4.20k|                ps_slice_hdr->i1_short_term_ref_pic_set_idx = 0;
  439|  4.20k|                if(ps_sps->i1_num_short_term_ref_pic_sets > 1)
  ------------------
  |  Branch (439:20): [True: 1.90k, False: 2.30k]
  ------------------
  440|  1.90k|                {
  441|  1.90k|                    numbits = 32 - CLZ(ps_sps->i1_num_short_term_ref_pic_sets - 1);
  442|  1.90k|                    BITS_PARSE("short_term_ref_pic_set_idx", value, ps_bitstrm, numbits);
  ------------------
  |  |  148|  1.90k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  443|  1.90k|                    if (value >= ps_sps->i1_num_short_term_ref_pic_sets) {
  ------------------
  |  Branch (443:25): [True: 164, False: 1.73k]
  ------------------
  444|    164|                        return IHEVCD_INVALID_PARAMETER;
  445|    164|                    }
  446|  1.73k|                    ps_slice_hdr->i1_short_term_ref_pic_set_idx = value;
  447|  1.73k|                }
  448|       |
  449|  4.04k|                st_rps_idx = ps_slice_hdr->i1_short_term_ref_pic_set_idx;
  450|  4.04k|                num_neg_pics = ps_sps->as_stref_picset[st_rps_idx].i1_num_neg_pics;
  451|  4.04k|                num_pos_pics = ps_sps->as_stref_picset[st_rps_idx].i1_num_pos_pics;
  452|  4.04k|                pi1_used = ps_sps->as_stref_picset[st_rps_idx].ai1_used;
  453|  4.04k|            }
  454|  1.98k|            else
  455|  1.98k|            {
  456|  1.98k|                ret = ihevcd_short_term_ref_pic_set(ps_bitstrm,
  457|  1.98k|                                                    &ps_sps->as_stref_picset[0],
  458|  1.98k|                                                    ps_sps->i1_num_short_term_ref_pic_sets,
  459|  1.98k|                                                    ps_sps->i1_num_short_term_ref_pic_sets,
  460|  1.98k|                                                    &ps_slice_hdr->s_stref_picset);
  461|  1.98k|                if (ret != IHEVCD_SUCCESS)
  ------------------
  |  Branch (461:21): [True: 350, False: 1.63k]
  ------------------
  462|    350|                {
  463|    350|                    return ret;
  464|    350|                }
  465|  1.63k|                st_rps_idx = ps_sps->i1_num_short_term_ref_pic_sets;
  466|  1.63k|                num_neg_pics = ps_slice_hdr->s_stref_picset.i1_num_neg_pics;
  467|  1.63k|                num_pos_pics = ps_slice_hdr->s_stref_picset.i1_num_pos_pics;
  468|  1.63k|                pi1_used = ps_slice_hdr->s_stref_picset.ai1_used;
  469|  1.63k|            }
  470|       |
  471|  5.67k|            if(ps_sps->i1_long_term_ref_pics_present_flag)
  ------------------
  |  Branch (471:16): [True: 3.16k, False: 2.51k]
  ------------------
  472|  3.16k|            {
  473|  3.16k|                if(ps_sps->i1_num_long_term_ref_pics_sps > 0)
  ------------------
  |  Branch (473:20): [True: 44, False: 3.12k]
  ------------------
  474|     44|                {
  475|     44|                    UEV_PARSE("num_long_term_sps", value, ps_bitstrm);
  ------------------
  |  |  155|     44|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  476|     44|                    if(value > ps_sps->i1_num_long_term_ref_pics_sps)
  ------------------
  |  Branch (476:24): [True: 1, False: 43]
  ------------------
  477|      1|                    {
  478|      1|                        return IHEVCD_INVALID_PARAMETER;
  479|      1|                    }
  480|     43|                    ps_slice_hdr->i1_num_long_term_sps = value;
  481|     43|                }
  482|  3.16k|                UEV_PARSE("num_long_term_pics", value, ps_bitstrm);
  ------------------
  |  |  155|  3.16k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  483|  3.16k|                if(((ULWORD64)value + ps_slice_hdr->i1_num_long_term_sps + num_neg_pics +
  ------------------
  |  Branch (483:20): [True: 93, False: 3.07k]
  ------------------
  484|  3.16k|                    num_pos_pics) > (MAX_DPB_SIZE - 1))
  ------------------
  |  |  281|  3.16k|#define MAX_DPB_SIZE 16
  ------------------
  485|     93|                {
  486|     93|                    return IHEVCD_INVALID_PARAMETER;
  487|     93|                }
  488|  3.07k|                ps_slice_hdr->i1_num_long_term_pics = value;
  489|       |
  490|  10.7k|                for(i = 0; i < (ps_slice_hdr->i1_num_long_term_sps +
  ------------------
  |  Branch (490:28): [True: 7.64k, False: 3.07k]
  ------------------
  491|  10.7k|                                ps_slice_hdr->i1_num_long_term_pics); i++)
  492|  7.64k|                {
  493|  7.64k|                    if(i < ps_slice_hdr->i1_num_long_term_sps)
  ------------------
  |  Branch (493:24): [True: 0, False: 7.64k]
  ------------------
  494|      0|                    {
  495|       |                        /* Use CLZ to compute Ceil( Log2( num_long_term_ref_pics_sps ) ) */
  496|      0|                        if (ps_sps->i1_num_long_term_ref_pics_sps > 1)
  ------------------
  |  Branch (496:29): [True: 0, False: 0]
  ------------------
  497|      0|                        {
  498|      0|                            WORD32 num_bits = 32 - CLZ(ps_sps->i1_num_long_term_ref_pics_sps - 1);
  499|      0|                            BITS_PARSE("lt_idx_sps[ i ]", value, ps_bitstrm, num_bits);
  ------------------
  |  |  148|      0|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  500|      0|                            if(value >= ps_sps->i1_num_long_term_ref_pics_sps)
  ------------------
  |  Branch (500:32): [True: 0, False: 0]
  ------------------
  501|      0|                            {
  502|      0|                                return IHEVCD_INVALID_PARAMETER;
  503|      0|                            }
  504|      0|                        }
  505|      0|                        else
  506|      0|                        {
  507|      0|                            value = 0;
  508|      0|                        }
  509|      0|                        ps_slice_hdr->ai4_poc_lsb_lt[i] = ps_sps->au2_lt_ref_pic_poc_lsb_sps[value];
  510|      0|                        ps_slice_hdr->ai1_used_by_curr_pic_lt_flag[i] = ps_sps->ai1_used_by_curr_pic_lt_sps_flag[value];
  511|       |
  512|      0|                    }
  513|  7.64k|                    else
  514|  7.64k|                    {
  515|  7.64k|                        BITS_PARSE("poc_lsb_lt[ i ]", value, ps_bitstrm, ps_sps->i1_log2_max_pic_order_cnt_lsb);
  ------------------
  |  |  148|  7.64k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  516|  7.64k|                        ps_slice_hdr->ai4_poc_lsb_lt[i] = value;
  517|       |
  518|  7.64k|                        BITS_PARSE("used_by_curr_pic_lt_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  7.64k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  519|  7.64k|                        ps_slice_hdr->ai1_used_by_curr_pic_lt_flag[i] = value;
  520|       |
  521|  7.64k|                    }
  522|  7.64k|                    BITS_PARSE("delta_poc_msb_present_flag[ i ]", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  7.64k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  523|  7.64k|                    ps_slice_hdr->ai1_delta_poc_msb_present_flag[i] = value;
  524|       |
  525|       |
  526|  7.64k|                    ps_slice_hdr->ai1_delta_poc_msb_cycle_lt[i] = 0;
  527|  7.64k|                    if(ps_slice_hdr->ai1_delta_poc_msb_present_flag[i])
  ------------------
  |  Branch (527:24): [True: 1.75k, False: 5.88k]
  ------------------
  528|  1.75k|                    {
  529|       |
  530|  1.75k|                        UEV_PARSE("delata_poc_msb_cycle_lt[ i ]", value, ps_bitstrm);
  ------------------
  |  |  155|  1.75k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  531|  1.75k|                        ps_slice_hdr->ai1_delta_poc_msb_cycle_lt[i] = value;
  532|  1.75k|                    }
  533|       |
  534|  7.64k|                    if((i != 0) && (i != ps_slice_hdr->i1_num_long_term_sps))
  ------------------
  |  Branch (534:24): [True: 6.35k, False: 1.28k]
  |  Branch (534:36): [True: 6.35k, False: 0]
  ------------------
  535|  6.35k|                    {
  536|  6.35k|                        ps_slice_hdr->ai1_delta_poc_msb_cycle_lt[i] += ps_slice_hdr->ai1_delta_poc_msb_cycle_lt[i - 1];
  537|  6.35k|                    }
  538|       |
  539|  7.64k|                }
  540|  3.07k|            }
  541|       |
  542|  17.5k|            for(i = 0; i < num_neg_pics + num_pos_pics; i++)
  ------------------
  |  Branch (542:24): [True: 11.9k, False: 5.58k]
  ------------------
  543|  11.9k|            {
  544|  11.9k|                if(pi1_used[i])
  ------------------
  |  Branch (544:20): [True: 9.99k, False: 1.95k]
  ------------------
  545|  9.99k|                {
  546|  9.99k|                    num_poc_total_curr++;
  547|  9.99k|                }
  548|  11.9k|            }
  549|  13.2k|            for(i = 0; i < ps_slice_hdr->i1_num_long_term_sps + ps_slice_hdr->i1_num_long_term_pics; i++)
  ------------------
  |  Branch (549:24): [True: 7.64k, False: 5.58k]
  ------------------
  550|  7.64k|            {
  551|  7.64k|                if(ps_slice_hdr->ai1_used_by_curr_pic_lt_flag[i])
  ------------------
  |  Branch (551:20): [True: 2.43k, False: 5.21k]
  ------------------
  552|  2.43k|                {
  553|  2.43k|                    num_poc_total_curr++;
  554|  2.43k|                }
  555|  7.64k|            }
  556|       |
  557|       |
  558|  5.58k|            if(ps_sps->i1_sps_temporal_mvp_enable_flag)
  ------------------
  |  Branch (558:16): [True: 4.25k, False: 1.33k]
  ------------------
  559|  4.25k|            {
  560|  4.25k|                BITS_PARSE("enable_temporal_mvp_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  4.25k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  561|  4.25k|                ps_slice_hdr->i1_slice_temporal_mvp_enable_flag = value;
  562|  4.25k|            }
  563|       |
  564|  5.58k|        }
  565|  10.8k|        ps_slice_hdr->i1_slice_sao_luma_flag = 0;
  566|  10.8k|        ps_slice_hdr->i1_slice_sao_chroma_flag = 0;
  567|  10.8k|        if(ps_sps->i1_sample_adaptive_offset_enabled_flag)
  ------------------
  |  Branch (567:12): [True: 5.25k, False: 5.60k]
  ------------------
  568|  5.25k|        {
  569|  5.25k|            BITS_PARSE("slice_sao_luma_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  5.25k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  570|  5.25k|            ps_slice_hdr->i1_slice_sao_luma_flag = value;
  571|       |
  572|  5.25k|            BITS_PARSE("slice_sao_chroma_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  5.25k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  573|  5.25k|            ps_slice_hdr->i1_slice_sao_chroma_flag = value;
  574|       |
  575|  5.25k|        }
  576|       |
  577|  10.8k|        ps_slice_hdr->i1_max_num_merge_cand = 1;
  578|  10.8k|        ps_slice_hdr->i1_cabac_init_flag = 0;
  579|       |
  580|  10.8k|        ps_slice_hdr->i1_num_ref_idx_l0_active = 0;
  581|  10.8k|        ps_slice_hdr->i1_num_ref_idx_l1_active = 0;
  582|  10.8k|        ps_slice_hdr->i1_slice_cb_qp_offset = 0;
  583|  10.8k|        ps_slice_hdr->i1_slice_cr_qp_offset = 0;
  584|  10.8k|        if((PSLICE == ps_slice_hdr->i1_slice_type) ||
  ------------------
  |  Branch (584:12): [True: 164, False: 10.6k]
  ------------------
  585|  10.8k|           (BSLICE == ps_slice_hdr->i1_slice_type))
  ------------------
  |  Branch (585:12): [True: 3.80k, False: 6.88k]
  ------------------
  586|  3.96k|        {
  587|  3.96k|            BITS_PARSE("num_ref_idx_active_override_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  3.96k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  588|  3.96k|            ps_slice_hdr->i1_num_ref_idx_active_override_flag = value;
  589|       |
  590|  3.96k|            if(ps_slice_hdr->i1_num_ref_idx_active_override_flag)
  ------------------
  |  Branch (590:16): [True: 2.08k, False: 1.88k]
  ------------------
  591|  2.08k|            {
  592|  2.08k|                UEV_PARSE("num_ref_idx_l0_active_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  2.08k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  593|  2.08k|                if(value > MAX_DPB_SIZE - 2)
  ------------------
  |  |  281|  2.08k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (593:20): [True: 35, False: 2.05k]
  ------------------
  594|     35|                {
  595|     35|                    return IHEVCD_INVALID_PARAMETER;
  596|     35|                }
  597|  2.05k|                ps_slice_hdr->i1_num_ref_idx_l0_active = value + 1;
  598|       |
  599|  2.05k|                if(BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (599:20): [True: 1.94k, False: 103]
  ------------------
  600|  1.94k|                {
  601|  1.94k|                    UEV_PARSE("num_ref_idx_l1_active_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|  1.94k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  602|  1.94k|                    if(value > MAX_DPB_SIZE - 2)
  ------------------
  |  |  281|  1.94k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (602:24): [True: 32, False: 1.91k]
  ------------------
  603|     32|                    {
  604|     32|                        return IHEVCD_INVALID_PARAMETER;
  605|     32|                    }
  606|  1.91k|                    ps_slice_hdr->i1_num_ref_idx_l1_active = value + 1;
  607|  1.91k|                }
  608|       |
  609|  2.05k|            }
  610|  1.88k|            else
  611|  1.88k|            {
  612|  1.88k|                ps_slice_hdr->i1_num_ref_idx_l0_active = ps_pps->i1_num_ref_idx_l0_default_active;
  613|  1.88k|                if(BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (613:20): [True: 1.82k, False: 61]
  ------------------
  614|  1.82k|                {
  615|  1.82k|                    ps_slice_hdr->i1_num_ref_idx_l1_active = ps_pps->i1_num_ref_idx_l1_default_active;
  616|  1.82k|                }
  617|  1.88k|            }
  618|       |
  619|  3.90k|            if(0 == num_poc_total_curr)
  ------------------
  |  Branch (619:16): [True: 1.05k, False: 2.85k]
  ------------------
  620|  1.05k|                return IHEVCD_IGNORE_SLICE;
  621|  2.85k|            if((ps_pps->i1_lists_modification_present_flag) && (num_poc_total_curr > 1))
  ------------------
  |  Branch (621:16): [True: 1.25k, False: 1.59k]
  |  Branch (621:64): [True: 782, False: 474]
  ------------------
  622|    782|            {
  623|    782|                ihevcd_ref_pic_list_modification(ps_bitstrm,
  624|    782|                                                 ps_slice_hdr, num_poc_total_curr);
  625|    782|            }
  626|  2.06k|            else
  627|  2.06k|            {
  628|  2.06k|                ps_slice_hdr->s_rplm.i1_ref_pic_list_modification_flag_l0 = 0;
  629|  2.06k|                ps_slice_hdr->s_rplm.i1_ref_pic_list_modification_flag_l1 = 0;
  630|  2.06k|            }
  631|       |
  632|  2.85k|            if(BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (632:16): [True: 2.72k, False: 130]
  ------------------
  633|  2.72k|            {
  634|  2.72k|                BITS_PARSE("mvd_l1_zero_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  2.72k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  635|  2.72k|                ps_slice_hdr->i1_mvd_l1_zero_flag = value;
  636|  2.72k|            }
  637|       |
  638|  2.85k|            ps_slice_hdr->i1_cabac_init_flag = 0;
  639|  2.85k|            if(ps_pps->i1_cabac_init_present_flag)
  ------------------
  |  Branch (639:16): [True: 1.81k, False: 1.03k]
  ------------------
  640|  1.81k|            {
  641|  1.81k|                BITS_PARSE("cabac_init_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.81k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  642|  1.81k|                ps_slice_hdr->i1_cabac_init_flag = value;
  643|       |
  644|  1.81k|            }
  645|  2.85k|            ps_slice_hdr->i1_collocated_from_l0_flag = 1;
  646|  2.85k|            ps_slice_hdr->i1_collocated_ref_idx = 0;
  647|  2.85k|            if(ps_slice_hdr->i1_slice_temporal_mvp_enable_flag)
  ------------------
  |  Branch (647:16): [True: 1.63k, False: 1.21k]
  ------------------
  648|  1.63k|            {
  649|  1.63k|                if(BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (649:20): [True: 1.61k, False: 21]
  ------------------
  650|  1.61k|                {
  651|  1.61k|                    BITS_PARSE("collocated_from_l0_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  1.61k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  652|  1.61k|                    ps_slice_hdr->i1_collocated_from_l0_flag = value;
  653|  1.61k|                }
  654|       |
  655|  1.63k|                if((ps_slice_hdr->i1_collocated_from_l0_flag  &&  (ps_slice_hdr->i1_num_ref_idx_l0_active > 1)) ||
  ------------------
  |  Branch (655:21): [True: 888, False: 745]
  |  Branch (655:67): [True: 349, False: 539]
  ------------------
  656|  1.63k|                   (!ps_slice_hdr->i1_collocated_from_l0_flag  && (ps_slice_hdr->i1_num_ref_idx_l1_active > 1)))
  ------------------
  |  Branch (656:21): [True: 745, False: 539]
  |  Branch (656:67): [True: 508, False: 237]
  ------------------
  657|    857|                {
  658|    857|                    UEV_PARSE("collocated_ref_idx", value, ps_bitstrm);
  ------------------
  |  |  155|    857|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  659|    857|                    if((PSLICE == ps_slice_hdr->i1_slice_type || BSLICE == ps_slice_hdr->i1_slice_type) &&
  ------------------
  |  Branch (659:25): [True: 0, False: 857]
  |  Branch (659:66): [True: 857, False: 0]
  ------------------
  660|    857|                                    ps_slice_hdr->i1_collocated_from_l0_flag)
  ------------------
  |  Branch (660:37): [True: 349, False: 508]
  ------------------
  661|    349|                    {
  662|    349|                        if(value >= ps_slice_hdr->i1_num_ref_idx_l0_active)
  ------------------
  |  Branch (662:28): [True: 19, False: 330]
  ------------------
  663|     19|                        {
  664|     19|                            return IHEVCD_INVALID_PARAMETER;
  665|     19|                        }
  666|    349|                    }
  667|    838|                    if(BSLICE == ps_slice_hdr->i1_slice_type && !ps_slice_hdr->i1_collocated_from_l0_flag)
  ------------------
  |  Branch (667:24): [True: 838, False: 0]
  |  Branch (667:65): [True: 508, False: 330]
  ------------------
  668|    508|                    {
  669|    508|                        if(value >= ps_slice_hdr->i1_num_ref_idx_l1_active)
  ------------------
  |  Branch (669:28): [True: 14, False: 494]
  ------------------
  670|     14|                        {
  671|     14|                            return IHEVCD_INVALID_PARAMETER;
  672|     14|                        }
  673|    508|                    }
  674|    824|                    ps_slice_hdr->i1_collocated_ref_idx = value;
  675|    824|                }
  676|       |
  677|  1.63k|            }
  678|       |
  679|  2.81k|            if((ps_pps->i1_weighted_pred_flag  &&   (PSLICE == ps_slice_hdr->i1_slice_type)) ||
  ------------------
  |  Branch (679:17): [True: 1.36k, False: 1.45k]
  |  Branch (679:53): [True: 125, False: 1.23k]
  ------------------
  680|  2.81k|               (ps_pps->i1_weighted_bipred_flag  &&  (BSLICE == ps_slice_hdr->i1_slice_type)))
  ------------------
  |  Branch (680:17): [True: 1.06k, False: 1.62k]
  |  Branch (680:54): [True: 1.06k, False: 0]
  ------------------
  681|  1.18k|            {
  682|  1.18k|                ihevcd_parse_pred_wt_ofst(ps_bitstrm, ps_sps, ps_pps, ps_slice_hdr);
  683|  1.18k|            }
  684|  2.81k|            UEV_PARSE("five_minus_max_num_merge_cand", value, ps_bitstrm);
  ------------------
  |  |  155|  2.81k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  685|  2.81k|            if(value > 4)
  ------------------
  |  Branch (685:16): [True: 513, False: 2.30k]
  ------------------
  686|    513|            {
  687|    513|                return IHEVCD_INVALID_PARAMETER;
  688|    513|            }
  689|  2.30k|            ps_slice_hdr->i1_max_num_merge_cand = 5 - value;
  690|       |
  691|  2.30k|        }
  692|  9.18k|        SEV_PARSE("slice_qp_delta", i4_value, ps_bitstrm);
  ------------------
  |  |  162|  9.18k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  693|  9.18k|        if((i4_value < (MIN_HEVC_QP - ps_pps->i1_pic_init_qp)) ||
  ------------------
  |  |  461|  9.18k|#define MIN_HEVC_QP 0
  ------------------
  |  Branch (693:12): [True: 50, False: 9.13k]
  ------------------
  694|  9.18k|           (i4_value > (MAX_HEVC_QP - ps_pps->i1_pic_init_qp)))
  ------------------
  |  |  466|  9.13k|#define MAX_HEVC_QP 51  //FOR MAIN Branch Encoder
  ------------------
  |  Branch (694:12): [True: 97, False: 9.04k]
  ------------------
  695|    147|        {
  696|    147|            return IHEVCD_INVALID_PARAMETER;
  697|    147|        }
  698|  9.04k|        ps_slice_hdr->i1_slice_qp_delta = i4_value;
  699|       |
  700|  9.04k|        if(ps_pps->i1_pic_slice_level_chroma_qp_offsets_present_flag)
  ------------------
  |  Branch (700:12): [True: 4.46k, False: 4.57k]
  ------------------
  701|  4.46k|        {
  702|  4.46k|            SEV_PARSE("slice_cb_qp_offset", i4_value, ps_bitstrm);
  ------------------
  |  |  162|  4.46k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  703|  4.46k|            if(i4_value < -12 || i4_value > 12)
  ------------------
  |  Branch (703:16): [True: 2, False: 4.46k]
  |  Branch (703:34): [True: 22, False: 4.44k]
  ------------------
  704|     24|            {
  705|     24|                return IHEVCD_INVALID_PARAMETER;
  706|     24|            }
  707|  4.44k|            ps_slice_hdr->i1_slice_cb_qp_offset = i4_value;
  708|       |
  709|  4.44k|            SEV_PARSE("slice_cr_qp_offset", i4_value, ps_bitstrm);
  ------------------
  |  |  162|  4.44k|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  710|  4.44k|            if(i4_value < -12 || i4_value > 12)
  ------------------
  |  Branch (710:16): [True: 0, False: 4.44k]
  |  Branch (710:34): [True: 10, False: 4.43k]
  ------------------
  711|     10|            {
  712|     10|                return IHEVCD_INVALID_PARAMETER;
  713|     10|            }
  714|  4.43k|            ps_slice_hdr->i1_slice_cr_qp_offset = i4_value;
  715|       |
  716|  4.43k|        }
  717|  9.00k|        ps_slice_hdr->i1_deblocking_filter_override_flag = 0;
  718|  9.00k|        ps_slice_hdr->i1_slice_disable_deblocking_filter_flag  = ps_pps->i1_pic_disable_deblocking_filter_flag;
  719|  9.00k|        ps_slice_hdr->i1_beta_offset_div2 = ps_pps->i1_beta_offset_div2;
  720|  9.00k|        ps_slice_hdr->i1_tc_offset_div2 = ps_pps->i1_tc_offset_div2;
  721|       |
  722|  9.00k|        disable_deblocking_filter_flag = ps_pps->i1_pic_disable_deblocking_filter_flag;
  723|       |
  724|  9.00k|        if(ps_pps->i1_deblocking_filter_control_present_flag)
  ------------------
  |  Branch (724:12): [True: 1.38k, False: 7.62k]
  ------------------
  725|  1.38k|        {
  726|       |
  727|  1.38k|            if(ps_pps->i1_deblocking_filter_override_enabled_flag)
  ------------------
  |  Branch (727:16): [True: 336, False: 1.04k]
  ------------------
  728|    336|            {
  729|    336|                BITS_PARSE("deblocking_filter_override_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    336|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  730|    336|                ps_slice_hdr->i1_deblocking_filter_override_flag = value;
  731|    336|            }
  732|       |
  733|  1.38k|            if(ps_slice_hdr->i1_deblocking_filter_override_flag)
  ------------------
  |  Branch (733:16): [True: 264, False: 1.12k]
  ------------------
  734|    264|            {
  735|    264|                BITS_PARSE("slice_disable_deblocking_filter_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|    264|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  736|    264|                ps_slice_hdr->i1_slice_disable_deblocking_filter_flag = value;
  737|    264|                disable_deblocking_filter_flag = ps_slice_hdr->i1_slice_disable_deblocking_filter_flag;
  738|       |
  739|    264|                if(!ps_slice_hdr->i1_slice_disable_deblocking_filter_flag)
  ------------------
  |  Branch (739:20): [True: 141, False: 123]
  ------------------
  740|    141|                {
  741|    141|                    SEV_PARSE("beta_offset_div2", i4_value, ps_bitstrm);
  ------------------
  |  |  162|    141|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  742|    141|                    if(i4_value < -6 || i4_value > 6)
  ------------------
  |  Branch (742:24): [True: 5, False: 136]
  |  Branch (742:41): [True: 5, False: 131]
  ------------------
  743|     10|                    {
  744|     10|                        return IHEVCD_INVALID_PARAMETER;
  745|     10|                    }
  746|    131|                    ps_slice_hdr->i1_beta_offset_div2 = i4_value;
  747|       |
  748|    131|                    SEV_PARSE("tc_offset_div2", i4_value, ps_bitstrm);
  ------------------
  |  |  162|    131|    m_value = ihevcd_sev(m_ps_bitstrm);
  ------------------
  749|    131|                    if(i4_value < -6 || i4_value > 6)
  ------------------
  |  Branch (749:24): [True: 1, False: 130]
  |  Branch (749:41): [True: 0, False: 130]
  ------------------
  750|      1|                    {
  751|      1|                        return IHEVCD_INVALID_PARAMETER;
  752|      1|                    }
  753|    130|                    ps_slice_hdr->i1_tc_offset_div2 = i4_value;
  754|       |
  755|    130|                }
  756|    264|            }
  757|  1.38k|        }
  758|       |
  759|  8.99k|        ps_slice_hdr->i1_slice_loop_filter_across_slices_enabled_flag = ps_pps->i1_loop_filter_across_slices_enabled_flag;
  760|  8.99k|        if(ps_pps->i1_loop_filter_across_slices_enabled_flag  &&
  ------------------
  |  Branch (760:12): [True: 5.54k, False: 3.45k]
  ------------------
  761|  8.99k|                        (ps_slice_hdr->i1_slice_sao_luma_flag  ||  ps_slice_hdr->i1_slice_sao_chroma_flag  || !disable_deblocking_filter_flag))
  ------------------
  |  Branch (761:26): [True: 1.74k, False: 3.80k]
  |  Branch (761:68): [True: 356, False: 3.44k]
  |  Branch (761:111): [True: 3.09k, False: 351]
  ------------------
  762|  5.19k|        {
  763|  5.19k|            BITS_PARSE("slice_loop_filter_across_slices_enabled_flag", value, ps_bitstrm, 1);
  ------------------
  |  |  148|  5.19k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  764|  5.19k|            ps_slice_hdr->i1_slice_loop_filter_across_slices_enabled_flag = value;
  765|  5.19k|        }
  766|       |
  767|  8.99k|    }
  768|       |
  769|       |    /* Check sanity of slice */
  770|  10.4k|    if((!first_slice_in_pic_flag) &&
  ------------------
  |  Branch (770:8): [True: 3.29k, False: 7.14k]
  ------------------
  771|  10.4k|                    (ps_codec->i4_pic_present))
  ------------------
  |  Branch (771:21): [True: 1.89k, False: 1.39k]
  ------------------
  772|  1.89k|    {
  773|  1.89k|        slice_header_t *ps_slice_hdr_base = ps_codec->ps_slice_hdr_base;
  774|       |
  775|       |
  776|       |        /* According to the standard, the above conditions must be satisfied - But for error resilience,
  777|       |         * only the following conditions are checked */
  778|  1.89k|        if((ps_slice_hdr_base->i1_pps_id != ps_slice_hdr->i1_pps_id) ||
  ------------------
  |  Branch (778:12): [True: 29, False: 1.86k]
  ------------------
  779|  1.89k|                        (ps_slice_hdr_base->i4_pic_order_cnt_lsb != ps_slice_hdr->i4_pic_order_cnt_lsb))
  ------------------
  |  Branch (779:25): [True: 20, False: 1.84k]
  ------------------
  780|     49|        {
  781|     49|            return IHEVCD_IGNORE_SLICE;
  782|     49|        }
  783|       |
  784|  1.89k|    }
  785|       |
  786|       |
  787|  10.3k|    if(0 == ps_codec->i4_pic_present)
  ------------------
  |  Branch (787:8): [True: 8.54k, False: 1.84k]
  ------------------
  788|  8.54k|    {
  789|  8.54k|        ps_slice_hdr->i4_abs_pic_order_cnt = ihevcd_calc_poc(ps_codec, ps_nal, ps_sps->i1_log2_max_pic_order_cnt_lsb, ps_slice_hdr->i4_pic_order_cnt_lsb);
  790|  8.54k|    }
  791|  1.84k|    else
  792|  1.84k|    {
  793|  1.84k|        ps_slice_hdr->i4_abs_pic_order_cnt = ps_codec->s_parse.i4_abs_pic_order_cnt;
  794|  1.84k|    }
  795|       |
  796|       |
  797|  10.3k|    if(!first_slice_in_pic_flag)
  ------------------
  |  Branch (797:8): [True: 3.24k, False: 7.14k]
  ------------------
  798|  3.24k|    {
  799|       |        /* Check if the current slice belongs to the same pic (Pic being parsed) */
  800|  3.24k|        if(ps_codec->s_parse.i4_abs_pic_order_cnt == ps_slice_hdr->i4_abs_pic_order_cnt)
  ------------------
  |  Branch (800:12): [True: 2.41k, False: 832]
  ------------------
  801|  2.41k|        {
  802|       |
  803|       |            /* If the Next CTB's index is less than the slice address,
  804|       |             * the previous slice is incomplete.
  805|       |             * Indicate slice error, and treat the remaining CTBs as skip */
  806|  2.41k|            if(slice_address > ps_codec->s_parse.i4_next_ctb_indx)
  ------------------
  |  Branch (806:16): [True: 887, False: 1.52k]
  ------------------
  807|    887|            {
  808|    887|                if(ps_codec->i4_pic_present)
  ------------------
  |  Branch (808:20): [True: 608, False: 279]
  ------------------
  809|    608|                {
  810|    608|                    prev_slice_incomplete_flag = 1;
  811|    608|                }
  812|    279|                else
  813|    279|                {
  814|    279|                    return IHEVCD_IGNORE_SLICE;
  815|    279|                }
  816|    887|            }
  817|       |            /* If the slice address is less than the next CTB's index,
  818|       |             * extra CTBs have been decoded in the previous slice.
  819|       |             * Ignore the current slice. Treat it as incomplete */
  820|  1.52k|            else if(slice_address < ps_codec->s_parse.i4_next_ctb_indx)
  ------------------
  |  Branch (820:21): [True: 969, False: 554]
  ------------------
  821|    969|            {
  822|    969|                return IHEVCD_IGNORE_SLICE;
  823|    969|            }
  824|    554|            else
  825|    554|            {
  826|    554|                ps_codec->i4_slice_error = 0;
  827|    554|            }
  828|  2.41k|        }
  829|       |
  830|       |        /* The current slice does not belong to the pic that is being parsed */
  831|    832|        else
  832|    832|        {
  833|       |            /* The previous pic is incomplete.
  834|       |             * Treat the remaining CTBs as skip */
  835|    832|            if(ps_codec->i4_pic_present)
  ------------------
  |  Branch (835:16): [True: 0, False: 832]
  ------------------
  836|      0|            {
  837|      0|                slice_header_t *ps_slice_hdr_next;
  838|      0|                ps_codec->i4_slice_error = 1;
  839|      0|                ps_codec->s_parse.i4_cur_slice_idx--;
  840|      0|                if(ps_codec->s_parse.i4_cur_slice_idx < 0)
  ------------------
  |  Branch (840:20): [True: 0, False: 0]
  ------------------
  841|      0|                    ps_codec->s_parse.i4_cur_slice_idx = 0;
  842|       |
  843|      0|                ps_slice_hdr_next = ps_codec->s_parse.ps_slice_hdr_base + ((ps_codec->s_parse.i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|      0|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|      0|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  844|      0|                ps_slice_hdr_next->i2_ctb_x = 0;
  845|      0|                ps_slice_hdr_next->i2_ctb_y = ps_codec->s_parse.ps_sps->i2_pic_ht_in_ctb;
  846|      0|                return ret;
  847|      0|            }
  848|       |
  849|       |            /* If the previous pic is complete,
  850|       |             * return if the current slice is dependant
  851|       |             * otherwise, update the parse context's POC */
  852|    832|            else
  853|    832|            {
  854|    832|                if(ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (854:20): [True: 0, False: 832]
  ------------------
  855|      0|                    return IHEVCD_IGNORE_SLICE;
  856|       |
  857|    832|                ps_codec->s_parse.i4_abs_pic_order_cnt = ps_slice_hdr->i4_abs_pic_order_cnt;
  858|    832|            }
  859|    832|        }
  860|  3.24k|    }
  861|       |
  862|       |    /* If the slice is the first slice in the pic, update the parse context's POC */
  863|  7.14k|    else
  864|  7.14k|    {
  865|       |        /* If the first slice is repeated, ignore the second occurrence
  866|       |         * If any other slice is repeated, the CTB addr will be greater than the slice addr,
  867|       |         * and hence the second occurrence is ignored */
  868|  7.14k|        if(ps_codec->s_parse.i4_abs_pic_order_cnt == ps_slice_hdr->i4_abs_pic_order_cnt)
  ------------------
  |  Branch (868:12): [True: 1.84k, False: 5.30k]
  ------------------
  869|  1.84k|            return IHEVCD_IGNORE_SLICE;
  870|       |
  871|  5.30k|        ps_codec->s_parse.i4_abs_pic_order_cnt = ps_slice_hdr->i4_abs_pic_order_cnt;
  872|  5.30k|    }
  873|       |
  874|       |    // printf("POC: %d\n", ps_slice_hdr->i4_abs_pic_order_cnt);
  875|       |    // AEV_TRACE("POC", ps_slice_hdr->i4_abs_pic_order_cnt, 0);
  876|  7.30k|    ps_slice_hdr->i4_num_entry_point_offsets = 0;
  877|  7.30k|    if((ps_pps->i1_tiles_enabled_flag) ||
  ------------------
  |  Branch (877:8): [True: 1.74k, False: 5.55k]
  ------------------
  878|  7.30k|       (ps_pps->i1_entropy_coding_sync_enabled_flag))
  ------------------
  |  Branch (878:8): [True: 394, False: 5.16k]
  ------------------
  879|  2.13k|    {
  880|  2.13k|        UEV_PARSE("num_entry_point_offsets", value, ps_bitstrm);
  ------------------
  |  |  155|  2.13k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  881|  2.13k|        ps_slice_hdr->i4_num_entry_point_offsets = value;
  882|       |
  883|  2.13k|        {
  884|  2.13k|            WORD32 max_num_entry_point_offsets;
  885|  2.13k|            if((ps_pps->i1_tiles_enabled_flag) &&
  ------------------
  |  Branch (885:16): [True: 1.74k, False: 394]
  ------------------
  886|  2.13k|                            (ps_pps->i1_entropy_coding_sync_enabled_flag))
  ------------------
  |  Branch (886:29): [True: 1.09k, False: 649]
  ------------------
  887|  1.09k|            {
  888|  1.09k|                max_num_entry_point_offsets = ps_pps->i1_num_tile_columns * ps_sps->i2_pic_ht_in_ctb - 1;
  889|  1.09k|            }
  890|  1.04k|            else if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (890:21): [True: 649, False: 394]
  ------------------
  891|    649|            {
  892|    649|                max_num_entry_point_offsets = ps_pps->i1_num_tile_columns * ps_pps->i1_num_tile_rows - 1 ;
  893|    649|            }
  894|    394|            else
  895|    394|            {
  896|    394|                max_num_entry_point_offsets = (ps_sps->i2_pic_ht_in_ctb - 1);
  897|    394|            }
  898|       |
  899|  2.13k|            if(ps_slice_hdr->i4_num_entry_point_offsets < 0 || ps_slice_hdr->i4_num_entry_point_offsets > max_num_entry_point_offsets)
  ------------------
  |  Branch (899:16): [True: 1, False: 2.13k]
  |  Branch (899:64): [True: 182, False: 1.95k]
  ------------------
  900|    183|            {
  901|    183|                return IHEVCD_INVALID_PARAMETER;
  902|    183|            }
  903|  2.13k|        }
  904|       |
  905|  1.95k|        if(ps_slice_hdr->i4_num_entry_point_offsets > 0)
  ------------------
  |  Branch (905:12): [True: 456, False: 1.49k]
  ------------------
  906|    456|        {
  907|    456|            UEV_PARSE("offset_len_minus1", value, ps_bitstrm);
  ------------------
  |  |  155|    456|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  908|    456|            if(value > 31)
  ------------------
  |  Branch (908:16): [True: 38, False: 418]
  ------------------
  909|     38|            {
  910|     38|                return IHEVCD_INVALID_PARAMETER;
  911|     38|            }
  912|    418|            ps_slice_hdr->i1_offset_len = value + 1;
  913|       |
  914|  1.08k|            for(i = 0; i < ps_slice_hdr->i4_num_entry_point_offsets; i++)
  ------------------
  |  Branch (914:24): [True: 669, False: 418]
  ------------------
  915|    669|            {
  916|    669|                BITS_PARSE("entry_point_offset", value, ps_bitstrm, ps_slice_hdr->i1_offset_len);
  ------------------
  |  |  148|    669|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  917|       |
  918|       |                /* TODO: pu4_entry_point_offset needs to be initialized */
  919|       |                //ps_slice_hdr->pu4_entry_point_offset[i] = value;
  920|    669|            }
  921|       |
  922|    418|        }
  923|  1.95k|    }
  924|       |
  925|  7.08k|    if(ps_pps->i1_slice_header_extension_present_flag)
  ------------------
  |  Branch (925:8): [True: 2.84k, False: 4.24k]
  ------------------
  926|  2.84k|    {
  927|  2.84k|        UEV_PARSE("slice_header_extension_length", value, ps_bitstrm);
  ------------------
  |  |  155|  2.84k|    m_value = ihevcd_uev(m_ps_bitstrm);
  ------------------
  928|  2.84k|        if(value > 256)
  ------------------
  |  Branch (928:12): [True: 25, False: 2.81k]
  ------------------
  929|     25|        {
  930|     25|            return IHEVCD_INVALID_PARAMETER;
  931|     25|        }
  932|  2.81k|        ps_slice_hdr->i2_slice_header_extension_length = value;
  933|       |
  934|       |
  935|  6.44k|        for(i = 0; i < ps_slice_hdr->i2_slice_header_extension_length; i++)
  ------------------
  |  Branch (935:20): [True: 3.62k, False: 2.81k]
  ------------------
  936|  3.62k|        {
  937|  3.62k|            BITS_PARSE("slice_header_extension_data_byte", value, ps_bitstrm, 8);
  ------------------
  |  |  148|  3.62k|    m_value = ihevcd_bits_get(m_ps_bitstrm, m_numbits);
  ------------------
  938|  3.62k|        }
  939|       |
  940|  2.81k|    }
  941|       |
  942|  7.05k|    ihevcd_bits_flush_to_byte_boundary(ps_bitstrm);
  943|       |
  944|  7.05k|    if((UWORD8 *)ps_bitstrm->pu4_buf > ps_bitstrm->pu1_buf_max)
  ------------------
  |  Branch (944:8): [True: 95, False: 6.96k]
  ------------------
  945|     95|        return IHEVCD_INVALID_PARAMETER;
  946|       |
  947|  6.96k|    {
  948|  6.96k|        dpb_mgr_t *ps_dpb_mgr = (dpb_mgr_t *)ps_codec->pv_dpb_mgr;
  949|  6.96k|        WORD32 r_idx;
  950|       |
  951|  6.96k|        if((NAL_IDR_W_LP == ps_slice_hdr->i1_nal_unit_type) ||
  ------------------
  |  Branch (951:12): [True: 1.27k, False: 5.68k]
  ------------------
  952|  6.96k|                        (NAL_IDR_N_LP == ps_slice_hdr->i1_nal_unit_type)  ||
  ------------------
  |  Branch (952:25): [True: 2.43k, False: 3.24k]
  ------------------
  953|  6.96k|                        (NAL_BLA_N_LP == ps_slice_hdr->i1_nal_unit_type)  ||
  ------------------
  |  Branch (953:25): [True: 135, False: 3.11k]
  ------------------
  954|  6.96k|                        (NAL_BLA_W_DLP == ps_slice_hdr->i1_nal_unit_type) ||
  ------------------
  |  Branch (954:25): [True: 128, False: 2.98k]
  ------------------
  955|  6.96k|                        (NAL_BLA_W_LP == ps_slice_hdr->i1_nal_unit_type)  ||
  ------------------
  |  Branch (955:25): [True: 135, False: 2.84k]
  ------------------
  956|  6.96k|                        (0 == ps_codec->u4_pic_cnt))
  ------------------
  |  Branch (956:25): [True: 548, False: 2.30k]
  ------------------
  957|  4.66k|        {
  958|   302k|            for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|   302k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|   302k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (958:24): [True: 298k, False: 4.66k]
  ------------------
  959|   298k|            {
  960|   298k|                if(ps_dpb_mgr->as_dpb_info[i].ps_pic_buf)
  ------------------
  |  Branch (960:20): [True: 3.31k, False: 294k]
  ------------------
  961|  3.31k|                {
  962|  3.31k|                    pic_buf_t *ps_pic_buf = ps_dpb_mgr->as_dpb_info[i].ps_pic_buf;
  963|  3.31k|                    mv_buf_t *ps_mv_buf;
  964|       |
  965|       |                    /* Long term index is set to MAX_DPB_BUFS to ensure it is not added as LT */
  966|  3.31k|                    ihevc_dpb_mgr_del_ref((dpb_mgr_t *)ps_codec->pv_dpb_mgr, (buf_mgr_t *)ps_codec->pv_pic_buf_mgr, ps_pic_buf->i4_abs_poc);
  967|       |                    /* Find buffer id of the MV bank corresponding to the buffer being freed (Buffer with POC of u4_abs_poc) */
  968|  3.31k|                    ps_mv_buf = (mv_buf_t *)ps_codec->ps_mv_buf;
  969|  3.54k|                    for(j = 0; j < ps_codec->i4_max_dpb_size; j++)
  ------------------
  |  Branch (969:32): [True: 3.54k, False: 0]
  ------------------
  970|  3.54k|                    {
  971|  3.54k|                        if(ps_mv_buf && ps_mv_buf->i4_abs_poc == ps_pic_buf->i4_abs_poc)
  ------------------
  |  Branch (971:28): [True: 3.54k, False: 0]
  |  Branch (971:41): [True: 3.31k, False: 231]
  ------------------
  972|  3.31k|                        {
  973|  3.31k|                            ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, j, BUF_MGR_REF);
  ------------------
  |  |   40|  3.31k|#define BUF_MGR_REF         (1 << 1)
  ------------------
  974|  3.31k|                            break;
  975|  3.31k|                        }
  976|    231|                        ps_mv_buf++;
  977|    231|                    }
  978|       |
  979|  3.31k|                }
  980|       |
  981|   298k|            }
  982|       |
  983|       |            /* Initialize the reference lists to NULL
  984|       |             * This is done to take care of the cases where the first pic is not IDR
  985|       |             * but the reference list is not created for the first pic because
  986|       |             * pic count is zero leaving the reference list uninitialised  */
  987|  79.2k|            for(r_idx = 0; r_idx < MAX_DPB_SIZE; r_idx++)
  ------------------
  |  |  281|  79.2k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (987:28): [True: 74.5k, False: 4.66k]
  ------------------
  988|  74.5k|            {
  989|  74.5k|                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = NULL;
  990|  74.5k|                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = NULL;
  991|       |
  992|  74.5k|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = NULL;
  993|  74.5k|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = NULL;
  994|  74.5k|            }
  995|       |
  996|  4.66k|        }
  997|  2.30k|        else
  998|  2.30k|        {
  999|  2.30k|            ret = ihevcd_ref_list(ps_codec, ps_pps, ps_sps, ps_slice_hdr);
 1000|  2.30k|            if ((WORD32)IHEVCD_SUCCESS != ret)
  ------------------
  |  Branch (1000:17): [True: 130, False: 2.17k]
  ------------------
 1001|    130|            {
 1002|    130|                return ret;
 1003|    130|            }
 1004|       |
 1005|  2.30k|        }
 1006|       |
 1007|  6.96k|    }
 1008|       |
 1009|       |    /* Fill the remaining entries of the reference lists with the nearest POC
 1010|       |     * This is done to handle cases where there is a corruption in the reference index */
 1011|  6.83k|    if(ps_codec->i4_pic_present)
  ------------------
  |  Branch (1011:8): [True: 1.07k, False: 5.76k]
  ------------------
 1012|  1.07k|    {
 1013|  1.07k|        pic_buf_t *ps_pic_buf_ref;
 1014|  1.07k|        mv_buf_t *ps_mv_buf_ref;
 1015|  1.07k|        WORD32 r_idx;
 1016|  1.07k|        dpb_mgr_t *ps_dpb_mgr = (dpb_mgr_t *)ps_codec->pv_dpb_mgr;
 1017|  1.07k|        buf_mgr_t *ps_mv_buf_mgr = (buf_mgr_t *)ps_codec->pv_mv_buf_mgr;
 1018|       |
 1019|  1.07k|        ps_pic_buf_ref = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ps_slice_hdr->i4_abs_pic_order_cnt);
 1020|  1.07k|        if(NULL == ps_pic_buf_ref)
  ------------------
  |  Branch (1020:12): [True: 951, False: 119]
  ------------------
 1021|    951|        {
 1022|    951|            ps_pic_buf_ref = ps_codec->as_process[0].ps_cur_pic;
 1023|    951|            ps_mv_buf_ref = ps_codec->s_parse.ps_cur_mv_buf;
 1024|    951|        }
 1025|    119|        else
 1026|    119|        {
 1027|    119|            ps_mv_buf_ref = ihevcd_mv_mgr_get_poc(ps_mv_buf_mgr, ps_pic_buf_ref->i4_abs_poc);
 1028|    119|        }
 1029|       |
 1030|  1.23k|        for(r_idx = 0; r_idx < ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx++)
  ------------------
  |  Branch (1030:24): [True: 165, False: 1.07k]
  ------------------
 1031|    165|        {
 1032|    165|            if(NULL == ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf)
  ------------------
  |  Branch (1032:16): [True: 18, False: 147]
  ------------------
 1033|     18|            {
 1034|     18|                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1035|     18|                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1036|     18|            }
 1037|    165|        }
 1038|       |
 1039|  18.0k|        for(r_idx = ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx < MAX_DPB_SIZE; r_idx++)
  ------------------
  |  |  281|  18.0k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (1039:61): [True: 16.9k, False: 1.07k]
  ------------------
 1040|  16.9k|        {
 1041|  16.9k|            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1042|  16.9k|            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1043|  16.9k|        }
 1044|       |
 1045|  1.34k|        for(r_idx = 0; r_idx < ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx++)
  ------------------
  |  Branch (1045:24): [True: 271, False: 1.07k]
  ------------------
 1046|    271|        {
 1047|    271|            if(NULL == ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf)
  ------------------
  |  Branch (1047:16): [True: 60, False: 211]
  ------------------
 1048|     60|            {
 1049|     60|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1050|     60|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1051|     60|            }
 1052|    271|        }
 1053|       |
 1054|  17.9k|        for(r_idx = ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx < MAX_DPB_SIZE; r_idx++)
  ------------------
  |  |  281|  17.9k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (1054:61): [True: 16.8k, False: 1.07k]
  ------------------
 1055|  16.8k|        {
 1056|  16.8k|            ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1057|  16.8k|            ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1058|  16.8k|        }
 1059|  1.07k|    }
 1060|       |
 1061|       |    /* Update slice address in the header */
 1062|  6.83k|    if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (1062:8): [True: 1.88k, False: 4.94k]
  ------------------
 1063|  1.88k|    {
 1064|  1.88k|        ps_slice_hdr->i2_ctb_x = slice_address % ps_sps->i2_pic_wd_in_ctb;
 1065|  1.88k|        ps_slice_hdr->i2_ctb_y = slice_address / ps_sps->i2_pic_wd_in_ctb;
 1066|       |
 1067|  1.88k|        if(!ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (1067:12): [True: 1.18k, False: 703]
  ------------------
 1068|  1.18k|        {
 1069|  1.18k|            ps_slice_hdr->i2_independent_ctb_x = ps_slice_hdr->i2_ctb_x;
 1070|  1.18k|            ps_slice_hdr->i2_independent_ctb_y = ps_slice_hdr->i2_ctb_y;
 1071|  1.18k|        }
 1072|  1.88k|    }
 1073|  4.94k|    else
 1074|  4.94k|    {
 1075|  4.94k|        ps_slice_hdr->i2_ctb_x = 0;
 1076|  4.94k|        ps_slice_hdr->i2_ctb_y = 0;
 1077|       |
 1078|  4.94k|        ps_slice_hdr->i2_independent_ctb_x = 0;
 1079|  4.94k|        ps_slice_hdr->i2_independent_ctb_y = 0;
 1080|  4.94k|    }
 1081|       |
 1082|       |    /* If the first slice in the pic is missing, copy the current slice header to
 1083|       |     * the first slice's header */
 1084|  6.83k|    if((!first_slice_in_pic_flag) &&
  ------------------
  |  Branch (1084:8): [True: 1.88k, False: 4.94k]
  ------------------
 1085|  6.83k|                    (0 == ps_codec->i4_pic_present))
  ------------------
  |  Branch (1085:21): [True: 815, False: 1.07k]
  ------------------
 1086|    815|    {
 1087|    815|        slice_header_t *ps_slice_hdr_prev = ps_codec->s_parse.ps_slice_hdr_base;
 1088|    815|        ihevcd_copy_slice_hdr(ps_codec, 0, (ps_codec->s_parse.i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1)));
  ------------------
  |  |  153|    815|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    815|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 1089|       |
 1090|    815|        prev_slice_incomplete_flag = 1;
 1091|    815|        ASSERT(ps_codec->s_parse.i4_cur_slice_idx == 1);
  ------------------
  |  |   55|    815|#define ASSERT(x) assert((x))
  ------------------
 1092|       |
 1093|    815|        ps_slice_hdr_prev->i2_ctb_x = 0;
 1094|    815|        ps_slice_hdr_prev->i2_ctb_y = 0;
 1095|       |
 1096|    815|        ps_codec->s_parse.i4_ctb_x = 0;
 1097|    815|        ps_codec->s_parse.i4_ctb_y = 0;
 1098|       |
 1099|    815|        ps_codec->s_parse.i4_cur_slice_idx = 0;
 1100|       |
 1101|    815|        if((ps_slice_hdr->i2_ctb_x == 0) &&
  ------------------
  |  Branch (1101:12): [True: 4, False: 811]
  ------------------
 1102|    815|                        (ps_slice_hdr->i2_ctb_y == 0))
  ------------------
  |  Branch (1102:25): [True: 0, False: 4]
  ------------------
 1103|      0|        {
 1104|      0|            ps_slice_hdr->i2_ctb_x++;
 1105|      0|        }
 1106|    815|    }
 1107|       |
 1108|  6.83k|    {
 1109|       |        /* If skip B is enabled,
 1110|       |         * ignore pictures that are non-reference
 1111|       |         * TODO: (i1_nal_unit_type < NAL_BLA_W_LP) && (i1_nal_unit_type % 2 == 0) only says it is
 1112|       |         * sub-layer non-reference slice. May need to find a way to detect actual non-reference pictures*/
 1113|       |
 1114|  6.83k|        if((i1_nal_unit_type < NAL_BLA_W_LP) &&
  ------------------
  |  Branch (1114:12): [True: 2.12k, False: 4.70k]
  ------------------
 1115|  6.83k|                        (i1_nal_unit_type % 2 == 0))
  ------------------
  |  Branch (1115:25): [True: 1.90k, False: 222]
  ------------------
 1116|  1.90k|        {
 1117|  1.90k|            if(IVD_SKIP_B == ps_codec->e_pic_skip_mode)
  ------------------
  |  Branch (1117:16): [True: 0, False: 1.90k]
  ------------------
 1118|      0|                return IHEVCD_IGNORE_SLICE;
 1119|  1.90k|        }
 1120|       |
 1121|       |        /* If skip PB is enabled,
 1122|       |         * decode only I slices */
 1123|  6.83k|        if((IVD_SKIP_PB == ps_codec->e_pic_skip_mode) &&
  ------------------
  |  Branch (1123:12): [True: 0, False: 6.83k]
  ------------------
 1124|  6.83k|                        (ISLICE != ps_slice_hdr->i1_slice_type))
  ------------------
  |  Branch (1124:25): [True: 0, False: 0]
  ------------------
 1125|      0|        {
 1126|      0|            return IHEVCD_IGNORE_SLICE;
 1127|      0|        }
 1128|  6.83k|    }
 1129|       |
 1130|  6.83k|    if(prev_slice_incomplete_flag)
  ------------------
  |  Branch (1130:8): [True: 1.33k, False: 5.49k]
  ------------------
 1131|  1.33k|    {
 1132|  1.33k|        ps_codec->i4_slice_error = 1;
 1133|  1.33k|        ps_codec->s_parse.i4_cur_slice_idx--;
 1134|  1.33k|        if(ps_codec->s_parse.i4_cur_slice_idx < 0)
  ------------------
  |  Branch (1134:12): [True: 815, False: 518]
  ------------------
 1135|    815|            ps_codec->s_parse.i4_cur_slice_idx = 0;
 1136|  1.33k|    }
 1137|       |
 1138|  6.83k|    return ret;
 1139|  6.83k|}

ihevcd_proc_map_check:
  110|  24.9M|{
  111|  24.9M|    tile_t *ps_tile = ps_proc->ps_tile;
  112|  24.9M|    sps_t *ps_sps = ps_proc->ps_sps;
  113|  24.9M|    pps_t *ps_pps = ps_proc->ps_pps;
  114|  24.9M|    codec_t *ps_codec = ps_proc->ps_codec;
  115|  24.9M|    WORD32 idx;
  116|  24.9M|    WORD32 nop_cnt;
  117|  24.9M|    WORD32 bit_pos = proc_type;
  118|  24.9M|    WORD32 bit_mask = (1 << bit_pos);
  119|       |
  120|  24.9M|    if(ps_proc->i4_check_proc_status)
  ------------------
  |  Branch (120:8): [True: 5.14M, False: 19.7M]
  ------------------
  121|  5.14M|    {
  122|  5.14M|        nop_cnt = PROC_NOP_CNT;
  ------------------
  |  |  156|  5.14M|#define PROC_NOP_CNT (8 * 128)
  ------------------
  123|  34.9M|        while(1)
  ------------------
  |  Branch (123:15): [Folded - Ignored]
  ------------------
  124|  34.8M|        {
  125|  34.8M|            volatile UWORD8 *pu1_buf;
  126|  34.8M|            volatile WORD32 status;
  127|  34.8M|            status = 1;
  128|       |            /* Check if all dependencies for the next nCTBs are met */
  129|  34.8M|            {
  130|  34.8M|                WORD32 x_pos;
  131|       |
  132|  34.8M|                {
  133|       |                    /* Check if the top right of next nCTBs are processed */
  134|  34.8M|                    if(ps_proc->i4_ctb_y > 0)
  ------------------
  |  Branch (134:24): [True: 34.3M, False: 505k]
  ------------------
  135|  34.3M|                    {
  136|  34.3M|                        x_pos = (ps_proc->i4_ctb_tile_x + nctb);
  137|  34.3M|                        idx = MIN(x_pos, (ps_tile->u2_wd - 1));
  ------------------
  |  |   43|  34.3M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 33.5M, False: 824k]
  |  |  ------------------
  ------------------
  138|       |
  139|       |                        /* Check if top-right CTB for the last CTB in nCTB is within the tile */
  140|  34.3M|                        {
  141|  34.3M|                            idx += ps_tile->u1_pos_x;
  142|  34.3M|                            idx += ((ps_proc->i4_ctb_y - 1)
  143|  34.3M|                                            * ps_sps->i2_pic_wd_in_ctb);
  144|  34.3M|                            pu1_buf = (ps_codec->pu1_proc_map + idx);
  145|  34.3M|                            status = *pu1_buf & bit_mask;
  146|  34.3M|                        }
  147|  34.3M|                    }
  148|  34.8M|                }
  149|       |
  150|       |                /* If tiles are enabled, then test left and top-left as well */
  151|  34.8M|                ps_pps = ps_proc->ps_pps;
  152|  34.8M|                if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (152:20): [True: 2.65M, False: 32.2M]
  ------------------
  153|  2.65M|                {
  154|       |                    /*Check if left ctb is processed*/
  155|  2.65M|                    if((ps_proc->i4_ctb_x > 0) && ((0 != status)))
  ------------------
  |  Branch (155:24): [True: 2.50M, False: 148k]
  |  Branch (155:51): [True: 344k, False: 2.16M]
  ------------------
  156|   343k|                    {
  157|   343k|                        x_pos   = ps_tile->u1_pos_x + ps_proc->i4_ctb_tile_x - 1;
  158|   343k|                        idx     = x_pos + (ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  159|   343k|                        pu1_buf = (ps_codec->pu1_proc_map + idx);
  160|   343k|                        status  = *pu1_buf & bit_mask;
  161|   343k|                    }
  162|       |
  163|       |                    /*Check if top left ctb is processed*/
  164|  2.65M|                    if((ps_proc->i4_ctb_x > 0) && (0 != status) && (ps_proc->i4_ctb_y > 0))
  ------------------
  |  Branch (164:24): [True: 2.50M, False: 151k]
  |  Branch (164:51): [True: 342k, False: 2.16M]
  |  Branch (164:68): [True: 306k, False: 36.5k]
  ------------------
  165|   306k|                    {
  166|   306k|                        x_pos   = ps_tile->u1_pos_x + ps_proc->i4_ctb_tile_x - 1;
  167|   306k|                        idx     = x_pos + ((ps_proc->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb);
  168|   306k|                        pu1_buf = (ps_codec->pu1_proc_map + idx);
  169|   306k|                        status  = *pu1_buf & bit_mask;
  170|   306k|                    }
  171|  2.65M|                }
  172|  34.8M|            }
  173|       |
  174|  34.8M|            if(status)
  ------------------
  |  Branch (174:16): [True: 5.07M, False: 29.8M]
  ------------------
  175|  5.07M|                break;
  176|       |
  177|       |            /* if dependencies are not met, then wait for few cycles.
  178|       |             * Even after few iterations, if the dependencies are not met then yield
  179|       |             */
  180|  29.8M|            if(nop_cnt > 0)
  ------------------
  |  Branch (180:16): [True: 26.3M, False: 3.50M]
  ------------------
  181|  26.3M|            {
  182|  26.3M|                NOP(128);
  ------------------
  |  |   68|  3.23G|#define NOP(nop_cnt)    {UWORD32 nop_i; for (nop_i = 0; nop_i < nop_cnt; nop_i++) asm("nop");}
  |  |  ------------------
  |  |  |  Branch (68:57): [True: 3.20G, False: 26.3M]
  |  |  ------------------
  ------------------
  183|  26.3M|                nop_cnt -= 128;
  184|  26.3M|            }
  185|  3.50M|            else
  186|  3.50M|            {
  187|  3.50M|                nop_cnt = PROC_NOP_CNT;
  ------------------
  |  |  156|  3.50M|#define PROC_NOP_CNT (8 * 128)
  ------------------
  188|  3.50M|                ithread_yield();
  189|       |                //NOP(128 * 16);
  190|  3.50M|            }
  191|  29.8M|        }
  192|  5.14M|        DATA_SYNC();
  ------------------
  |  |  100|  5.14M|#define DATA_SYNC()  __sync_synchronize()
  ------------------
  193|  5.14M|    }
  194|  24.9M|}
ihevcd_proc_map_update:
  197|  31.1M|{
  198|  31.1M|    codec_t *ps_codec = ps_proc->ps_codec;
  199|  31.1M|    WORD32 i, idx;
  200|  31.1M|    WORD32 bit_pos = proc_type;
  201|  31.1M|    WORD32 bit_mask = (1 << bit_pos);
  202|       |
  203|       |    /* Update the current CTBs processing status */
  204|  31.1M|    if(ps_proc->i4_check_proc_status)
  ------------------
  |  Branch (204:8): [True: 6.38M, False: 24.7M]
  ------------------
  205|  6.38M|    {
  206|  6.38M|        DATA_SYNC();
  ------------------
  |  |  100|  6.38M|#define DATA_SYNC()  __sync_synchronize()
  ------------------
  207|  12.8M|        for(i = 0; i < nctb; i++)
  ------------------
  |  Branch (207:20): [True: 6.47M, False: 6.38M]
  ------------------
  208|  6.47M|        {
  209|  6.47M|            sps_t *ps_sps = ps_proc->ps_sps;
  210|  6.47M|            UWORD8 *pu1_buf;
  211|  6.47M|            idx = (ps_proc->i4_ctb_x + i);
  212|  6.47M|            idx += ((ps_proc->i4_ctb_y) * ps_sps->i2_pic_wd_in_ctb);
  213|  6.47M|            pu1_buf = (ps_codec->pu1_proc_map + idx);
  214|  6.47M|            *pu1_buf = *pu1_buf | bit_mask;
  215|  6.47M|        }
  216|  6.38M|    }
  217|  31.1M|}
ihevcd_slice_hdr_update:
  221|  24.9M|{
  222|       |
  223|       |    /* Slice x and y are initialized in proc_init. But initialize slice x and y count here
  224|       |     *  if a new slice begins at the middle of a row since proc_init is invoked only at the beginning of each row */
  225|  24.9M|    if(!((ps_proc->i4_ctb_x == 0) && (ps_proc->i4_ctb_y == 0)))
  ------------------
  |  Branch (225:10): [True: 506k, False: 24.4M]
  |  Branch (225:38): [True: 21.4k, False: 485k]
  ------------------
  226|  24.9M|    {
  227|  24.9M|        slice_header_t *ps_slice_hdr_next = ps_proc->ps_codec->ps_slice_hdr_base + ((ps_proc->i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  24.9M|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  24.9M|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  228|       |
  229|  24.9M|        if((ps_slice_hdr_next->i2_ctb_x == ps_proc->i4_ctb_x)
  ------------------
  |  Branch (229:12): [True: 266k, False: 24.6M]
  ------------------
  230|  24.9M|                        && (ps_slice_hdr_next->i2_ctb_y == ps_proc->i4_ctb_y))
  ------------------
  |  Branch (230:28): [True: 569, False: 266k]
  ------------------
  231|    569|        {
  232|    569|            if(0 == ps_slice_hdr_next->i1_dependent_slice_flag)
  ------------------
  |  Branch (232:16): [True: 488, False: 81]
  ------------------
  233|    488|            {
  234|    488|                ps_proc->i4_ctb_slice_x = 0;
  235|    488|                ps_proc->i4_ctb_slice_y = 0;
  236|    488|            }
  237|       |
  238|    569|            ps_proc->i4_cur_slice_idx++;
  239|    569|            ps_proc->ps_slice_hdr = ps_slice_hdr_next;
  240|    569|        }
  241|       |
  242|  24.9M|    }
  243|  24.9M|}
ihevcd_ctb_pos_update:
  246|  18.7M|{
  247|  18.7M|    WORD32 tile_start_ctb_idx, slice_start_ctb_idx;
  248|  18.7M|    slice_header_t *ps_slice_hdr = ps_proc->ps_slice_hdr;
  249|  18.7M|    tile_t *ps_tile = ps_proc->ps_tile;
  250|  18.7M|    sps_t *ps_sps = ps_proc->ps_sps;
  251|       |
  252|       |    /* Update x and y positions */
  253|  18.7M|    ps_proc->i4_ctb_tile_x += nctb;
  254|  18.7M|    ps_proc->i4_ctb_x += nctb;
  255|       |
  256|  18.7M|    ps_proc->i4_ctb_slice_x += nctb;
  257|       |    /*If tile are enabled, then handle the tile & slice counters differently*/
  258|  18.7M|    if(ps_proc->ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (258:8): [True: 8.13M, False: 10.5M]
  ------------------
  259|  8.13M|    {
  260|       |        /* Update slice counters*/
  261|  8.13M|        slice_start_ctb_idx = ps_slice_hdr->i2_ctb_x + (ps_slice_hdr->i2_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  262|  8.13M|        tile_start_ctb_idx = ps_tile->u1_pos_x + (ps_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb);
  263|       |        /*
  264|       |         * There can be 2 cases where slice counters must be handled differently.
  265|       |         * 1 - Multiple tiles span across a single/one of the many slice.
  266|       |         * 2 - Multiple slices span across a single/one of the many tiles.
  267|       |         */
  268|       |
  269|       |        /*Case 1 */
  270|  8.13M|        if(slice_start_ctb_idx < tile_start_ctb_idx)
  ------------------
  |  Branch (270:12): [True: 1.40M, False: 6.72M]
  ------------------
  271|  1.40M|        {
  272|       |            /*End of tile row*/
  273|  1.40M|            if(ps_proc->i4_ctb_x > ps_slice_hdr->i2_ctb_x)
  ------------------
  |  Branch (273:16): [True: 1.40M, False: 3.92k]
  ------------------
  274|  1.40M|            {
  275|  1.40M|                if(ps_proc->i4_ctb_slice_x >= (ps_tile->u2_wd + ps_tile->u1_pos_x))
  ------------------
  |  Branch (275:20): [True: 29.4k, False: 1.37M]
  ------------------
  276|  29.4k|                {
  277|  29.4k|                    ps_proc->i4_ctb_slice_y++;
  278|  29.4k|                    ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_slice_x
  279|  29.4k|                                    - ps_tile->u2_wd;
  280|  29.4k|                }
  281|  1.40M|            }
  282|  3.92k|            else
  283|  3.92k|            {
  284|  3.92k|                WORD32 temp_stride = (ps_sps->i2_pic_wd_in_ctb - ps_slice_hdr->i2_ctb_x);
  285|  3.92k|                if(ps_proc->i4_ctb_slice_x >= (temp_stride + ps_tile->u2_wd + ps_tile->u1_pos_x))
  ------------------
  |  Branch (285:20): [True: 45, False: 3.87k]
  ------------------
  286|     45|                {
  287|     45|                    ps_proc->i4_ctb_slice_y++;
  288|     45|                    ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_slice_x
  289|     45|                                    - ps_tile->u2_wd;
  290|     45|                }
  291|  3.92k|            }
  292|  1.40M|        }
  293|       |        /*Case 2*/
  294|  6.72M|        else if(ps_proc->i4_ctb_slice_x >= (ps_tile->u2_wd))
  ------------------
  |  Branch (294:17): [True: 55.4k, False: 6.66M]
  ------------------
  295|  55.4k|        {
  296|       |            /*End of tile row*/
  297|  55.4k|            ps_proc->i4_ctb_slice_y++;
  298|  55.4k|            ps_proc->i4_ctb_slice_x = 0;
  299|  55.4k|        }
  300|  8.13M|    }
  301|  10.5M|    else
  302|  10.5M|    {
  303|  10.5M|        if(ps_proc->i4_ctb_slice_x >= ps_tile->u2_wd)
  ------------------
  |  Branch (303:12): [True: 310k, False: 10.2M]
  ------------------
  304|   310k|        {
  305|   310k|            ps_proc->i4_ctb_slice_y++;
  306|   310k|            ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_slice_x
  307|   310k|                            - ps_tile->u2_wd;
  308|   310k|        }
  309|  10.5M|    }
  310|  18.7M|}
ihevcd_ctb_avail_update:
  313|  12.4M|{
  314|  12.4M|    slice_header_t *ps_slice_hdr = ps_proc->ps_slice_hdr;
  315|  12.4M|    sps_t *ps_sps = ps_proc->ps_sps;
  316|  12.4M|    tile_t *ps_tile_prev;
  317|  12.4M|    tile_t *ps_tile = ps_proc->ps_tile;
  318|  12.4M|    WORD32 cur_pu_idx;
  319|  12.4M|    WORD32 tile_start_ctb_idx, slice_start_ctb_idx;
  320|  12.4M|    WORD16 i2_wd_in_ctb;
  321|  12.4M|    WORD32 continuous_tiles = 0;
  322|  12.4M|    WORD32 cur_ctb_idx;
  323|  12.4M|    WORD32 check_tile_wd;
  324|       |
  325|  12.4M|    if((0 != ps_tile->u1_pos_x) && (0 != ps_tile->u1_pos_y))
  ------------------
  |  Branch (325:8): [True: 586k, False: 11.8M]
  |  Branch (325:36): [True: 337k, False: 249k]
  ------------------
  326|   337k|    {
  327|   337k|        ps_tile_prev = ps_tile - 1;
  328|   337k|    }
  329|  12.1M|    else
  330|  12.1M|    {
  331|  12.1M|        ps_tile_prev = ps_tile;
  332|  12.1M|    }
  333|       |
  334|       |
  335|  12.4M|    check_tile_wd = ps_slice_hdr->i2_ctb_x + ps_tile_prev->u2_wd;
  336|  12.4M|    if(!(((check_tile_wd >= ps_sps->i2_pic_wd_in_ctb) && (check_tile_wd % ps_sps->i2_pic_wd_in_ctb == ps_tile->u1_pos_x))
  ------------------
  |  Branch (336:11): [True: 11.4M, False: 1.02M]
  |  Branch (336:58): [True: 11.3M, False: 129k]
  ------------------
  337|  12.4M|                                    || ((ps_slice_hdr->i2_ctb_x == ps_tile->u1_pos_x))))
  ------------------
  |  Branch (337:40): [True: 436k, False: 714k]
  ------------------
  338|   714k|    {
  339|   714k|        continuous_tiles = 1;
  340|   714k|    }
  341|       |
  342|  12.4M|    slice_start_ctb_idx = ps_slice_hdr->i2_ctb_x + (ps_slice_hdr->i2_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  343|  12.4M|    tile_start_ctb_idx = ps_tile->u1_pos_x + (ps_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb);
  344|       |
  345|  12.4M|    if((slice_start_ctb_idx < tile_start_ctb_idx) && (continuous_tiles))
  ------------------
  |  Branch (345:8): [True: 939k, False: 11.5M]
  |  Branch (345:54): [True: 574k, False: 364k]
  ------------------
  346|   574k|    {
  347|       |        //Slices span across multiple tiles.
  348|   574k|        i2_wd_in_ctb = ps_sps->i2_pic_wd_in_ctb;
  349|   574k|    }
  350|  11.8M|    else
  351|  11.8M|    {
  352|  11.8M|        i2_wd_in_ctb = ps_tile->u2_wd;
  353|  11.8M|    }
  354|  12.4M|    cur_ctb_idx = ps_proc->i4_ctb_x
  355|  12.4M|                    + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  356|       |
  357|       |    /* Ctb level availability */
  358|       |    /* Bottom left will not be available at a CTB level, no need to pass this */
  359|  12.4M|    ps_proc->u1_top_ctb_avail = 1;
  360|  12.4M|    ps_proc->u1_left_ctb_avail = 1;
  361|  12.4M|    ps_proc->u1_top_lt_ctb_avail = 1;
  362|  12.4M|    ps_proc->u1_top_rt_ctb_avail = 1;
  363|       |    /* slice and tile boundaries */
  364|       |
  365|  12.4M|    if((0 == ps_proc->i4_ctb_y) || (0 == ps_proc->i4_ctb_tile_y))
  ------------------
  |  Branch (365:8): [True: 332k, False: 12.1M]
  |  Branch (365:36): [True: 30.6k, False: 12.1M]
  ------------------
  366|   363k|    {
  367|   363k|        ps_proc->u1_top_ctb_avail = 0;
  368|   363k|        ps_proc->u1_top_lt_ctb_avail = 0;
  369|   363k|        ps_proc->u1_top_rt_ctb_avail = 0;
  370|   363k|    }
  371|       |
  372|  12.4M|    if((0 == ps_proc->i4_ctb_x) || (0 == ps_proc->i4_ctb_tile_x))
  ------------------
  |  Branch (372:8): [True: 252k, False: 12.2M]
  |  Branch (372:36): [True: 16.0k, False: 12.2M]
  ------------------
  373|   269k|    {
  374|   269k|        ps_proc->u1_left_ctb_avail = 0;
  375|   269k|        ps_proc->u1_top_lt_ctb_avail = 0;
  376|   269k|        if((0 == ps_proc->i4_ctb_slice_y) || (0 == ps_proc->i4_ctb_tile_y))
  ------------------
  |  Branch (376:12): [True: 12.5k, False: 257k]
  |  Branch (376:46): [True: 5.93k, False: 251k]
  ------------------
  377|  18.4k|        {
  378|  18.4k|            ps_proc->u1_top_ctb_avail = 0;
  379|  18.4k|            if((i2_wd_in_ctb - 1) != ps_proc->i4_ctb_slice_x)
  ------------------
  |  Branch (379:16): [True: 13.7k, False: 4.73k]
  ------------------
  380|  13.7k|            {
  381|  13.7k|                ps_proc->u1_top_rt_ctb_avail = 0;
  382|  13.7k|            }
  383|  18.4k|        }
  384|   269k|    }
  385|       |    /*For slices not beginning at start of a ctb row*/
  386|  12.2M|    else if(ps_proc->i4_ctb_x > 0)
  ------------------
  |  Branch (386:13): [True: 12.2M, False: 18.4E]
  ------------------
  387|  12.2M|    {
  388|  12.2M|        if((0 == ps_proc->i4_ctb_slice_y) || (0 == ps_proc->i4_ctb_tile_y))
  ------------------
  |  Branch (388:12): [True: 340k, False: 11.8M]
  |  Branch (388:46): [True: 86.0k, False: 11.7M]
  ------------------
  389|   429k|        {
  390|   429k|            ps_proc->u1_top_ctb_avail = 0;
  391|   429k|            ps_proc->u1_top_lt_ctb_avail = 0;
  392|   429k|            if(0 == ps_proc->i4_ctb_slice_x)
  ------------------
  |  Branch (392:16): [True: 1.23k, False: 428k]
  ------------------
  393|  1.23k|            {
  394|  1.23k|                ps_proc->u1_left_ctb_avail = 0;
  395|  1.23k|            }
  396|   429k|            if((i2_wd_in_ctb - 1) != ps_proc->i4_ctb_slice_x)
  ------------------
  |  Branch (396:16): [True: 417k, False: 12.5k]
  ------------------
  397|   417k|            {
  398|   417k|                ps_proc->u1_top_rt_ctb_avail = 0;
  399|   417k|            }
  400|   429k|        }
  401|  11.7M|        else if((1 == ps_proc->i4_ctb_slice_y) && (0 == ps_proc->i4_ctb_slice_x))
  ------------------
  |  Branch (401:17): [True: 316k, False: 11.4M]
  |  Branch (401:51): [True: 650, False: 316k]
  ------------------
  402|    650|        {
  403|    650|            ps_proc->u1_top_lt_ctb_avail = 0;
  404|    650|        }
  405|  12.2M|    }
  406|       |
  407|  12.4M|    if((ps_proc->i4_ctb_x == (ps_sps->i2_pic_wd_in_ctb - 1)) || ((ps_tile->u2_wd - 1) == ps_proc->i4_ctb_tile_x))
  ------------------
  |  Branch (407:8): [True: 254k, False: 12.2M]
  |  Branch (407:65): [True: 15.9k, False: 12.2M]
  ------------------
  408|   269k|    {
  409|   269k|        ps_proc->u1_top_rt_ctb_avail = 0;
  410|   269k|    }
  411|       |
  412|       |
  413|  12.4M|    {
  414|  12.4M|        WORD32 next_ctb_idx;
  415|  12.4M|        next_ctb_idx = cur_ctb_idx + 1;
  416|       |
  417|  12.4M|        if(ps_tile->u2_wd == (ps_proc->i4_ctb_tile_x + 1))
  ------------------
  |  Branch (417:12): [True: 269k, False: 12.2M]
  ------------------
  418|   269k|        {
  419|   269k|            if((ps_proc->i4_ctb_tile_y + 1) == ps_tile->u2_ht)
  ------------------
  |  Branch (419:16): [True: 16.9k, False: 252k]
  ------------------
  420|  16.9k|            {
  421|       |                //Last tile
  422|  16.9k|                if(((ps_proc->i4_ctb_tile_y + 1 + ps_tile->u1_pos_y) == ps_sps->i2_pic_ht_in_ctb) && ((ps_proc->i4_ctb_tile_x + 1 + ps_tile->u1_pos_x) == ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (422:20): [True: 11.7k, False: 5.13k]
  |  Branch (422:102): [True: 10.7k, False: 1.07k]
  ------------------
  423|  10.7k|                {
  424|  10.7k|                    next_ctb_idx = cur_ctb_idx + 1;
  425|  10.7k|                }
  426|  6.20k|                else //Not last tile, but new tile
  427|  6.20k|                {
  428|  6.20k|                    tile_t *ps_tile_next = ps_proc->ps_tile + 1;
  429|  6.20k|                    next_ctb_idx = ps_tile_next->u1_pos_x + (ps_tile_next->u1_pos_y * ps_sps->i2_pic_wd_in_ctb);
  430|  6.20k|                }
  431|  16.9k|            }
  432|   252k|            else //End of each tile row
  433|   252k|            {
  434|   252k|                next_ctb_idx = ((ps_tile->u1_pos_y + ps_proc->i4_ctb_tile_y + 1) * ps_sps->i2_pic_wd_in_ctb) + ps_tile->u1_pos_x;
  435|   252k|            }
  436|   269k|        }
  437|  12.4M|        ps_proc->i4_next_pu_ctb_cnt = next_ctb_idx;
  438|  12.4M|        ps_proc->i4_ctb_pu_cnt =
  439|  12.4M|                        ps_proc->pu4_pic_pu_idx[next_ctb_idx]
  440|  12.4M|                        - ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
  441|  12.4M|        cur_pu_idx = ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
  442|  12.4M|        ps_proc->i4_ctb_start_pu_idx = cur_pu_idx;
  443|  12.4M|        ps_proc->ps_pu = &ps_proc->ps_pic_pu[cur_pu_idx];
  444|  12.4M|    }
  445|  12.4M|}
ihevcd_update_ctb_tu_cnt:
  448|  6.93M|{
  449|  6.93M|    sps_t *ps_sps = ps_proc->ps_sps;
  450|  6.93M|    codec_t *ps_codec = ps_proc->ps_codec;
  451|  6.93M|    WORD32 cur_ctb_idx;
  452|       |
  453|  6.93M|    cur_ctb_idx = ps_proc->i4_ctb_x
  454|  6.93M|                    + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  455|       |
  456|  6.93M|    {
  457|  6.93M|        tile_t *ps_tile;
  458|  6.93M|        WORD32 next_ctb_tu_idx;
  459|  6.93M|        ps_tile = ps_proc->ps_tile;
  460|       |
  461|       |
  462|  6.93M|        if(1 == ps_codec->i4_num_cores)
  ------------------
  |  Branch (462:12): [True: 4.94M, False: 1.99M]
  ------------------
  463|  4.94M|        {
  464|  4.94M|            next_ctb_tu_idx = cur_ctb_idx % RESET_TU_BUF_NCTB + 1;
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  4.94M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  465|  4.94M|            if(ps_tile->u2_wd == (ps_proc->i4_ctb_tile_x + 1))
  ------------------
  |  Branch (465:16): [True: 73.1k, False: 4.87M]
  ------------------
  466|  73.1k|            {
  467|  73.1k|                if((ps_proc->i4_ctb_tile_y + 1) == ps_tile->u2_ht)
  ------------------
  |  Branch (467:20): [True: 3.97k, False: 69.2k]
  ------------------
  468|  3.97k|                {
  469|       |                    //Last tile
  470|  3.97k|                    if(((ps_proc->i4_ctb_tile_y + 1 + ps_tile->u1_pos_y) == ps_sps->i2_pic_ht_in_ctb) && ((ps_proc->i4_ctb_tile_x + 1 + ps_tile->u1_pos_x) == ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (470:24): [True: 1.63k, False: 2.34k]
  |  Branch (470:106): [True: 1.36k, False: 267]
  ------------------
  471|  1.36k|                    {
  472|  1.36k|                        next_ctb_tu_idx = (cur_ctb_idx % RESET_TU_BUF_NCTB) + 1;
  ------------------
  |  |  179|  1.36k|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  1.36k|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  1.36k|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  1.36k|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  1.36k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  1.36k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  473|  1.36k|                    }
  474|  2.60k|                    else //Not last tile, but new tile
  475|  2.60k|                    {
  476|  2.60k|                        tile_t *ps_tile_next = ps_proc->ps_tile + 1;
  477|  2.60k|                        next_ctb_tu_idx = ps_tile_next->u1_pos_x + (ps_tile_next->u1_pos_y * ps_sps->i2_pic_wd_in_ctb);
  478|  2.60k|                    }
  479|  3.97k|                }
  480|  69.2k|                else //End of each tile row
  481|  69.2k|                {
  482|  69.2k|                    next_ctb_tu_idx = ((ps_tile->u1_pos_y + ps_proc->i4_ctb_tile_y + 1) * ps_sps->i2_pic_wd_in_ctb) + ps_tile->u1_pos_x;
  483|  69.2k|                }
  484|  73.1k|            }
  485|  4.94M|            ps_proc->i4_next_tu_ctb_cnt = next_ctb_tu_idx;
  486|  4.94M|            ps_proc->i4_ctb_tu_cnt = ps_proc->pu4_pic_tu_idx[next_ctb_tu_idx] - ps_proc->pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  4.94M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|  4.94M|        }
  488|  1.99M|        else
  489|  1.99M|        {
  490|  1.99M|            next_ctb_tu_idx = cur_ctb_idx + 1;
  491|  1.99M|            if(ps_tile->u2_wd == (ps_proc->i4_ctb_tile_x + 1))
  ------------------
  |  Branch (491:16): [True: 103k, False: 1.88M]
  ------------------
  492|   103k|            {
  493|   103k|                if((ps_proc->i4_ctb_tile_y + 1) == ps_tile->u2_ht)
  ------------------
  |  Branch (493:20): [True: 6.59k, False: 96.7k]
  ------------------
  494|  6.59k|                {
  495|       |                    //Last tile
  496|  6.59k|                    if(((ps_proc->i4_ctb_tile_y + 1 + ps_tile->u1_pos_y) == ps_sps->i2_pic_ht_in_ctb) && ((ps_proc->i4_ctb_tile_x + 1 + ps_tile->u1_pos_x) == ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  Branch (496:24): [True: 6.35k, False: 236]
  |  Branch (496:106): [True: 5.88k, False: 470]
  ------------------
  497|  5.88k|                    {
  498|  5.88k|                        next_ctb_tu_idx = (cur_ctb_idx % RESET_TU_BUF_NCTB) + 1;
  ------------------
  |  |  179|  5.88k|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  5.88k|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  5.88k|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  5.88k|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  5.88k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  5.88k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|  5.88k|                    }
  500|    706|                    else //Not last tile, but new tile
  501|    706|                    {
  502|    706|                        tile_t *ps_tile_next = ps_proc->ps_tile + 1;
  503|    706|                        next_ctb_tu_idx = ps_tile_next->u1_pos_x + (ps_tile_next->u1_pos_y * ps_sps->i2_pic_wd_in_ctb);
  504|    706|                    }
  505|  6.59k|                }
  506|  96.7k|                else //End of each tile row
  507|  96.7k|                {
  508|  96.7k|                    next_ctb_tu_idx = ((ps_tile->u1_pos_y + ps_proc->i4_ctb_tile_y + 1) * ps_sps->i2_pic_wd_in_ctb) + ps_tile->u1_pos_x;
  509|  96.7k|                }
  510|   103k|            }
  511|  1.99M|            ps_proc->i4_next_tu_ctb_cnt = next_ctb_tu_idx;
  512|  1.99M|            ps_proc->i4_ctb_tu_cnt = ps_proc->pu4_pic_tu_idx[next_ctb_tu_idx] -
  513|  1.99M|                            ps_proc->pu4_pic_tu_idx[cur_ctb_idx];
  514|  1.99M|        }
  515|  6.93M|    }
  516|  6.93M|}
ihevcd_process:
  519|   134k|{
  520|   134k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  521|   134k|    codec_t *ps_codec;
  522|   134k|    sps_t *ps_sps = ps_proc->ps_sps;
  523|       |
  524|   134k|    WORD32 nctb;
  525|   134k|    WORD32 i;
  526|   134k|    WORD32 idx;
  527|   134k|    WORD32 nop_cnt;
  528|   134k|    WORD32 num_minpu_in_ctb;
  529|   134k|    WORD32 cur_slice_idx, cur_ctb_tile_x, cur_ctb_slice_x, cur_ctb_tile_y, cur_ctb_slice_y;
  530|   134k|    WORD32 nxt_ctb_slice_y, nxt_ctb_slice_x;
  531|   134k|    tu_t *ps_tu_cur, *ps_tu_nxt;
  532|   134k|    UWORD8 *pu1_pu_map_cur, *pu1_pu_map_nxt;
  533|   134k|    WORD32 num_ctb, num_ctb_tmp;
  534|   134k|    proc_type_t proc_type;
  535|       |
  536|       |
  537|   134k|    WORD32 ctb_size = 1 << ps_sps->i1_log2_ctb_size;
  538|       |
  539|   134k|    PROFILE_DISABLE_PROCESS_CTB();
  ------------------
  |  |   77|   134k|#define PROFILE_DISABLE_PROCESS_CTB() ;
  ------------------
  540|       |
  541|   134k|    ps_codec = ps_proc->ps_codec;
  542|   134k|    num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   134k|#define MIN_PU_SIZE         4
  ------------------
                  num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   134k|#define MIN_PU_SIZE         4
  ------------------
  543|       |
  544|   134k|    nctb = MIN(ps_codec->i4_proc_nctb, ps_proc->i4_ctb_cnt);
  ------------------
  |  |   43|   134k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 125k, False: 8.98k]
  |  |  ------------------
  ------------------
  545|   134k|    nctb = MIN(nctb, (ps_proc->ps_tile->u2_wd - ps_proc->i4_ctb_tile_x));
  ------------------
  |  |   43|   134k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 125k, False: 8.98k]
  |  |  ------------------
  ------------------
  546|       |
  547|   134k|    if(ps_proc->i4_cur_slice_idx > (MAX_SLICE_HDR_CNT - 2 * ps_sps->i2_pic_wd_in_ctb))
  ------------------
  |  |  153|   134k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|   134k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  |  Branch (547:8): [True: 31.6k, False: 103k]
  ------------------
  548|  31.6k|    {
  549|  31.6k|        num_ctb = 1;
  550|  31.6k|    }
  551|   103k|    else
  552|   103k|    {
  553|   103k|        num_ctb = ps_proc->i4_nctb;
  554|   103k|    }
  555|   134k|    nxt_ctb_slice_y = ps_proc->i4_ctb_slice_y;
  556|   134k|    nxt_ctb_slice_x = ps_proc->i4_ctb_slice_x;
  557|   134k|    pu1_pu_map_nxt = ps_proc->pu1_pu_map;
  558|   134k|    ps_tu_nxt = ps_proc->ps_tu;
  559|       |
  560|  4.94M|    while(ps_proc->i4_ctb_cnt)
  ------------------
  |  Branch (560:11): [True: 4.80M, False: 134k]
  ------------------
  561|  4.80M|    {
  562|  4.80M|        ps_proc->i4_ctb_slice_y = nxt_ctb_slice_y;
  563|  4.80M|        ps_proc->i4_ctb_slice_x = nxt_ctb_slice_x;
  564|  4.80M|        ps_proc->pu1_pu_map = pu1_pu_map_nxt;
  565|  4.80M|        ps_proc->ps_tu = ps_tu_nxt;
  566|       |
  567|  4.80M|        cur_ctb_tile_x = ps_proc->i4_ctb_tile_x;
  568|  4.80M|        cur_ctb_tile_y = ps_proc->i4_ctb_tile_y;
  569|  4.80M|        cur_ctb_slice_x = ps_proc->i4_ctb_slice_x;
  570|  4.80M|        cur_ctb_slice_y = ps_proc->i4_ctb_slice_y;
  571|  4.80M|        cur_slice_idx = ps_proc->i4_cur_slice_idx;
  572|  4.80M|        ps_tu_cur = ps_proc->ps_tu;
  573|  4.80M|        pu1_pu_map_cur = ps_proc->pu1_pu_map;
  574|  4.80M|        proc_type = PROC_INTER_PRED;
  575|       |
  576|  4.80M|        if(ps_proc->i4_ctb_cnt < num_ctb)
  ------------------
  |  Branch (576:12): [True: 0, False: 4.80M]
  ------------------
  577|      0|        {
  578|      0|            num_ctb = ps_proc->i4_ctb_cnt;
  579|      0|        }
  580|  4.80M|        num_ctb_tmp = num_ctb;
  581|       |
  582|  11.0M|        while(num_ctb_tmp)
  ------------------
  |  Branch (582:15): [True: 6.24M, False: 4.80M]
  ------------------
  583|  6.24M|        {
  584|  6.24M|            slice_header_t *ps_slice_hdr;
  585|  6.24M|            tile_t *ps_tile = ps_proc->ps_tile;
  586|       |
  587|       |            /* Waiting for Parsing to be done*/
  588|  6.24M|            {
  589|       |
  590|       |
  591|  6.24M|                nop_cnt = PROC_NOP_CNT;
  ------------------
  |  |  156|  6.24M|#define PROC_NOP_CNT (8 * 128)
  ------------------
  592|  6.24M|                if(ps_proc->i4_check_parse_status || ps_proc->i4_check_proc_status)
  ------------------
  |  Branch (592:20): [True: 1.29M, False: 4.94M]
  |  Branch (592:54): [True: 0, False: 4.94M]
  ------------------
  593|  1.29M|                {
  594|  5.17M|                    while(1)
  ------------------
  |  Branch (594:27): [Folded - Ignored]
  ------------------
  595|  5.17M|                    {
  596|  5.17M|                        volatile UWORD8 *pu1_buf;
  597|  5.17M|                        volatile WORD32 status;
  598|  5.17M|                        status = 1;
  599|       |                        /* Check if all dependencies for the next nCTBs are met */
  600|       |                        /* Check if the next nCTBs are parsed */
  601|  5.17M|                        if(ps_proc->i4_check_parse_status)
  ------------------
  |  Branch (601:28): [True: 5.17M, False: 8]
  ------------------
  602|  5.17M|                        {
  603|  5.17M|                            idx = (ps_proc->i4_ctb_x + nctb - 1);
  604|  5.17M|                            idx += (ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
  605|  5.17M|                            pu1_buf = (ps_codec->pu1_parse_map + idx);
  606|  5.17M|                            status = *pu1_buf;
  607|  5.17M|                        }
  608|       |
  609|  5.17M|                        if(status)
  ------------------
  |  Branch (609:28): [True: 1.29M, False: 3.87M]
  ------------------
  610|  1.29M|                            break;
  611|       |
  612|       |                        /* if dependencies are not met, then wait for few cycles.
  613|       |                         * Even after few iterations, if the dependencies are not met then yield
  614|       |                         */
  615|  3.87M|                        if(nop_cnt > 0)
  ------------------
  |  Branch (615:28): [True: 3.49M, False: 379k]
  ------------------
  616|  3.49M|                        {
  617|  3.49M|                            NOP(128);
  ------------------
  |  |   68|   451M|#define NOP(nop_cnt)    {UWORD32 nop_i; for (nop_i = 0; nop_i < nop_cnt; nop_i++) asm("nop");}
  |  |  ------------------
  |  |  |  Branch (68:57): [True: 447M, False: 3.49M]
  |  |  ------------------
  ------------------
  618|  3.49M|                            nop_cnt -= 128;
  619|  3.49M|                        }
  620|   379k|                        else
  621|   379k|                        {
  622|   379k|                            nop_cnt = PROC_NOP_CNT;
  ------------------
  |  |  156|   379k|#define PROC_NOP_CNT (8 * 128)
  ------------------
  623|   379k|                            ithread_yield();
  624|   379k|                        }
  625|  3.87M|                    }
  626|  1.29M|                }
  627|  6.24M|            }
  628|       |
  629|       |            /* Check proc map to ensure dependencies for recon are met */
  630|  6.24M|            ihevcd_proc_map_check(ps_proc, proc_type, nctb);
  631|       |
  632|  6.24M|            ihevcd_slice_hdr_update(ps_proc);
  633|  6.24M|            ps_slice_hdr = ps_proc->ps_slice_hdr;
  634|       |
  635|       |            //ihevcd_mv_prediction();
  636|       |            //ihevcd_lvl_unpack();
  637|       |            //ihevcd_inter_iq_it_recon();
  638|       |            //Following does prediction, iq, it and recon on a TU by TU basis for intra TUs
  639|       |            //ihevcd_intra_process();
  640|       |            //ihevcd_ctb_boundary_strength_islice(ps_proc, ctb_size);
  641|       |            //ihevcd_deblk_ctb(ps_proc);
  642|       |
  643|       |            /* iq,it recon of Intra TU */
  644|  6.24M|            {
  645|  6.24M|                UWORD32 *pu4_ctb_top_pu_idx, *pu4_ctb_left_pu_idx, *pu4_ctb_top_left_pu_idx;
  646|  6.24M|                WORD32 cur_ctb_idx;
  647|       |
  648|  6.24M|                ihevcd_ctb_avail_update(ps_proc);
  649|       |
  650|       |#if DEBUG_DUMP_FRAME_BUFFERS_INFO
  651|       |                au1_pic_avail_ctb_flags[ps_proc->i4_ctb_x + ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb] =
  652|       |                                ((ps_proc->u1_top_ctb_avail << 3) | (ps_proc->u1_left_ctb_avail << 2) | (ps_proc->u1_top_lt_ctb_avail << 1) | (ps_proc->u1_top_rt_ctb_avail));
  653|       |                au4_pic_ctb_slice_xy[ps_proc->i4_ctb_x + ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb] =
  654|       |                                (((UWORD16)ps_proc->i4_ctb_slice_x << 16) | ((UWORD16)ps_proc->i4_ctb_slice_y << 16));
  655|       |#endif
  656|       |
  657|       |                /*************************************************/
  658|       |                /****************   MV pred **********************/
  659|       |                /*************************************************/
  660|  6.24M|                if(PSLICE == ps_slice_hdr->i1_slice_type
  ------------------
  |  Branch (660:20): [True: 11.2k, False: 6.23M]
  ------------------
  661|  6.24M|                                || BSLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (661:36): [True: 323k, False: 5.91M]
  ------------------
  662|   325k|                {
  663|   325k|                    mv_ctxt_t s_mv_ctxt;
  664|       |
  665|   325k|                    pu4_ctb_top_pu_idx = ps_proc->pu4_pic_pu_idx_top
  666|   325k|                                    + (ps_proc->i4_ctb_x * ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   325k|#define MIN_PU_SIZE         4
  ------------------
  667|   325k|                    pu4_ctb_left_pu_idx = ps_proc->pu4_pic_pu_idx_left;
  668|   325k|                    pu4_ctb_top_left_pu_idx = &ps_proc->u4_ctb_top_left_pu_idx;
  669|       |
  670|       |                    /* Initializing s_mv_ctxt */
  671|   325k|                    if(ps_codec->i4_num_cores > MV_PRED_NUM_CORES_THRESHOLD)
  ------------------
  |  |  126|   325k|#define MV_PRED_NUM_CORES_THRESHOLD 2
  ------------------
  |  Branch (671:24): [True: 124k, False: 201k]
  ------------------
  672|   124k|                    {
  673|   124k|                        s_mv_ctxt.ps_pps = ps_proc->ps_pps;
  674|   124k|                        s_mv_ctxt.ps_sps = ps_proc->ps_sps;
  675|   124k|                        s_mv_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
  676|   124k|                        s_mv_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
  677|   124k|                        s_mv_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
  678|   124k|                        s_mv_ctxt.ps_pu = ps_proc->ps_pu;
  679|   124k|                        s_mv_ctxt.ps_pic_pu = ps_proc->ps_pic_pu;
  680|   124k|                        s_mv_ctxt.ps_tile = ps_tile;
  681|   124k|                        s_mv_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
  682|   124k|                        s_mv_ctxt.pu4_pic_pu_idx = ps_proc->pu4_pic_pu_idx;
  683|   124k|                        s_mv_ctxt.pu1_pic_pu_map = ps_proc->pu1_pic_pu_map;
  684|   124k|                        s_mv_ctxt.i4_ctb_pu_cnt = ps_proc->i4_ctb_pu_cnt;
  685|   124k|                        s_mv_ctxt.i4_ctb_start_pu_idx = ps_proc->i4_ctb_start_pu_idx;
  686|   124k|                        s_mv_ctxt.u1_top_ctb_avail = ps_proc->u1_top_ctb_avail;
  687|   124k|                        s_mv_ctxt.u1_top_rt_ctb_avail = ps_proc->u1_top_rt_ctb_avail;
  688|   124k|                        s_mv_ctxt.u1_top_lt_ctb_avail = ps_proc->u1_top_lt_ctb_avail;
  689|   124k|                        s_mv_ctxt.u1_left_ctb_avail = ps_proc->u1_left_ctb_avail;
  690|       |
  691|   124k|                        ihevcd_get_mv_ctb(&s_mv_ctxt, pu4_ctb_top_pu_idx,
  692|   124k|                                          pu4_ctb_left_pu_idx, pu4_ctb_top_left_pu_idx);
  693|   124k|                    }
  694|       |
  695|   325k|                    ihevcd_inter_pred_ctb(ps_proc);
  696|   325k|                }
  697|  5.91M|                else if(ps_codec->i4_num_cores > MV_PRED_NUM_CORES_THRESHOLD)
  ------------------
  |  |  126|  5.91M|#define MV_PRED_NUM_CORES_THRESHOLD 2
  ------------------
  |  Branch (697:25): [True: 615k, False: 5.30M]
  ------------------
  698|   615k|                {
  699|   615k|                    WORD32 next_ctb_idx, num_pu_per_ctb, ctb_start_pu_idx, pu_cnt;
  700|   615k|                    pu_t *ps_pu;
  701|   615k|                    WORD32 num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   615k|#define MIN_PU_SIZE         4
  ------------------
                                  WORD32 num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   615k|#define MIN_PU_SIZE         4
  ------------------
  702|   615k|                    UWORD8 *pu1_pic_pu_map_ctb = ps_proc->pu1_pic_pu_map +
  703|   615k|                                    (ps_proc->i4_ctb_x + ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb) * num_minpu_in_ctb;
  704|   615k|                    WORD32 row, col;
  705|   615k|                    UWORD32 *pu4_nbr_pu_idx = ps_proc->pu4_pic_pu_idx_map;
  706|   615k|                    WORD32 nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  341|   615k|#define MAX_CTB_SIZE        64
  ------------------
                                  WORD32 nbr_pu_idx_strd = MAX_CTB_SIZE / MIN_PU_SIZE + 2;
  ------------------
  |  |  357|   615k|#define MIN_PU_SIZE         4
  ------------------
  707|   615k|                    WORD32 ctb_size_in_min_pu = (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   615k|#define MIN_PU_SIZE         4
  ------------------
  708|       |
  709|       |                    /* Neighbor PU idx update inside CTB */
  710|       |                    /* 1byte per 4x4. Indicates the PU idx that 4x4 block belongs to */
  711|       |
  712|   615k|                    cur_ctb_idx = ps_proc->i4_ctb_x
  713|   615k|                                    + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  714|   615k|                    next_ctb_idx = ps_proc->i4_next_pu_ctb_cnt;
  715|   615k|                    num_pu_per_ctb = ps_proc->pu4_pic_pu_idx[next_ctb_idx]
  716|   615k|                                    - ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
  717|   615k|                    ctb_start_pu_idx = ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
  718|   615k|                    ps_pu = &ps_proc->ps_pic_pu[ctb_start_pu_idx];
  719|       |
  720|  19.3M|                    for(pu_cnt = 0; pu_cnt < num_pu_per_ctb; pu_cnt++, ps_pu++)
  ------------------
  |  Branch (720:37): [True: 18.7M, False: 615k]
  ------------------
  721|  18.7M|                    {
  722|  18.7M|                        UWORD32 cur_pu_idx;
  723|  18.7M|                        WORD32 pu_ht = (ps_pu->b4_ht + 1) << 2;
  724|  18.7M|                        WORD32 pu_wd = (ps_pu->b4_wd + 1) << 2;
  725|       |
  726|  18.7M|                        cur_pu_idx = ctb_start_pu_idx + pu_cnt;
  727|       |
  728|  60.7M|                        for(row = 0; row < pu_ht / MIN_PU_SIZE; row++)
  ------------------
  |  |  357|  60.7M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (728:38): [True: 42.0M, False: 18.7M]
  ------------------
  729|   166M|                            for(col = 0; col < pu_wd / MIN_PU_SIZE; col++)
  ------------------
  |  |  357|   166M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (729:42): [True: 124M, False: 42.0M]
  ------------------
  730|   124M|                                pu4_nbr_pu_idx[(1 + ps_pu->b4_pos_x + col)
  731|   124M|                                                + (1 + ps_pu->b4_pos_y + row)
  732|   124M|                                                * nbr_pu_idx_strd] =
  733|   124M|                                                cur_pu_idx;
  734|  18.7M|                    }
  735|       |
  736|       |                    /* Updating Top and Left pointers */
  737|   615k|                    {
  738|   615k|                        WORD32 rows_remaining = ps_sps->i2_pic_height_in_luma_samples
  739|   615k|                                        - (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size);
  740|   615k|                        WORD32 ctb_size_left = MIN(ctb_size, rows_remaining);
  ------------------
  |  |   43|   615k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 550k, False: 65.1k]
  |  |  ------------------
  ------------------
  741|       |
  742|       |                        /* Top Left */
  743|       |                        /* saving top left before updating top ptr, as updating top ptr will overwrite the top left for the next ctb */
  744|   615k|                        ps_proc->u4_ctb_top_left_pu_idx = ps_proc->pu4_pic_pu_idx_top[((ps_proc->i4_ctb_x + 1) * ctb_size / MIN_PU_SIZE) - 1];
  ------------------
  |  |  357|   615k|#define MIN_PU_SIZE         4
  ------------------
  745|  9.52M|                        for(i = 0; i < ctb_size / MIN_PU_SIZE; i++)
  ------------------
  |  |  357|  9.52M|#define MIN_PU_SIZE         4
  ------------------
  |  Branch (745:36): [True: 8.91M, False: 615k]
  ------------------
  746|  8.91M|                        {
  747|       |                            /* Left */
  748|       |                            /* Last column of au4_nbr_pu_idx */
  749|  8.91M|                            ps_proc->pu4_pic_pu_idx_left[i] =
  750|  8.91M|                                            pu4_nbr_pu_idx[(ctb_size / MIN_PU_SIZE) + (i + 1) * nbr_pu_idx_strd];
  ------------------
  |  |  357|  8.91M|#define MIN_PU_SIZE         4
  ------------------
  751|       |                            /* Top */
  752|       |                            /* Last row of au4_nbr_pu_idx */
  753|  8.91M|                            ps_proc->pu4_pic_pu_idx_top[(ps_proc->i4_ctb_x * ctb_size / MIN_PU_SIZE) + i] =
  ------------------
  |  |  357|  8.91M|#define MIN_PU_SIZE         4
  ------------------
  754|  8.91M|                                            pu4_nbr_pu_idx[(ctb_size_left / MIN_PU_SIZE) * nbr_pu_idx_strd + i + 1];
  ------------------
  |  |  357|  8.91M|#define MIN_PU_SIZE         4
  ------------------
  755|       |
  756|  8.91M|                        }
  757|       |
  758|       |                        /* Updating the CTB level PU idx (Used for collocated MV pred)*/
  759|   615k|                        {
  760|   615k|                            WORD32 ctb_row, ctb_col, index_pic_map, index_nbr_map;
  761|   615k|                            WORD32 first_pu_of_ctb;
  762|   615k|                            first_pu_of_ctb = pu4_nbr_pu_idx[1 + nbr_pu_idx_strd];
  763|   615k|                            UWORD32 cur_ctb_ht_in_min_pu = MIN(((ps_sps->i2_pic_height_in_luma_samples
  ------------------
  |  |   43|   615k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 66.3k, False: 549k]
  |  |  ------------------
  ------------------
  764|   615k|                                        - (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size)) / MIN_PU_SIZE), ctb_size_in_min_pu);
  765|   615k|                            UWORD32 cur_ctb_wd_in_min_pu = MIN(((ps_sps->i2_pic_width_in_luma_samples
  ------------------
  |  |   43|   615k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 20.2k, False: 595k]
  |  |  ------------------
  ------------------
  766|   615k|                                        - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size)) / MIN_PU_SIZE), ctb_size_in_min_pu);
  767|       |
  768|   615k|                            index_pic_map = 0 * ctb_size_in_min_pu + 0;
  769|   615k|                            index_nbr_map = (0 + 1) * nbr_pu_idx_strd + (0 + 1);
  770|       |
  771|  8.97M|                            for(ctb_row = 0; ctb_row < cur_ctb_ht_in_min_pu; ctb_row++)
  ------------------
  |  Branch (771:46): [True: 8.36M, False: 615k]
  ------------------
  772|  8.36M|                            {
  773|   133M|                                for(ctb_col = 0; ctb_col < cur_ctb_wd_in_min_pu; ctb_col++)
  ------------------
  |  Branch (773:50): [True: 125M, False: 8.36M]
  ------------------
  774|   125M|                                {
  775|   125M|                                    pu1_pic_pu_map_ctb[index_pic_map + ctb_col] = pu4_nbr_pu_idx[index_nbr_map + ctb_col]
  776|   125M|                                                    - first_pu_of_ctb;
  777|   125M|                                }
  778|  8.36M|                                index_pic_map += ctb_size_in_min_pu;
  779|  8.36M|                                index_nbr_map += nbr_pu_idx_strd;
  780|  8.36M|                            }
  781|   615k|                        }
  782|   615k|                    }
  783|   615k|                }
  784|  6.24M|            }
  785|       |
  786|  6.24M|            if(ps_proc->ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (786:16): [True: 2.71M, False: 3.53M]
  ------------------
  787|  2.71M|            {
  788|       |                /*Update the tile index buffer with tile information for the current ctb*/
  789|  2.71M|                UWORD16 *pu1_tile_idx = ps_proc->pu1_tile_idx;
  790|  2.71M|                pu1_tile_idx[(ps_proc->i4_ctb_x + (ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb))]
  791|  2.71M|                                = ps_proc->i4_cur_tile_idx;
  792|  2.71M|            }
  793|       |
  794|       |            /*************************************************/
  795|       |            /*********** BS, QP and Deblocking  **************/
  796|       |            /*************************************************/
  797|       |            /* Boundary strength call has to be after IQ IT recon since QP population needs ps_proc->i4_qp_const_inc_ctb flag */
  798|       |
  799|  6.24M|            {
  800|  6.24M|                slice_header_t *ps_slice_hdr;
  801|  6.24M|                ps_slice_hdr = ps_proc->ps_slice_hdr;
  802|       |
  803|       |
  804|       |                /* Check if deblock is disabled for the current slice or if it is disabled for the current picture
  805|       |                 * because of disable deblock api
  806|       |                 */
  807|  6.24M|                if(0 == ps_codec->i4_disable_deblk_pic)
  ------------------
  |  Branch (807:20): [True: 6.24M, False: 18.4E]
  ------------------
  808|  6.24M|                {
  809|  6.24M|                    if(ps_codec->i4_num_cores > MV_PRED_NUM_CORES_THRESHOLD)
  ------------------
  |  |  126|  6.24M|#define MV_PRED_NUM_CORES_THRESHOLD 2
  ------------------
  |  Branch (809:24): [True: 749k, False: 5.49M]
  ------------------
  810|   749k|                    {
  811|       |                        /* Boundary strength calculation is done irrespective of whether deblocking is disabled
  812|       |                         * in the slice or not, to handle deblocking slice boundaries */
  813|   749k|                        if((0 == ps_codec->i4_slice_error))
  ------------------
  |  Branch (813:28): [True: 708k, False: 41.3k]
  ------------------
  814|   708k|                        {
  815|   708k|                            ihevcd_update_ctb_tu_cnt(ps_proc);
  816|   708k|                            ps_proc->s_bs_ctxt.ps_pps = ps_proc->ps_pps;
  817|   708k|                            ps_proc->s_bs_ctxt.ps_sps = ps_proc->ps_sps;
  818|   708k|                            ps_proc->s_bs_ctxt.ps_codec = ps_proc->ps_codec;
  819|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_tu_cnt = ps_proc->i4_ctb_tu_cnt;
  820|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
  821|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
  822|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_tile_x = ps_proc->i4_ctb_tile_x;
  823|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_tile_y = ps_proc->i4_ctb_tile_y;
  824|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_slice_x = ps_proc->i4_ctb_slice_x;
  825|   708k|                            ps_proc->s_bs_ctxt.i4_ctb_slice_y = ps_proc->i4_ctb_slice_y;
  826|   708k|                            ps_proc->s_bs_ctxt.ps_tu = ps_proc->ps_tu;
  827|   708k|                            ps_proc->s_bs_ctxt.ps_pu = ps_proc->ps_pu;
  828|   708k|                            ps_proc->s_bs_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
  829|   708k|                            ps_proc->s_bs_ctxt.i4_next_pu_ctb_cnt = ps_proc->i4_next_pu_ctb_cnt;
  830|   708k|                            ps_proc->s_bs_ctxt.i4_next_tu_ctb_cnt = ps_proc->i4_next_tu_ctb_cnt;
  831|   708k|                            ps_proc->s_bs_ctxt.pu1_slice_idx = ps_proc->pu1_slice_idx;
  832|   708k|                            ps_proc->s_bs_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
  833|   708k|                            ps_proc->s_bs_ctxt.ps_tile = ps_proc->ps_tile;
  834|       |
  835|   708k|                            if(ISLICE == ps_slice_hdr->i1_slice_type)
  ------------------
  |  Branch (835:32): [True: 576k, False: 131k]
  ------------------
  836|   576k|                            {
  837|   576k|                                ihevcd_ctb_boundary_strength_islice(&ps_proc->s_bs_ctxt);
  838|   576k|                            }
  839|   131k|                            else
  840|   131k|                            {
  841|   131k|                                ihevcd_ctb_boundary_strength_pbslice(&ps_proc->s_bs_ctxt);
  842|   131k|                            }
  843|   708k|                        }
  844|       |
  845|       |                        /* Boundary strength is set to zero if deblocking is disabled for the current slice */
  846|   749k|                        if((0 != ps_slice_hdr->i1_slice_disable_deblocking_filter_flag))
  ------------------
  |  Branch (846:28): [True: 49.4k, False: 700k]
  ------------------
  847|  49.4k|                        {
  848|  49.4k|                            WORD32 bs_strd = (ps_sps->i2_pic_wd_in_ctb + 1) * (ctb_size * ctb_size / 8 / 16);
  849|       |
  850|  49.4k|                            UWORD32 *pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_proc->s_bs_ctxt.pu4_pic_vert_bs +
  851|  49.4k|                                            ps_proc->i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
  852|  49.4k|                                            ps_proc->i4_ctb_y * bs_strd);
  853|  49.4k|                            UWORD32 *pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_proc->s_bs_ctxt.pu4_pic_horz_bs +
  854|  49.4k|                                            ps_proc->i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
  855|  49.4k|                                            ps_proc->i4_ctb_y * bs_strd);
  856|       |
  857|  49.4k|                            memset(pu4_vert_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
  858|  49.4k|                            memset(pu4_horz_bs, 0, (ctb_size / 8) * (ctb_size / 4) / 8 * 2);
  859|  49.4k|                        }
  860|   749k|                    }
  861|  6.24M|                }
  862|  6.24M|            }
  863|       |
  864|       |            /* Per CTB update the following */
  865|  6.24M|            {
  866|  6.24M|                WORD32 cur_ctb_idx = ps_proc->i4_ctb_x
  867|  6.24M|                                + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  868|  6.24M|                cur_ctb_idx++;
  869|       |
  870|  6.24M|                ps_proc->pu1_pu_map += nctb * num_minpu_in_ctb;
  871|  6.24M|                ps_proc->ps_tu += ps_proc->i4_ctb_tu_cnt;
  872|  6.24M|                if((1 == ps_codec->i4_num_cores) &&
  ------------------
  |  Branch (872:20): [True: 4.94M, False: 1.29M]
  ------------------
  873|  6.24M|                                (0 == cur_ctb_idx % RESET_TU_BUF_NCTB))
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  4.94M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (873:33): [True: 0, False: 4.94M]
  ------------------
  874|      0|                {
  875|      0|                    ps_proc->ps_tu = ps_proc->ps_pic_tu;
  876|      0|                }
  877|  6.24M|                ps_proc->ps_pu += ps_proc->i4_ctb_pu_cnt;
  878|  6.24M|            }
  879|       |
  880|       |            /* Update proc map for recon*/
  881|  6.24M|            ihevcd_proc_map_update(ps_proc, proc_type, nctb);
  882|       |
  883|  6.24M|            num_ctb_tmp -= nctb;
  884|  6.24M|            ihevcd_ctb_pos_update(ps_proc, nctb);
  885|       |
  886|  6.24M|        }
  887|       |
  888|  4.80M|        if(cur_slice_idx != ps_proc->i4_cur_slice_idx)
  ------------------
  |  Branch (888:12): [True: 120, False: 4.80M]
  ------------------
  889|    120|        {
  890|    120|            ps_proc->ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((cur_slice_idx)&(MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|    120|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    120|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  891|    120|            ps_proc->i4_cur_slice_idx = cur_slice_idx;
  892|    120|        }
  893|       |        /* Restore the saved variables  */
  894|  4.80M|        num_ctb_tmp = num_ctb;
  895|  4.80M|        ps_proc->i4_ctb_x -= num_ctb;
  896|  4.80M|        ps_proc->i4_ctb_tile_x = cur_ctb_tile_x;
  897|  4.80M|        ps_proc->i4_ctb_slice_x = cur_ctb_slice_x;
  898|  4.80M|        ps_proc->i4_ctb_tile_y = cur_ctb_tile_y;
  899|  4.80M|        ps_proc->i4_ctb_slice_y = cur_ctb_slice_y;
  900|  4.80M|        ps_proc->pu1_pu_map = pu1_pu_map_cur;
  901|  4.80M|        ps_proc->ps_tu = ps_tu_cur;
  902|  4.80M|        proc_type = PROC_RECON;
  903|       |
  904|  11.0M|        while(num_ctb_tmp)
  ------------------
  |  Branch (904:15): [True: 6.24M, False: 4.80M]
  ------------------
  905|  6.24M|        {
  906|       |
  907|       |            /* Check proc map to ensure dependencies for recon are met */
  908|  6.24M|            ihevcd_proc_map_check(ps_proc, proc_type, nctb);
  909|       |
  910|  6.24M|            ihevcd_slice_hdr_update(ps_proc);
  911|       |
  912|  6.24M|            {
  913|       |
  914|  6.24M|                ihevcd_ctb_avail_update(ps_proc);
  915|       |
  916|       |                /*************************************************/
  917|       |                /**************** IQ IT RECON  *******************/
  918|       |                /*************************************************/
  919|       |
  920|  6.24M|                ihevcd_update_ctb_tu_cnt(ps_proc);
  921|       |
  922|       |                /* When scaling matrix is not to be used(scaling_list_enable_flag is zero in SPS),
  923|       |                 * default value of 16 has to be used. Since the value is same for all sizes,
  924|       |                 * same table is used for all cases.
  925|       |                 */
  926|  6.24M|                if(0 == ps_sps->i1_scaling_list_enable_flag)
  ------------------
  |  Branch (926:20): [True: 364k, False: 5.88M]
  ------------------
  927|   364k|                {
  928|   364k|                    ps_proc->api2_dequant_intra_matrix[0] =
  929|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  930|   364k|                    ps_proc->api2_dequant_intra_matrix[1] =
  931|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  932|   364k|                    ps_proc->api2_dequant_intra_matrix[2] =
  933|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  934|   364k|                    ps_proc->api2_dequant_intra_matrix[3] =
  935|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  936|       |
  937|   364k|                    ps_proc->api2_dequant_inter_matrix[0] =
  938|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  939|   364k|                    ps_proc->api2_dequant_inter_matrix[1] =
  940|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  941|   364k|                    ps_proc->api2_dequant_inter_matrix[2] =
  942|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  943|   364k|                    ps_proc->api2_dequant_inter_matrix[3] =
  944|   364k|                                    (WORD16 *)gi2_flat_scale_mat_32x32;
  945|   364k|                }
  946|  5.88M|                else
  947|  5.88M|                {
  948|  5.88M|                    if(0 == ps_sps->i1_sps_scaling_list_data_present_flag)
  ------------------
  |  Branch (948:24): [True: 5.77M, False: 103k]
  ------------------
  949|  5.77M|                    {
  950|  5.77M|                        ps_proc->api2_dequant_intra_matrix[0] =
  951|  5.77M|                                        (WORD16 *)gi2_flat_scale_mat_32x32;
  952|  5.77M|                        ps_proc->api2_dequant_intra_matrix[1] =
  953|  5.77M|                                        (WORD16 *)gi2_intra_default_scale_mat_8x8;
  954|  5.77M|                        ps_proc->api2_dequant_intra_matrix[2] =
  955|  5.77M|                                        (WORD16 *)gi2_intra_default_scale_mat_16x16;
  956|  5.77M|                        ps_proc->api2_dequant_intra_matrix[3] =
  957|  5.77M|                                        (WORD16 *)gi2_intra_default_scale_mat_32x32;
  958|       |
  959|  5.77M|                        ps_proc->api2_dequant_inter_matrix[0] =
  960|  5.77M|                                        (WORD16 *)gi2_flat_scale_mat_32x32;
  961|  5.77M|                        ps_proc->api2_dequant_inter_matrix[1] =
  962|  5.77M|                                        (WORD16 *)gi2_inter_default_scale_mat_8x8;
  963|  5.77M|                        ps_proc->api2_dequant_inter_matrix[2] =
  964|  5.77M|                                        (WORD16 *)gi2_inter_default_scale_mat_16x16;
  965|  5.77M|                        ps_proc->api2_dequant_inter_matrix[3] =
  966|  5.77M|                                        (WORD16 *)gi2_inter_default_scale_mat_32x32;
  967|  5.77M|                    }
  968|       |                    /*TODO: Add support for custom scaling matrices */
  969|  5.88M|                }
  970|       |
  971|       |
  972|       |                /* CTB Level pointers */
  973|  6.24M|                ps_proc->pu1_cur_ctb_luma = ps_proc->pu1_cur_pic_luma
  974|  6.24M|                                + (ps_proc->i4_ctb_x * ctb_size
  975|  6.24M|                                + ps_proc->i4_ctb_y * ctb_size
  976|  6.24M|                                * ps_codec->i4_strd);
  977|  6.24M|                ps_proc->pu1_cur_ctb_chroma = ps_proc->pu1_cur_pic_chroma
  978|  6.24M|                                + ps_proc->i4_ctb_x * ctb_size
  979|  6.24M|                                + (ps_proc->i4_ctb_y * ctb_size * ps_codec->i4_strd / 2);
  980|       |
  981|  6.24M|                ihevcd_iquant_itrans_recon_ctb(ps_proc);
  982|  6.24M|            }
  983|       |
  984|       |            /* Per CTB update the following */
  985|  6.24M|            {
  986|  6.24M|                WORD32 cur_ctb_idx = ps_proc->i4_ctb_x
  987|  6.24M|                                + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
  988|  6.24M|                cur_ctb_idx++;
  989|       |
  990|  6.24M|                ps_proc->pu1_pu_map += nctb * num_minpu_in_ctb;
  991|  6.24M|                ps_proc->ps_tu += ps_proc->i4_ctb_tu_cnt;
  992|  6.24M|                if((1 == ps_codec->i4_num_cores) &&
  ------------------
  |  Branch (992:20): [True: 4.94M, False: 1.29M]
  ------------------
  993|  6.24M|                                (0 == cur_ctb_idx % RESET_TU_BUF_NCTB))
  ------------------
  |  |  179|  4.94M|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  4.94M|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  4.94M|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  4.94M|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  4.94M|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (993:33): [True: 0, False: 4.94M]
  ------------------
  994|      0|                {
  995|      0|                    ps_proc->ps_tu = ps_proc->ps_pic_tu;
  996|      0|                }
  997|  6.24M|                ps_proc->ps_pu += ps_proc->i4_ctb_pu_cnt;
  998|  6.24M|            }
  999|       |
 1000|       |
 1001|       |            /* Update proc map for recon*/
 1002|  6.24M|            ihevcd_proc_map_update(ps_proc, proc_type, nctb);
 1003|       |
 1004|  6.24M|            num_ctb_tmp -= nctb;
 1005|  6.24M|            ihevcd_ctb_pos_update(ps_proc, nctb);
 1006|  6.24M|        }
 1007|       |
 1008|  4.80M|        if(cur_slice_idx != ps_proc->i4_cur_slice_idx)
  ------------------
  |  Branch (1008:12): [True: 119, False: 4.80M]
  ------------------
 1009|    119|        {
 1010|    119|            ps_proc->ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((cur_slice_idx)&(MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|    119|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    119|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 1011|    119|            ps_proc->i4_cur_slice_idx = cur_slice_idx;
 1012|    119|        }
 1013|       |        /* Restore the saved variables  */
 1014|  4.80M|        num_ctb_tmp = num_ctb;
 1015|  4.80M|        ps_proc->i4_ctb_x -= num_ctb;
 1016|  4.80M|        ps_proc->i4_ctb_tile_x = cur_ctb_tile_x;
 1017|  4.80M|        ps_proc->i4_ctb_slice_x = cur_ctb_slice_x;
 1018|  4.80M|        ps_proc->i4_ctb_tile_y = cur_ctb_tile_y;
 1019|  4.80M|        ps_proc->i4_ctb_slice_y = cur_ctb_slice_y;
 1020|  4.80M|        pu1_pu_map_nxt = ps_proc->pu1_pu_map;
 1021|  4.80M|        ps_tu_nxt = ps_proc->ps_tu;
 1022|  4.80M|        ps_proc->pu1_pu_map = pu1_pu_map_cur;
 1023|  4.80M|        ps_proc->ps_tu = ps_tu_cur;
 1024|  4.80M|        proc_type = PROC_DEBLK;
 1025|       |
 1026|  11.0M|        while(num_ctb_tmp)
  ------------------
  |  Branch (1026:15): [True: 6.23M, False: 4.80M]
  ------------------
 1027|  6.23M|        {
 1028|       |
 1029|       |
 1030|       |            /* Check proc map to ensure dependencies for deblk are met */
 1031|  6.23M|            ihevcd_proc_map_check(ps_proc, proc_type, nctb);
 1032|       |
 1033|  6.23M|            ihevcd_slice_hdr_update(ps_proc);
 1034|       |
 1035|       |
 1036|  6.23M|            if(((0 == FRAME_ILF_PAD || ps_codec->i4_num_cores != 1)) &&
  ------------------
  |  |  168|  12.4M|#define FRAME_ILF_PAD 0
  ------------------
  |  Branch (1036:18): [Folded - Ignored]
  |  Branch (1036:40): [True: 0, False: 0]
  ------------------
 1037|  6.23M|               (0 == ps_codec->i4_disable_deblk_pic))
  ------------------
  |  Branch (1037:16): [True: 6.22M, False: 18.4E]
  ------------------
 1038|  6.22M|            {
 1039|  6.22M|                WORD32 i4_is_last_ctb_x = 0;
 1040|  6.22M|                WORD32 i4_is_last_ctb_y = 0;
 1041|       |
 1042|       |
 1043|       |                /* Deblocking is done irrespective of whether it is disabled in the slice or not,
 1044|       |                 * to handle deblocking the slice boundaries */
 1045|  6.22M|                {
 1046|  6.22M|                    ps_proc->s_deblk_ctxt.ps_pps = ps_proc->ps_pps;
 1047|  6.22M|                    ps_proc->s_deblk_ctxt.ps_sps = ps_proc->ps_sps;
 1048|  6.22M|                    ps_proc->s_deblk_ctxt.ps_codec = ps_proc->ps_codec;
 1049|  6.22M|                    ps_proc->s_deblk_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
 1050|  6.22M|                    ps_proc->s_deblk_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
 1051|  6.22M|                    ps_proc->s_deblk_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
 1052|  6.22M|                    ps_proc->s_deblk_ctxt.pu1_slice_idx = ps_proc->pu1_slice_idx;
 1053|  6.22M|                    ps_proc->s_deblk_ctxt.is_chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
 1054|       |
 1055|       |                    /* Populating Current CTB's no_loop_filter flags */
 1056|  6.22M|                    {
 1057|  6.22M|                        WORD32 row;
 1058|  6.22M|                        WORD32 log2_ctb_size = ps_sps->i1_log2_ctb_size;
 1059|       |
 1060|       |                        /* Loop filter strd in units of num bits */
 1061|  6.22M|                        WORD32 loop_filter_strd = ((ps_sps->i2_pic_width_in_luma_samples + 63) >> 6) << 3;
 1062|       |                        /* Bit position is the current 8x8 bit offset wrt pic_no_loop_filter
 1063|       |                         * bit_pos has to be a WOR32 so that when it is negative, the downshift still retains it to be a negative value */
 1064|  6.22M|                        WORD32 bit_pos = ((ps_proc->i4_ctb_y << (log2_ctb_size - 3)) - 1) * loop_filter_strd + (ps_proc->i4_ctb_x << (log2_ctb_size - 3)) - 1;
 1065|       |
 1066|  32.2M|                        for(row = 0; row < (ctb_size >> 3) + 1; row++)
  ------------------
  |  Branch (1066:38): [True: 26.0M, False: 6.22M]
  ------------------
 1067|  26.0M|                        {
 1068|       |                            /* Go to the corresponding byte - read 32 bits and downshift */
 1069|  26.0M|                            ps_proc->s_deblk_ctxt.au2_ctb_no_loop_filter_flag[row] = (*(UWORD32 *)(ps_proc->pu1_pic_no_loop_filter_flag + (bit_pos >> 3))) >> (bit_pos & 7);
 1070|  26.0M|                            bit_pos += loop_filter_strd;
 1071|  26.0M|                        }
 1072|  6.22M|                    }
 1073|       |
 1074|  6.22M|                    ihevcd_deblk_ctb(&ps_proc->s_deblk_ctxt, i4_is_last_ctb_x, i4_is_last_ctb_y);
 1075|       |
 1076|       |                    /* If the last CTB in the row was a complete CTB then deblocking has to be called from remaining pixels, since deblocking
 1077|       |                     * is applied on a shifted CTB structure
 1078|       |                     */
 1079|  6.22M|                    if(ps_proc->i4_ctb_x == ps_sps->i2_pic_wd_in_ctb - 1)
  ------------------
  |  Branch (1079:24): [True: 126k, False: 6.09M]
  ------------------
 1080|   126k|                    {
 1081|   126k|                        WORD32 i4_is_last_ctb_x = 1;
 1082|   126k|                        WORD32 i4_is_last_ctb_y = 0;
 1083|       |
 1084|   126k|                        WORD32 last_x_pos;
 1085|   126k|                        last_x_pos = (ps_sps->i2_pic_wd_in_ctb << ps_sps->i1_log2_ctb_size);
 1086|   126k|                        if(last_x_pos  ==  ps_sps->i2_pic_width_in_luma_samples)
  ------------------
  |  Branch (1086:28): [True: 10.1k, False: 116k]
  ------------------
 1087|  10.1k|                        {
 1088|  10.1k|                            ihevcd_deblk_ctb(&ps_proc->s_deblk_ctxt, i4_is_last_ctb_x, i4_is_last_ctb_y);
 1089|  10.1k|                        }
 1090|   126k|                    }
 1091|       |
 1092|       |
 1093|       |                    /* If the last CTB in the column was a complete CTB then deblocking has to be called from remaining pixels, since deblocking
 1094|       |                     * is applied on a shifted CTB structure
 1095|       |                     */
 1096|  6.22M|                    if(ps_proc->i4_ctb_y == ps_sps->i2_pic_ht_in_ctb - 1)
  ------------------
  |  Branch (1096:24): [True: 166k, False: 6.05M]
  ------------------
 1097|   166k|                    {
 1098|   166k|                        WORD32 i4_is_last_ctb_x = 0;
 1099|   166k|                        WORD32 i4_is_last_ctb_y = 1;
 1100|   166k|                        WORD32 last_y_pos;
 1101|   166k|                        last_y_pos = (ps_sps->i2_pic_ht_in_ctb << ps_sps->i1_log2_ctb_size);
 1102|   166k|                        if(last_y_pos == ps_sps->i2_pic_height_in_luma_samples)
  ------------------
  |  Branch (1102:28): [True: 8.64k, False: 157k]
  ------------------
 1103|  8.64k|                        {
 1104|  8.64k|                            ihevcd_deblk_ctb(&ps_proc->s_deblk_ctxt, i4_is_last_ctb_x, i4_is_last_ctb_y);
 1105|  8.64k|                        }
 1106|   166k|                    }
 1107|  6.22M|                }
 1108|  6.22M|            }
 1109|       |
 1110|       |            /* Update proc map for deblk*/
 1111|  6.23M|            ihevcd_proc_map_update(ps_proc, proc_type, nctb);
 1112|       |
 1113|  6.23M|            num_ctb_tmp -= nctb;
 1114|  6.23M|            ihevcd_ctb_pos_update(ps_proc, nctb);
 1115|  6.23M|        }
 1116|       |
 1117|  4.80M|        if(cur_slice_idx != ps_proc->i4_cur_slice_idx)
  ------------------
  |  Branch (1117:12): [True: 119, False: 4.80M]
  ------------------
 1118|    119|        {
 1119|    119|            ps_proc->ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((cur_slice_idx)&(MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|    119|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|    119|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 1120|    119|            ps_proc->i4_cur_slice_idx = cur_slice_idx;
 1121|    119|        }
 1122|       |        /* Restore the saved variables  */
 1123|  4.80M|        num_ctb_tmp = num_ctb;
 1124|  4.80M|        ps_proc->i4_ctb_x -= num_ctb;
 1125|  4.80M|        ps_proc->i4_ctb_tile_x = cur_ctb_tile_x;
 1126|  4.80M|        ps_proc->i4_ctb_tile_y = cur_ctb_tile_y;
 1127|  4.80M|        ps_proc->pu1_pu_map = pu1_pu_map_cur;
 1128|  4.80M|        ps_proc->ps_tu = ps_tu_cur;
 1129|  4.80M|        nxt_ctb_slice_y = ps_proc->i4_ctb_slice_y;
 1130|  4.80M|        nxt_ctb_slice_x = ps_proc->i4_ctb_slice_x;
 1131|  4.80M|        ps_proc->i4_ctb_slice_y = cur_ctb_slice_y;
 1132|  4.80M|        ps_proc->i4_ctb_slice_x = cur_ctb_slice_x;
 1133|  4.80M|        proc_type = PROC_SAO;
 1134|       |
 1135|  11.0M|        while(num_ctb_tmp)
  ------------------
  |  Branch (1135:15): [True: 6.24M, False: 4.80M]
  ------------------
 1136|  6.24M|        {
 1137|       |
 1138|       |
 1139|       |            /* Check proc map to ensure dependencies for SAO are met */
 1140|  6.24M|            ihevcd_proc_map_check(ps_proc, proc_type, nctb);
 1141|       |
 1142|  6.24M|            ihevcd_slice_hdr_update(ps_proc);
 1143|       |
 1144|       |
 1145|  6.24M|            if(0 == FRAME_ILF_PAD || ps_codec->i4_num_cores != 1)
  ------------------
  |  |  168|  12.4M|#define FRAME_ILF_PAD 0
  ------------------
  |  Branch (1145:16): [Folded - Ignored]
  |  Branch (1145:38): [True: 0, False: 0]
  ------------------
 1146|  6.24M|            {
 1147|       |                /* SAO is done even when it is disabled in the current slice, because
 1148|       |                 * it is performed on a shifted CTB and the neighbor CTBs can belong
 1149|       |                 * to different slices with SAO enabled */
 1150|  6.24M|                if(0 == ps_codec->i4_disable_sao_pic)
  ------------------
  |  Branch (1150:20): [True: 6.24M, False: 18.4E]
  ------------------
 1151|  6.24M|                {
 1152|  6.24M|                    ps_proc->s_sao_ctxt.ps_pps = ps_proc->ps_pps;
 1153|  6.24M|                    ps_proc->s_sao_ctxt.ps_sps = ps_proc->ps_sps;
 1154|  6.24M|                    ps_proc->s_sao_ctxt.ps_tile = ps_proc->ps_tile;
 1155|  6.24M|                    ps_proc->s_sao_ctxt.ps_codec = ps_proc->ps_codec;
 1156|  6.24M|                    ps_proc->s_sao_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
 1157|  6.24M|                    ps_proc->s_sao_ctxt.i4_cur_slice_idx = ps_proc->i4_cur_slice_idx;
 1158|       |
 1159|       |
 1160|  6.24M|#if SAO_PROCESS_SHIFT_CTB
 1161|  6.24M|                    ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
 1162|  6.24M|                    ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
 1163|  6.24M|                    ps_proc->s_sao_ctxt.is_chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
 1164|       |
 1165|  6.24M|                    ihevcd_sao_shift_ctb(&ps_proc->s_sao_ctxt);
 1166|       |#else
 1167|       |                    if(ps_proc->i4_ctb_x > 1 && ps_proc->i4_ctb_y > 0)
 1168|       |                    {
 1169|       |                        ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x - 2;
 1170|       |                        ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y - 1;
 1171|       |
 1172|       |                        ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
 1173|       |                    }
 1174|       |
 1175|       |                    if(ps_sps->i2_pic_wd_in_ctb - 1 == ps_proc->i4_ctb_x && ps_proc->i4_ctb_y > 0)
 1176|       |                    {
 1177|       |                        ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x - 1;
 1178|       |                        ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y - 1;
 1179|       |
 1180|       |                        ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
 1181|       |
 1182|       |                        ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
 1183|       |                        ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y - 1;
 1184|       |
 1185|       |                        ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
 1186|       |
 1187|       |                        if(ps_sps->i2_pic_ht_in_ctb - 1 == ps_proc->i4_ctb_y)
 1188|       |                        {
 1189|       |                            WORD32 i4_ctb_x;
 1190|       |                            ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
 1191|       |                            for(i4_ctb_x = 0; i4_ctb_x < ps_sps->i2_pic_wd_in_ctb; i4_ctb_x++)
 1192|       |                            {
 1193|       |                                ps_proc->s_sao_ctxt.i4_ctb_x = i4_ctb_x;
 1194|       |                                ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
 1195|       |                            }
 1196|       |                        }
 1197|       |                    }
 1198|       |#endif
 1199|  6.24M|                }
 1200|       |
 1201|       |
 1202|       |                /* Call padding if required */
 1203|  6.24M|                {
 1204|  6.24M|#if SAO_PROCESS_SHIFT_CTB
 1205|       |
 1206|  6.24M|                    if(0 == ps_proc->i4_ctb_x)
  ------------------
  |  Branch (1206:24): [True: 126k, False: 6.11M]
  ------------------
 1207|   126k|                    {
 1208|   126k|                        WORD32 pad_ht_luma;
 1209|   126k|                        WORD32 pad_ht_chroma;
 1210|       |
 1211|   126k|                        ps_proc->pu1_cur_ctb_luma = ps_proc->pu1_cur_pic_luma
 1212|   126k|                                        + (ps_proc->i4_ctb_x * ctb_size
 1213|   126k|                                        + ps_proc->i4_ctb_y * ctb_size
 1214|   126k|                                        * ps_codec->i4_strd);
 1215|   126k|                        ps_proc->pu1_cur_ctb_chroma = ps_proc->pu1_cur_pic_chroma
 1216|   126k|                                        + ps_proc->i4_ctb_x * ctb_size
 1217|   126k|                                        + (ps_proc->i4_ctb_y * ctb_size * ps_codec->i4_strd / 2);
 1218|       |
 1219|   126k|                        pad_ht_luma = ctb_size;
 1220|   126k|                        pad_ht_luma += (ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y ? 8 : 0;
  ------------------
  |  Branch (1220:40): [True: 5.35k, False: 121k]
  ------------------
 1221|   126k|                        pad_ht_chroma = ctb_size / 2;
 1222|       |                        /* Pad left after 1st CTB is processed */
 1223|   126k|                        ps_codec->s_func_selector.ihevc_pad_left_luma_fptr(ps_proc->pu1_cur_ctb_luma - 8 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_LEFT);
  ------------------
  |  |   82|   126k|#define PAD_LEFT    80
  ------------------
 1224|   126k|                        ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_ctb_chroma - 16 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_LEFT);
  ------------------
  |  |   82|   126k|#define PAD_LEFT    80
  ------------------
 1225|   126k|                    }
 1226|       |
 1227|  6.24M|                    if((ps_sps->i2_pic_wd_in_ctb - 1) == ps_proc->i4_ctb_x)
  ------------------
  |  Branch (1227:24): [True: 126k, False: 6.11M]
  ------------------
 1228|   126k|                    {
 1229|   126k|                        WORD32 pad_ht_luma;
 1230|   126k|                        WORD32 pad_ht_chroma;
 1231|   126k|                        WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size);
 1232|       |
 1233|   126k|                        ps_proc->pu1_cur_ctb_luma = ps_proc->pu1_cur_pic_luma
 1234|   126k|                                        + (ps_proc->i4_ctb_x * ctb_size
 1235|   126k|                                        + ps_proc->i4_ctb_y * ctb_size
 1236|   126k|                                        * ps_codec->i4_strd);
 1237|   126k|                        ps_proc->pu1_cur_ctb_chroma = ps_proc->pu1_cur_pic_chroma
 1238|   126k|                                        + ps_proc->i4_ctb_x * ctb_size
 1239|   126k|                                        + (ps_proc->i4_ctb_y * ctb_size * ps_codec->i4_strd / 2);
 1240|       |
 1241|   126k|                        pad_ht_luma = ctb_size;
 1242|   126k|                        pad_ht_chroma = ctb_size / 2;
 1243|   126k|                        if((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y)
  ------------------
  |  Branch (1243:28): [True: 5.35k, False: 121k]
  ------------------
 1244|  5.35k|                        {
 1245|  5.35k|                            pad_ht_luma += 8;
 1246|  5.35k|                            pad_ht_chroma += 16;
 1247|  5.35k|                            ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_pic_chroma + (ps_sps->i2_pic_height_in_luma_samples / 2 - 16) * ps_codec->i4_strd,
 1248|  5.35k|                                                                                 ps_codec->i4_strd, 16, PAD_LEFT);
  ------------------
  |  |   82|  5.35k|#define PAD_LEFT    80
  ------------------
 1249|  5.35k|                        }
 1250|       |                        /* Pad right after last CTB in the current row is processed */
 1251|   126k|                        ps_codec->s_func_selector.ihevc_pad_right_luma_fptr(ps_proc->pu1_cur_ctb_luma + cols_remaining - 8 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_RIGHT);
  ------------------
  |  |   87|   126k|#define PAD_RIGHT   80
  ------------------
 1252|   126k|                        ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr(ps_proc->pu1_cur_ctb_chroma + cols_remaining - 16 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_RIGHT);
  ------------------
  |  |   87|   126k|#define PAD_RIGHT   80
  ------------------
 1253|       |
 1254|   126k|                        if((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y)
  ------------------
  |  Branch (1254:28): [True: 5.35k, False: 121k]
  ------------------
 1255|  5.35k|                        {
 1256|  5.35k|                            UWORD8 *pu1_buf;
 1257|       |                            /* Since SAO is shifted by 8x8, chroma padding can not be done till second row is processed */
 1258|       |                            /* Hence moving top padding to to end of frame, Moving it to second row also results in problems when there is only one row */
 1259|       |                            /* Pad top after padding left and right for current rows after processing 1st CTB row */
 1260|  5.35k|                            ihevc_pad_top(ps_proc->pu1_cur_pic_luma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP);
  ------------------
  |  |   82|  5.35k|#define PAD_LEFT    80
  ------------------
                                          ihevc_pad_top(ps_proc->pu1_cur_pic_luma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP);
  ------------------
  |  |   91|  5.35k|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|  5.35k|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|  5.35k|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
                                          ihevc_pad_top(ps_proc->pu1_cur_pic_luma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP);
  ------------------
  |  |   72|  5.35k|#define PAD_TOP     80
  ------------------
 1261|  5.35k|                            ihevc_pad_top(ps_proc->pu1_cur_pic_chroma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP / 2);
  ------------------
  |  |   82|  5.35k|#define PAD_LEFT    80
  ------------------
                                          ihevc_pad_top(ps_proc->pu1_cur_pic_chroma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP / 2);
  ------------------
  |  |   91|  5.35k|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|  5.35k|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|  5.35k|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
                                          ihevc_pad_top(ps_proc->pu1_cur_pic_chroma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP / 2);
  ------------------
  |  |   72|  5.35k|#define PAD_TOP     80
  ------------------
 1262|       |
 1263|  5.35k|                            pu1_buf = ps_proc->pu1_cur_pic_luma + ps_codec->i4_strd * ps_sps->i2_pic_height_in_luma_samples - PAD_LEFT;
  ------------------
  |  |   82|  5.35k|#define PAD_LEFT    80
  ------------------
 1264|       |                            /* Pad top after padding left and right for current rows after processing 1st CTB row */
 1265|  5.35k|                            ihevc_pad_bottom(pu1_buf, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_BOT);
  ------------------
  |  |   91|  5.35k|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|  5.35k|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|  5.35k|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
                                          ihevc_pad_bottom(pu1_buf, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_BOT);
  ------------------
  |  |   77|  5.35k|#define PAD_BOT     80
  ------------------
 1266|       |
 1267|  5.35k|                            pu1_buf = ps_proc->pu1_cur_pic_chroma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples / 2) - PAD_LEFT;
  ------------------
  |  |   82|  5.35k|#define PAD_LEFT    80
  ------------------
 1268|  5.35k|                            ihevc_pad_bottom(pu1_buf, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_BOT / 2);
  ------------------
  |  |   91|  5.35k|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|  5.35k|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|  5.35k|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
                                          ihevc_pad_bottom(pu1_buf, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_BOT / 2);
  ------------------
  |  |   77|  5.35k|#define PAD_BOT     80
  ------------------
 1269|  5.35k|                        }
 1270|   126k|                    }
 1271|       |#else
 1272|       |                    if(ps_proc->i4_ctb_y > 1)
 1273|       |                    {
 1274|       |                        if(0 == ps_proc->i4_ctb_x)
 1275|       |                        {
 1276|       |                            WORD32 pad_ht_luma;
 1277|       |                            WORD32 pad_ht_chroma;
 1278|       |
 1279|       |                            pad_ht_luma = ctb_size;
 1280|       |                            pad_ht_chroma = ctb_size / 2;
 1281|       |                            /* Pad left after 1st CTB is processed */
 1282|       |                            ps_codec->s_func_selector.ihevc_pad_left_luma_fptr(ps_proc->pu1_cur_ctb_luma - 2 * ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_LEFT);
 1283|       |                            ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_ctb_chroma - ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_LEFT);
 1284|       |                        }
 1285|       |                        else if((ps_sps->i2_pic_wd_in_ctb - 1) == ps_proc->i4_ctb_x)
 1286|       |                        {
 1287|       |                            WORD32 pad_ht_luma;
 1288|       |                            WORD32 pad_ht_chroma;
 1289|       |                            WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size);
 1290|       |
 1291|       |                            pad_ht_luma = ((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y) ? 3 * ctb_size : ctb_size;
 1292|       |                            pad_ht_chroma = ((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y) ? 3 * ctb_size / 2 : ctb_size / 2;
 1293|       |                            /* Pad right after last CTB in the current row is processed */
 1294|       |                            ps_codec->s_func_selector.ihevc_pad_right_luma_fptr(ps_proc->pu1_cur_ctb_luma + cols_remaining - 2 * ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_RIGHT);
 1295|       |                            ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr(ps_proc->pu1_cur_ctb_chroma + cols_remaining - ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_RIGHT);
 1296|       |
 1297|       |                            if((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y)
 1298|       |                            {
 1299|       |                                UWORD8 *pu1_buf;
 1300|       |                                WORD32 pad_ht_luma;
 1301|       |                                WORD32 pad_ht_chroma;
 1302|       |
 1303|       |                                pad_ht_luma = 2 * ctb_size;
 1304|       |                                pad_ht_chroma = ctb_size;
 1305|       |
 1306|       |                                ps_codec->s_func_selector.ihevc_pad_left_luma_fptr(ps_proc->pu1_cur_pic_luma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples - 2 * ctb_size),
 1307|       |                                                                                   ps_codec->i4_strd, pad_ht_luma, PAD_LEFT);
 1308|       |                                ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_pic_chroma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples / 2 - ctb_size),
 1309|       |                                                                                     ps_codec->i4_strd, pad_ht_chroma, PAD_LEFT);
 1310|       |
 1311|       |                                /* Since SAO is shifted by 8x8, chroma padding can not be done till second row is processed */
 1312|       |                                /* Hence moving top padding to to end of frame, Moving it to second row also results in problems when there is only one row */
 1313|       |                                /* Pad top after padding left and right for current rows after processing 1st CTB row */
 1314|       |                                ihevc_pad_top(ps_proc->pu1_cur_pic_luma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP);
 1315|       |                                ihevc_pad_top(ps_proc->pu1_cur_pic_chroma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP / 2);
 1316|       |
 1317|       |                                pu1_buf = ps_proc->pu1_cur_pic_luma + ps_codec->i4_strd * ps_sps->i2_pic_height_in_luma_samples - PAD_LEFT;
 1318|       |                                /* Pad top after padding left and right for current rows after processing 1st CTB row */
 1319|       |                                ihevc_pad_bottom(pu1_buf, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_BOT);
 1320|       |
 1321|       |                                pu1_buf = ps_proc->pu1_cur_pic_chroma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples / 2) - PAD_LEFT;
 1322|       |                                ihevc_pad_bottom(pu1_buf, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_BOT / 2);
 1323|       |                            }
 1324|       |                        }
 1325|       |                    }
 1326|       |#endif
 1327|  6.24M|                }
 1328|  6.24M|            }
 1329|       |
 1330|       |
 1331|       |            /* Update proc map for SAO*/
 1332|  6.24M|            ihevcd_proc_map_update(ps_proc, proc_type, nctb);
 1333|       |            /* Update proc map for Completion of CTB*/
 1334|  6.24M|            ihevcd_proc_map_update(ps_proc, PROC_ALL, nctb);
 1335|  6.24M|            {
 1336|  6.24M|                tile_t *ps_tile;
 1337|       |
 1338|  6.24M|                ps_tile = ps_proc->ps_tile;
 1339|  6.24M|                num_ctb_tmp -= nctb;
 1340|       |
 1341|  6.24M|                ps_proc->i4_ctb_tile_x += nctb;
 1342|  6.24M|                ps_proc->i4_ctb_x += nctb;
 1343|       |
 1344|  6.24M|                ps_proc->i4_ctb_slice_x += nctb;
 1345|       |
 1346|       |
 1347|       |                /* Update tile counters */
 1348|  6.24M|                if(ps_proc->i4_ctb_tile_x >= (ps_tile->u2_wd))
  ------------------
  |  Branch (1348:20): [True: 134k, False: 6.10M]
  ------------------
 1349|   134k|                {
 1350|       |                    /*End of tile row*/
 1351|   134k|                    ps_proc->i4_ctb_tile_x = 0;
 1352|   134k|                    ps_proc->i4_ctb_x = ps_tile->u1_pos_x;
 1353|       |
 1354|   134k|                    ps_proc->i4_ctb_tile_y++;
 1355|   134k|                    ps_proc->i4_ctb_y++;
 1356|   134k|                    if(ps_proc->i4_ctb_tile_y == ps_tile->u2_ht)
  ------------------
  |  Branch (1356:24): [True: 8.45k, False: 126k]
  ------------------
 1357|  8.45k|                    {
 1358|       |                        /* Reached End of Tile */
 1359|  8.45k|                        ps_proc->i4_ctb_tile_y = 0;
 1360|  8.45k|                        ps_proc->i4_ctb_tile_x = 0;
 1361|  8.45k|                        ps_proc->ps_tile++;
 1362|       |                        //End of picture
 1363|  8.45k|                        if(!((ps_tile->u2_ht + ps_tile->u1_pos_y  ==  ps_sps->i2_pic_ht_in_ctb) && (ps_tile->u2_wd + ps_tile->u1_pos_x  ==  ps_sps->i2_pic_wd_in_ctb)))
  ------------------
  |  Branch (1363:30): [True: 5.89k, False: 2.56k]
  |  Branch (1363:100): [True: 5.35k, False: 536]
  ------------------
 1364|  3.10k|                        {
 1365|  3.10k|                            ps_tile = ps_proc->ps_tile;
 1366|  3.10k|                            ps_proc->i4_ctb_x = ps_tile->u1_pos_x;
 1367|  3.10k|                            ps_proc->i4_ctb_y = ps_tile->u1_pos_y;
 1368|       |
 1369|  3.10k|                        }
 1370|  8.45k|                    }
 1371|   134k|                }
 1372|  6.24M|            }
 1373|  6.24M|        }
 1374|       |
 1375|  4.80M|        ps_proc->i4_ctb_cnt -= num_ctb;
 1376|  4.80M|    }
 1377|   134k|    return ret;
 1378|   134k|}
ihevcd_init_proc_ctxt:
 1381|   135k|{
 1382|   135k|    codec_t *ps_codec;
 1383|   135k|    slice_header_t *ps_slice_hdr;
 1384|   135k|    pps_t *ps_pps;
 1385|   135k|    sps_t *ps_sps;
 1386|   135k|    tile_t *ps_tile, *ps_tile_prev;
 1387|   135k|    WORD32 tile_idx;
 1388|   135k|    WORD32 ctb_size;
 1389|   135k|    WORD32 num_minpu_in_ctb;
 1390|   135k|    WORD32 num_ctb_in_row;
 1391|   135k|    WORD32 ctb_addr;
 1392|   135k|    WORD32 i4_wd_in_ctb;
 1393|   135k|    WORD32 tile_start_ctb_idx;
 1394|   135k|    WORD32 slice_start_ctb_idx;
 1395|   135k|    WORD32 check_tile_wd;
 1396|   135k|    WORD32 continuous_tiles = 0; //Refers to tiles that are continuous, within a slice, horizontally
 1397|       |
 1398|   135k|    ps_codec = ps_proc->ps_codec;
 1399|       |
 1400|   135k|    ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((ps_proc->i4_cur_slice_idx) & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|   135k|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|   135k|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
 1401|   135k|    ps_proc->ps_slice_hdr = ps_slice_hdr;
 1402|   135k|    ps_proc->ps_pps = ps_codec->ps_pps_base + ps_slice_hdr->i1_pps_id;
 1403|   135k|    ps_pps = ps_proc->ps_pps;
 1404|   135k|    ps_proc->ps_sps = ps_codec->ps_sps_base + ps_pps->i1_sps_id;
 1405|   135k|    ps_sps = ps_proc->ps_sps;
 1406|   135k|    ps_proc->i4_init_done = 1;
 1407|   135k|    ctb_size = 1 << ps_sps->i1_log2_ctb_size;
 1408|   135k|    num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   135k|#define MIN_PU_SIZE         4
  ------------------
                  num_minpu_in_ctb = (ctb_size / MIN_PU_SIZE) * (ctb_size / MIN_PU_SIZE);
  ------------------
  |  |  357|   135k|#define MIN_PU_SIZE         4
  ------------------
 1409|   135k|    num_ctb_in_row = ps_sps->i2_pic_wd_in_ctb;
 1410|       |
 1411|   135k|    ps_proc->s_sao_ctxt.pu1_slice_idx = ps_proc->pu1_slice_idx;
 1412|       |
 1413|   135k|    ihevcd_get_tile_pos(ps_pps, ps_sps, ps_proc->i4_ctb_x, ps_proc->i4_ctb_y,
 1414|   135k|                        &ps_proc->i4_ctb_tile_x, &ps_proc->i4_ctb_tile_y,
 1415|   135k|                        &tile_idx);
 1416|       |
 1417|   135k|    ps_proc->ps_tile = ps_pps->ps_tile + tile_idx;
 1418|   135k|    ps_proc->i4_cur_tile_idx = tile_idx;
 1419|   135k|    ps_tile = ps_proc->ps_tile;
 1420|       |
 1421|   135k|    if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (1421:8): [True: 31.3k, False: 103k]
  ------------------
 1422|  31.3k|    {
 1423|  31.3k|        if(tile_idx)
  ------------------
  |  Branch (1423:12): [True: 13.4k, False: 17.9k]
  ------------------
 1424|  13.4k|            ps_tile_prev = ps_tile - 1;
 1425|  17.9k|        else
 1426|  17.9k|            ps_tile_prev = ps_tile;
 1427|       |
 1428|  31.3k|        slice_start_ctb_idx = ps_slice_hdr->i2_ctb_x + (ps_slice_hdr->i2_ctb_y * ps_sps->i2_pic_wd_in_ctb);
 1429|  31.3k|        tile_start_ctb_idx = ps_tile->u1_pos_x + (ps_tile->u1_pos_y * ps_sps->i2_pic_wd_in_ctb);
 1430|       |
 1431|       |        /*Check if
 1432|       |         * 1. Last tile that ends in frame boundary and 1st tile in next row belongs to same slice
 1433|       |         * 1.1. If it does, check if the slice that has these tiles spans across the frame row.
 1434|       |         * 2. Vertical tiles are present within a slice */
 1435|  31.3k|        if(((ps_slice_hdr->i2_ctb_x == ps_tile->u1_pos_x) && (ps_slice_hdr->i2_ctb_y != ps_tile->u1_pos_y)))
  ------------------
  |  Branch (1435:13): [True: 22.9k, False: 8.35k]
  |  Branch (1435:62): [True: 5.51k, False: 17.4k]
  ------------------
 1436|  5.51k|        {
 1437|  5.51k|            continuous_tiles = 1;
 1438|  5.51k|        }
 1439|  25.8k|        else
 1440|  25.8k|        {
 1441|  25.8k|            check_tile_wd = ps_slice_hdr->i2_ctb_x + ps_tile_prev->u2_wd;
 1442|  25.8k|            if(!(((check_tile_wd >= ps_sps->i2_pic_wd_in_ctb) && (check_tile_wd % ps_sps->i2_pic_wd_in_ctb == ps_tile->u1_pos_x))
  ------------------
  |  Branch (1442:19): [True: 15.3k, False: 10.4k]
  |  Branch (1442:66): [True: 15.1k, False: 292]
  ------------------
 1443|  25.8k|                                            || ((ps_slice_hdr->i2_ctb_x == ps_tile->u1_pos_x))))
  ------------------
  |  Branch (1443:48): [True: 2.97k, False: 7.74k]
  ------------------
 1444|  7.74k|            {
 1445|  7.74k|                continuous_tiles = 1;
 1446|  7.74k|            }
 1447|  25.8k|        }
 1448|       |
 1449|  31.3k|        {
 1450|  31.3k|            WORD32 i2_independent_ctb_x = ps_slice_hdr->i2_independent_ctb_x;
 1451|  31.3k|            WORD32 i2_independent_ctb_y = ps_slice_hdr->i2_independent_ctb_y;
 1452|       |
 1453|       |            /* Handles cases where
 1454|       |             * 1. Slices begin at the start of each tile
 1455|       |             * 2. Tiles lie in the same slice row.i.e, starting tile_x > slice_x, but tile_y == slice_y
 1456|       |             * */
 1457|  31.3k|            if(ps_proc->i4_ctb_x >= i2_independent_ctb_x)
  ------------------
  |  Branch (1457:16): [True: 14.6k, False: 16.7k]
  ------------------
 1458|  14.6k|            {
 1459|  14.6k|                ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_x - i2_independent_ctb_x;
 1460|  14.6k|            }
 1461|  16.7k|            else
 1462|  16.7k|            {
 1463|       |                /* Indicates multiple tiles in a slice case where
 1464|       |                 * The new tile belongs to an older slice that started in the previous rows-not the present row
 1465|       |                 * & (tile_y > slice_y and tile_x < slice_x)
 1466|       |                 */
 1467|  16.7k|                if((slice_start_ctb_idx < tile_start_ctb_idx) && (continuous_tiles))
  ------------------
  |  Branch (1467:20): [True: 2.37k, False: 14.3k]
  |  Branch (1467:66): [True: 1.77k, False: 605]
  ------------------
 1468|  1.77k|                {
 1469|  1.77k|                    i4_wd_in_ctb = ps_sps->i2_pic_wd_in_ctb;
 1470|  1.77k|                }
 1471|       |                /* Indicates many-tiles-in-one-slice case, for slices that end without spanning the frame width*/
 1472|  14.9k|                else
 1473|  14.9k|                {
 1474|  14.9k|                    i4_wd_in_ctb = ps_tile->u2_wd;
 1475|  14.9k|                }
 1476|       |
 1477|  16.7k|                if(continuous_tiles)
  ------------------
  |  Branch (1477:20): [True: 2.10k, False: 14.6k]
  ------------------
 1478|  2.10k|                {
 1479|  2.10k|                    ps_proc->i4_ctb_slice_x = i4_wd_in_ctb
 1480|  2.10k|                                    - (i2_independent_ctb_x - ps_proc->i4_ctb_x);
 1481|  2.10k|                }
 1482|  14.6k|                else
 1483|  14.6k|                {
 1484|  14.6k|                    ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_x - ps_tile->u1_pos_x;
 1485|  14.6k|                }
 1486|  16.7k|            }
 1487|       |            /* Initialize ctb slice y to zero and at the start of slice row initialize it
 1488|       |        to difference between ctb_y and slice's start ctb y */
 1489|       |
 1490|  31.3k|            ps_proc->i4_ctb_slice_y = ps_proc->i4_ctb_y - i2_independent_ctb_y;
 1491|       |
 1492|       |            /*If beginning of tile, check if slice counters are set correctly*/
 1493|  31.3k|            if((0 == ps_proc->i4_ctb_tile_x) && (0 == ps_proc->i4_ctb_tile_y))
  ------------------
  |  Branch (1493:16): [True: 31.3k, False: 0]
  |  Branch (1493:49): [True: 3.97k, False: 27.3k]
  ------------------
 1494|  3.97k|            {
 1495|  3.97k|                if(ps_slice_hdr->i1_dependent_slice_flag)
  ------------------
  |  Branch (1495:20): [True: 216, False: 3.76k]
  ------------------
 1496|    216|                {
 1497|    216|                    ps_proc->i4_ctb_slice_x = 0;
 1498|    216|                    ps_proc->i4_ctb_slice_y = 0;
 1499|    216|                }
 1500|       |                /*For slices that span across multiple tiles*/
 1501|  3.76k|                else if(slice_start_ctb_idx < tile_start_ctb_idx)
  ------------------
  |  Branch (1501:25): [True: 2.84k, False: 915]
  ------------------
 1502|  2.84k|                {
 1503|  2.84k|                    ps_proc->i4_ctb_slice_y = ps_tile->u1_pos_y - i2_independent_ctb_y;
 1504|       |                    /* Two Cases
 1505|       |                     * 1 - slice spans across frame-width- but dose not start from 1st column
 1506|       |                     * 2 - Slice spans across multiple tiles anywhere is a frame
 1507|       |                     */
 1508|       |                    /*TODO:In a multiple slice clip,  if an independent slice span across more than 2 tiles in a row, it is not supported*/
 1509|  2.84k|                    if(continuous_tiles) //Case 2-implemented for slices that span not more than 2 tiles
  ------------------
  |  Branch (1509:24): [True: 2.62k, False: 220]
  ------------------
 1510|  2.62k|                    {
 1511|  2.62k|                        if(i2_independent_ctb_y <= ps_tile->u1_pos_y)
  ------------------
  |  Branch (1511:28): [True: 2.33k, False: 293]
  ------------------
 1512|  2.33k|                        {
 1513|       |                            //Check if ctb x is before or after
 1514|  2.33k|                            if(i2_independent_ctb_x > ps_tile->u1_pos_x)
  ------------------
  |  Branch (1514:32): [True: 120, False: 2.21k]
  ------------------
 1515|    120|                            {
 1516|    120|                                ps_proc->i4_ctb_slice_y -= 1;
 1517|    120|                            }
 1518|  2.33k|                        }
 1519|  2.62k|                    }
 1520|  2.84k|                }
 1521|  3.97k|            }
 1522|       |            //Slice starts from a column which is not the starting tile-column, but is within the tile
 1523|  31.3k|            if(((i2_independent_ctb_x - ps_tile->u1_pos_x) != 0) && ((ps_proc->i4_ctb_slice_y != 0))
  ------------------
  |  Branch (1523:16): [True: 23.2k, False: 8.11k]
  |  Branch (1523:69): [True: 22.5k, False: 643]
  ------------------
 1524|  31.3k|                            && ((i2_independent_ctb_x >= ps_tile->u1_pos_x) && (i2_independent_ctb_x < ps_tile->u1_pos_x + ps_tile->u2_wd)))
  ------------------
  |  Branch (1524:33): [True: 16.5k, False: 6.06k]
  |  Branch (1524:80): [True: 15.0k, False: 1.48k]
  ------------------
 1525|  15.0k|            {
 1526|  15.0k|                ps_proc->i4_ctb_slice_y -= 1;
 1527|  15.0k|            }
 1528|  31.3k|        }
 1529|  31.3k|    }
 1530|   103k|    else
 1531|   103k|    {
 1532|   103k|        WORD32 i2_independent_ctb_x = ps_slice_hdr->i2_independent_ctb_x;
 1533|   103k|        WORD32 i2_independent_ctb_y = ps_slice_hdr->i2_independent_ctb_y;
 1534|       |
 1535|       |
 1536|   103k|        {
 1537|   103k|            ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_x - i2_independent_ctb_x;
 1538|   103k|            ps_proc->i4_ctb_slice_y = ps_proc->i4_ctb_y - i2_independent_ctb_y;
 1539|   103k|            if(ps_proc->i4_ctb_slice_x < 0)
  ------------------
  |  Branch (1539:16): [True: 14.7k, False: 89.0k]
  ------------------
 1540|  14.7k|            {
 1541|  14.7k|                ps_proc->i4_ctb_slice_x += ps_sps->i2_pic_wd_in_ctb;
 1542|  14.7k|                ps_proc->i4_ctb_slice_y -= 1;
 1543|  14.7k|            }
 1544|       |
 1545|       |            /* Initialize ctb slice y to zero and at the start of slice row initialize it
 1546|       |            to difference between ctb_y and slice's start ctb y */
 1547|   103k|        }
 1548|   103k|    }
 1549|       |
 1550|       |    /* Compute TU offset for the current CTB set */
 1551|   135k|    {
 1552|       |
 1553|   135k|        WORD32 ctb_luma_min_tu_cnt;
 1554|   135k|        WORD32 ctb_addr;
 1555|       |
 1556|   135k|        ctb_addr = ps_proc->i4_ctb_y * num_ctb_in_row + ps_proc->i4_ctb_x;
 1557|       |
 1558|   135k|        ctb_luma_min_tu_cnt = (1 << ps_sps->i1_log2_ctb_size) / MIN_TU_SIZE;
  ------------------
  |  |  348|   135k|#define MIN_TU_SIZE         4
  ------------------
 1559|   135k|        ctb_luma_min_tu_cnt *= ctb_luma_min_tu_cnt;
 1560|       |
 1561|   135k|        ps_proc->pu1_tu_map = ps_proc->pu1_pic_tu_map
 1562|   135k|                        + ctb_luma_min_tu_cnt * ctb_addr;
 1563|   135k|        if(1 == ps_codec->i4_num_cores)
  ------------------
  |  Branch (1563:12): [True: 73.1k, False: 61.8k]
  ------------------
 1564|  73.1k|        {
 1565|  73.1k|            ps_proc->ps_tu = ps_proc->ps_pic_tu + ps_proc->pu4_pic_tu_idx[ctb_addr % RESET_TU_BUF_NCTB];
  ------------------
  |  |  179|  73.1k|#define RESET_TU_BUF_NCTB MAX_NUM_CTBS_IN_FRAME
  |  |  ------------------
  |  |  |  |  170|  73.1k|#define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   53|  73.1k|#define MAX_WD   8448
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |   64|  73.1k|#define MAX_HT   4320
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  73.1k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  |  |               #define MAX_NUM_CTBS_IN_FRAME (MAX_WD * MAX_HT / MIN_CTB_SIZE / MIN_CTB_SIZE)
  |  |  |  |  ------------------
  |  |  |  |  |  |  342|  73.1k|#define MIN_CTB_SIZE        16
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1566|  73.1k|        }
 1567|  61.8k|        else
 1568|  61.8k|        {
 1569|  61.8k|            ps_proc->ps_tu = ps_proc->ps_pic_tu + ps_proc->pu4_pic_tu_idx[ctb_addr];
 1570|  61.8k|        }
 1571|   135k|        ps_proc->pv_tu_coeff_data = (UWORD8 *)ps_proc->pv_pic_tu_coeff_data
 1572|   135k|                        + tu_coeff_data_ofst;
 1573|       |
 1574|   135k|    }
 1575|       |
 1576|       |    /* Compute PU related elements for the current CTB set */
 1577|   135k|    {
 1578|   135k|        WORD32 pu_idx;
 1579|   135k|        ctb_addr = ps_proc->i4_ctb_y * num_ctb_in_row + ps_proc->i4_ctb_x;
 1580|   135k|        pu_idx = ps_proc->pu4_pic_pu_idx[ctb_addr];
 1581|   135k|        ps_proc->pu1_pu_map = ps_proc->pu1_pic_pu_map
 1582|   135k|                        + ctb_addr * num_minpu_in_ctb;
 1583|   135k|        ps_proc->ps_pu = ps_proc->ps_pic_pu + pu_idx;
 1584|   135k|    }
 1585|       |
 1586|       |    /* Number of ctbs processed in one loop of process function */
 1587|   135k|    {
 1588|   135k|        ps_proc->i4_nctb = MIN(ps_codec->u4_nctb, ps_tile->u2_wd);
  ------------------
  |  |   43|   135k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 0, False: 135k]
  |  |  ------------------
  ------------------
 1589|   135k|    }
 1590|       |
 1591|   135k|}
ihevcd_process_thread:
 1593|  6.68k|{
 1594|  6.68k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
 1595|  6.68k|    {
 1596|  6.68k|        ithread_set_affinity(ps_proc->i4_id + 1);
 1597|  6.68k|    }
 1598|       |
 1599|       |#ifdef KEEP_THREADS_ACTIVE
 1600|       |    while(1)
 1601|       |    {
 1602|       |        codec_t *ps_dec = ps_proc->ps_codec;
 1603|       |        DEBUG("In ihevcd_process_thread \n");
 1604|       |
 1605|       |        ret = ithread_mutex_lock(ps_dec->apv_proc_start_mutex[ps_proc->i4_id]);
 1606|       |        if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
 1607|       |            break;
 1608|       |
 1609|       |        while(!ps_dec->ai4_process_start[ps_proc->i4_id])
 1610|       |        {
 1611|       |            ithread_cond_wait(ps_dec->apv_proc_start_condition[ps_proc->i4_id],
 1612|       |                              ps_dec->apv_proc_start_mutex[ps_proc->i4_id]);
 1613|       |        }
 1614|       |        ps_dec->ai4_process_start[ps_proc->i4_id] = 0;
 1615|       |        ret = ithread_mutex_unlock(ps_dec->apv_proc_start_mutex[ps_proc->i4_id]);
 1616|       |        if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
 1617|       |            break;
 1618|       |
 1619|       |        DEBUG(" Got control at ihevcd_process_thread \n");
 1620|       |
 1621|       |        if(ps_dec->i4_break_threads == 1)
 1622|       |            break;
 1623|       |#endif
 1624|  87.2k|        while(1)
  ------------------
  |  Branch (1624:15): [Folded - Ignored]
  ------------------
 1625|  87.2k|        {
 1626|  87.2k|            proc_job_t s_job;
 1627|       |
 1628|  87.2k|            ret = ihevcd_jobq_dequeue((jobq_t *)ps_proc->pv_proc_jobq, &s_job,
 1629|  87.2k|                                    sizeof(proc_job_t), 1);
 1630|  87.2k|            if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
  ------------------
  |  Branch (1630:16): [True: 6.69k, False: 80.5k]
  ------------------
 1631|  6.69k|                break;
 1632|       |
 1633|  80.5k|            ps_proc->i4_ctb_cnt = s_job.i2_ctb_cnt;
 1634|  80.5k|            ps_proc->i4_ctb_x = s_job.i2_ctb_x;
 1635|  80.5k|            ps_proc->i4_ctb_y = s_job.i2_ctb_y;
 1636|  80.5k|            ps_proc->i4_cur_slice_idx = s_job.i2_slice_idx;
 1637|       |
 1638|       |
 1639|       |
 1640|  80.5k|            if(CMD_PROCESS == s_job.i4_cmd)
  ------------------
  |  Branch (1640:16): [True: 43.2k, False: 37.3k]
  ------------------
 1641|  43.2k|            {
 1642|  43.2k|                ihevcd_init_proc_ctxt(ps_proc, s_job.i4_tu_coeff_data_ofst);
 1643|  43.2k|                ihevcd_process(ps_proc);
 1644|  43.2k|            }
 1645|  37.3k|            else if(CMD_FMTCONV == s_job.i4_cmd)
  ------------------
  |  Branch (1645:21): [True: 38.4k, False: 18.4E]
  ------------------
 1646|  38.4k|            {
 1647|  38.4k|                sps_t *ps_sps;
 1648|  38.4k|                codec_t *ps_codec;
 1649|  38.4k|                ivd_out_bufdesc_t *ps_out_buffer;
 1650|  38.4k|                WORD32 num_rows;
 1651|       |
 1652|  38.4k|                if(0 == ps_proc->i4_init_done)
  ------------------
  |  Branch (1652:20): [True: 36, False: 38.4k]
  ------------------
 1653|     36|                {
 1654|     36|                    ihevcd_init_proc_ctxt(ps_proc, 0);
 1655|     36|                }
 1656|  38.4k|                ps_sps = ps_proc->ps_sps;
 1657|  38.4k|                ps_codec = ps_proc->ps_codec;
 1658|  38.4k|                ps_out_buffer = ps_proc->ps_out_buffer;
 1659|  38.4k|                num_rows = 1 << ps_sps->i1_log2_ctb_size;
 1660|       |
 1661|  38.4k|                num_rows = MIN(num_rows,
  ------------------
  |  |   43|  38.4k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 36.7k, False: 1.71k]
  |  |  ------------------
  ------------------
 1662|  38.4k|                               (ps_codec->i4_disp_ht - (s_job.i2_ctb_y << ps_sps->i1_log2_ctb_size))
 1663|  38.4k|                              );
 1664|       |
 1665|  38.4k|                if(num_rows < 0)
  ------------------
  |  Branch (1665:20): [True: 0, False: 38.4k]
  ------------------
 1666|      0|                    num_rows = 0;
 1667|       |
 1668|  38.4k|                ihevcd_fmt_conv(ps_proc->ps_codec, ps_proc, ps_out_buffer->pu1_bufs[0],
 1669|  38.4k|                                ps_out_buffer->pu1_bufs[1], ps_out_buffer->pu1_bufs[2],
 1670|  38.4k|                                s_job.i2_ctb_y << ps_sps->i1_log2_ctb_size, num_rows);
 1671|  38.4k|            }
 1672|  80.5k|        }
 1673|       |#ifdef KEEP_THREADS_ACTIVE
 1674|       |        ret = ithread_mutex_lock(ps_dec->apv_proc_done_mutex[ps_proc->i4_id]);
 1675|       |        if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
 1676|       |            break;
 1677|       |
 1678|       |        ps_dec->ai4_process_done[ps_proc->i4_id] = 1;
 1679|       |        ithread_cond_signal(ps_dec->apv_proc_done_condition[ps_proc->i4_id]);
 1680|       |
 1681|       |        ret = ithread_mutex_unlock(ps_dec->apv_proc_done_mutex[ps_proc->i4_id]);
 1682|       |        if((IHEVCD_ERROR_T)IHEVCD_SUCCESS != ret)
 1683|       |            break;
 1684|       |    }
 1685|       |#endif
 1686|       |    //ithread_exit(0);
 1687|  6.68k|    return;
 1688|  6.68k|}

ihevcd_mv_mgr_get_poc:
   74|  7.73k|{
   75|  7.73k|    UWORD32 i;
   76|  7.73k|    mv_buf_t *ps_mv_buf = NULL;
   77|       |
   78|       |
   79|       |
   80|  10.6k|    for(i = 0; i < ps_mv_buf_mgr->u4_max_buf_cnt; i++)
  ------------------
  |  Branch (80:16): [True: 10.6k, False: 0]
  ------------------
   81|  10.6k|    {
   82|  10.6k|        ps_mv_buf = (mv_buf_t *)ps_mv_buf_mgr->apv_ptr[i];
   83|  10.6k|        if(ps_mv_buf && (ps_mv_buf->i4_abs_poc == (WORD32)abs_poc))
  ------------------
  |  Branch (83:12): [True: 10.6k, False: 0]
  |  Branch (83:25): [True: 7.73k, False: 2.89k]
  ------------------
   84|  7.73k|        {
   85|  7.73k|            break;
   86|  7.73k|        }
   87|  10.6k|    }
   88|       |
   89|  7.73k|    return ps_mv_buf;
   90|  7.73k|}
ihevcd_ref_list:
   94|  2.30k|{
   95|  2.30k|    WORD32 i, j;
   96|  2.30k|    WORD32 st_rps_idx;
   97|  2.30k|    WORD32 num_neg_pics, num_pos_pics;
   98|  2.30k|    WORD8 *pi1_used;
   99|  2.30k|    WORD16 *pi2_delta_poc;
  100|  2.30k|    UWORD32 u4_max_poc_lsb;
  101|  2.30k|    pic_buf_t *ps_pic_buf;
  102|  2.30k|    mv_buf_t *ps_mv_buf;
  103|  2.30k|    UWORD32 r_idx;
  104|       |
  105|  2.30k|    dpb_mgr_t *ps_dpb_mgr = (dpb_mgr_t *)ps_codec->pv_dpb_mgr;
  106|  2.30k|    buf_mgr_t *ps_mv_buf_mgr = (buf_mgr_t *)ps_codec->pv_mv_buf_mgr;
  107|       |
  108|  2.30k|    WORD32 ai4_poc_st_curr_before[MAX_DPB_SIZE], ai4_poc_st_foll[MAX_DPB_SIZE], ai4_poc_st_curr_after[MAX_DPB_SIZE];
  109|  2.30k|    WORD32 ai4_poc_lt_curr[MAX_DPB_SIZE], ai4_poc_lt_foll[MAX_DPB_SIZE];
  110|  2.30k|    UWORD32 u4_num_st_curr_before, u4_num_st_foll, u4_num_st_curr_after, u4_num_lt_curr, u4_num_lt_foll;
  111|  2.30k|    UWORD32 u4_num_total_curr;
  112|       |
  113|  2.30k|    WORD8 ai1_curr_delta_poc_msb_present_flag[MAX_DPB_SIZE], ai1_foll_delta_poc_msb_present_flag[MAX_DPB_SIZE];
  114|       |
  115|  2.30k|    pic_buf_t *as_ref_pic_lt_curr[MAX_DPB_SIZE];
  116|  2.30k|    pic_buf_t *as_ref_pic_lt_foll[MAX_DPB_SIZE];
  117|  2.30k|    pic_buf_t *as_ref_pic_st_curr_after[MAX_DPB_SIZE];
  118|  2.30k|    pic_buf_t *as_ref_pic_st_curr_before[MAX_DPB_SIZE];
  119|  2.30k|    pic_buf_t *as_ref_pic_st_foll[MAX_DPB_SIZE];
  120|       |
  121|  2.30k|    pic_buf_t *as_ref_pic_list_temp0[MAX_DPB_SIZE], *as_ref_pic_list_temp1[MAX_DPB_SIZE];
  122|       |
  123|  2.30k|    UWORD32 u4_num_rps_curr_temp_list0, u4_num_rps_curr_temp_list1;
  124|       |
  125|  2.30k|    WORD32 i4_pic_order_cnt_val;
  126|  2.30k|    WORD32 i4_poc_lt;
  127|  2.30k|    UNUSED(as_ref_pic_lt_foll);
  ------------------
  |  |   38|  2.30k|#define UNUSED(x) ((void)(x))
  ------------------
  128|  2.30k|    UNUSED(as_ref_pic_st_foll);
  ------------------
  |  |   38|  2.30k|#define UNUSED(x) ((void)(x))
  ------------------
  129|  2.30k|    UNUSED(ps_pps);
  ------------------
  |  |   38|  2.30k|#define UNUSED(x) ((void)(x))
  ------------------
  130|       |
  131|  2.30k|    RETURN_IF_NAL_INFO;
  132|       |
  133|  2.30k|    u4_max_poc_lsb = (1 << ps_sps->i1_log2_max_pic_order_cnt_lsb);
  134|       |
  135|  2.30k|    i4_pic_order_cnt_val = ps_slice_hdr->i4_abs_pic_order_cnt;
  136|       |
  137|  2.30k|    if(1 == ps_slice_hdr->i1_short_term_ref_pic_set_sps_flag)
  ------------------
  |  Branch (137:8): [True: 1.38k, False: 915]
  ------------------
  138|  1.38k|    {
  139|  1.38k|        st_rps_idx = ps_slice_hdr->i1_short_term_ref_pic_set_idx;
  140|  1.38k|        num_neg_pics = ps_sps->as_stref_picset[st_rps_idx].i1_num_neg_pics;
  141|  1.38k|        num_pos_pics = ps_sps->as_stref_picset[st_rps_idx].i1_num_pos_pics;
  142|  1.38k|        pi1_used = ps_sps->as_stref_picset[st_rps_idx].ai1_used;
  143|  1.38k|        pi2_delta_poc = ps_sps->as_stref_picset[st_rps_idx].ai2_delta_poc;
  144|  1.38k|    }
  145|    915|    else
  146|    915|    {
  147|    915|        st_rps_idx = ps_sps->i1_num_short_term_ref_pic_sets;
  148|    915|        num_neg_pics = ps_slice_hdr->s_stref_picset.i1_num_neg_pics;
  149|    915|        num_pos_pics = ps_slice_hdr->s_stref_picset.i1_num_pos_pics;
  150|    915|        pi1_used = ps_slice_hdr->s_stref_picset.ai1_used;
  151|    915|        pi2_delta_poc = ps_slice_hdr->s_stref_picset.ai2_delta_poc;
  152|    915|    }
  153|       |
  154|  2.30k|    u4_num_st_curr_before = 0;
  155|  2.30k|    u4_num_st_foll = 0;
  156|  6.89k|    for(i = 0; i < num_neg_pics; i++)
  ------------------
  |  Branch (156:16): [True: 4.59k, False: 2.30k]
  ------------------
  157|  4.59k|    {
  158|  4.59k|        if(pi1_used[i])
  ------------------
  |  Branch (158:12): [True: 4.07k, False: 521]
  ------------------
  159|  4.07k|        {
  160|  4.07k|            ai4_poc_st_curr_before[u4_num_st_curr_before] = i4_pic_order_cnt_val + pi2_delta_poc[i];
  161|  4.07k|            u4_num_st_curr_before++;
  162|  4.07k|        }
  163|    521|        else
  164|    521|        {
  165|    521|            ai4_poc_st_foll[u4_num_st_foll] = i4_pic_order_cnt_val + pi2_delta_poc[i];
  166|    521|            u4_num_st_foll++;
  167|    521|        }
  168|  4.59k|    }
  169|  2.30k|    u4_num_st_curr_after = 0;
  170|  4.81k|    for(i = num_neg_pics; i < num_neg_pics + num_pos_pics; i++)
  ------------------
  |  Branch (170:27): [True: 2.51k, False: 2.30k]
  ------------------
  171|  2.51k|    {
  172|  2.51k|        if(pi1_used[i])
  ------------------
  |  Branch (172:12): [True: 2.31k, False: 203]
  ------------------
  173|  2.31k|        {
  174|  2.31k|            ai4_poc_st_curr_after[u4_num_st_curr_after] = i4_pic_order_cnt_val + pi2_delta_poc[i];
  175|  2.31k|            u4_num_st_curr_after++;
  176|  2.31k|        }
  177|    203|        else
  178|    203|        {
  179|    203|            ai4_poc_st_foll[u4_num_st_foll] = i4_pic_order_cnt_val + pi2_delta_poc[i];
  180|    203|            u4_num_st_foll++;
  181|    203|        }
  182|  2.51k|    }
  183|       |
  184|  2.30k|    u4_num_lt_curr = 0;
  185|  2.30k|    u4_num_lt_foll = 0;
  186|  4.12k|    for(i = 0; i < ps_slice_hdr->i1_num_long_term_sps + ps_slice_hdr->i1_num_long_term_pics; i++)
  ------------------
  |  Branch (186:16): [True: 1.82k, False: 2.30k]
  ------------------
  187|  1.82k|    {
  188|  1.82k|        i4_poc_lt = ps_slice_hdr->ai4_poc_lsb_lt[i];
  189|  1.82k|        if(ps_slice_hdr->ai1_delta_poc_msb_present_flag[i])
  ------------------
  |  Branch (189:12): [True: 751, False: 1.07k]
  ------------------
  190|    751|        {
  191|    751|            i4_poc_lt += i4_pic_order_cnt_val - ps_slice_hdr->ai1_delta_poc_msb_cycle_lt[i] * (WORD32)u4_max_poc_lsb - ps_slice_hdr->i4_pic_order_cnt_lsb;
  192|    751|        }
  193|       |
  194|  1.82k|        if(ps_slice_hdr->ai1_used_by_curr_pic_lt_flag[i])
  ------------------
  |  Branch (194:12): [True: 1.23k, False: 584]
  ------------------
  195|  1.23k|        {
  196|  1.23k|            ai4_poc_lt_curr[u4_num_lt_curr] = i4_poc_lt;
  197|  1.23k|            ai1_curr_delta_poc_msb_present_flag[u4_num_lt_curr] = ps_slice_hdr->ai1_delta_poc_msb_present_flag[i];
  198|  1.23k|            u4_num_lt_curr++;
  199|  1.23k|        }
  200|    584|        else
  201|    584|        {
  202|    584|            ai4_poc_lt_foll[u4_num_lt_foll] = i4_poc_lt;
  203|    584|            ai1_foll_delta_poc_msb_present_flag[u4_num_lt_foll] = ps_slice_hdr->ai1_delta_poc_msb_present_flag[i];
  204|    584|            u4_num_lt_foll++;
  205|    584|        }
  206|  1.82k|    }
  207|       |
  208|  2.30k|    u4_num_total_curr = u4_num_lt_curr + u4_num_st_curr_after + u4_num_st_curr_before;
  209|       |
  210|       |    /* Bit stream conformance tests */
  211|       |/*
  212|       |    for(i = 0; i < u4_num_lt_curr; i++)
  213|       |    {
  214|       |        int j;
  215|       |        if(ai1_curr_delta_poc_msb_present_flag[i])
  216|       |        {
  217|       |            for(j = 0; j < u4_num_st_curr_before; j++)
  218|       |            {
  219|       |                ASSERT(ai4_poc_st_curr_before[j] != ai4_poc_lt_curr[i]);
  220|       |            }
  221|       |            for(j = 0; j < u4_num_st_curr_after; j++)
  222|       |            {
  223|       |                ASSERT(ai4_poc_st_curr_after[j] != ai4_poc_lt_curr[i]);
  224|       |            }
  225|       |            for(j = 0; j < u4_num_st_foll; j++)
  226|       |            {
  227|       |                ASSERT(ai4_poc_st_foll[j] != ai4_poc_lt_curr[i]);
  228|       |            }
  229|       |            for(j = 0; j < u4_num_lt_curr; j++)
  230|       |            {
  231|       |                ASSERT((ai4_poc_lt_curr[j] != ai4_poc_lt_curr[i]) || (j == i));
  232|       |            }
  233|       |        }
  234|       |        else
  235|       |        {
  236|       |            for(j = 0; j < u4_num_st_curr_before; j++)
  237|       |            {
  238|       |                ASSERT((ai4_poc_st_curr_before[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_curr[i]);
  239|       |            }
  240|       |            for(j = 0; j < u4_num_st_curr_after; j++)
  241|       |            {
  242|       |                ASSERT((ai4_poc_st_curr_after[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_curr[i]);
  243|       |            }
  244|       |            for(j = 0; j < u4_num_st_foll; j++)
  245|       |            {
  246|       |                ASSERT((ai4_poc_st_foll[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_curr[i]);
  247|       |            }
  248|       |            for(j = 0; j < u4_num_lt_curr; j++)
  249|       |            {
  250|       |                ASSERT(((ai4_poc_lt_curr[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_curr[i]) || (j == i));
  251|       |            }
  252|       |        }
  253|       |    }
  254|       |
  255|       |    for(i = 0; i < u4_num_lt_foll; i++)
  256|       |    {
  257|       |        int j;
  258|       |        if(ai1_foll_delta_poc_msb_present_flag[i])
  259|       |        {
  260|       |            for(j = 0; j < u4_num_st_curr_before; j++)
  261|       |            {
  262|       |                ASSERT(ai4_poc_st_curr_before[j] != ai4_poc_lt_foll[i]);
  263|       |            }
  264|       |            for(j = 0; j < u4_num_st_curr_after; j++)
  265|       |            {
  266|       |                ASSERT(ai4_poc_st_curr_after[j] != ai4_poc_lt_foll[i]);
  267|       |            }
  268|       |            for(j = 0; j < u4_num_st_foll; j++)
  269|       |            {
  270|       |                ASSERT(ai4_poc_st_foll[j] != ai4_poc_lt_foll[i]);
  271|       |            }
  272|       |            for(j = 0; j < u4_num_lt_curr; j++)
  273|       |            {
  274|       |                ASSERT(ai4_poc_lt_curr[j] != ai4_poc_lt_foll[i]);
  275|       |            }
  276|       |            for(j = 0; j < u4_num_lt_foll; j++)
  277|       |            {
  278|       |                ASSERT((ai4_poc_lt_foll[j] != ai4_poc_lt_foll[i]) || (j == i));
  279|       |            }
  280|       |        }
  281|       |        else
  282|       |        {
  283|       |            for(j = 0; j < u4_num_st_curr_before; j++)
  284|       |            {
  285|       |                ASSERT((ai4_poc_st_curr_before[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_foll[i]);
  286|       |            }
  287|       |            for(j = 0; j < u4_num_st_curr_after; j++)
  288|       |            {
  289|       |                ASSERT((ai4_poc_st_curr_after[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_foll[i]);
  290|       |            }
  291|       |            for(j = 0; j < u4_num_st_foll; j++)
  292|       |            {
  293|       |                ASSERT((ai4_poc_st_foll[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_foll[i]);
  294|       |            }
  295|       |            for(j = 0; j < u4_num_lt_curr; j++)
  296|       |            {
  297|       |                ASSERT((ai4_poc_lt_curr[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_foll[i]);
  298|       |            }
  299|       |            for(j = 0; j < u4_num_lt_foll; j++)
  300|       |            {
  301|       |                ASSERT(((ai4_poc_lt_foll[j] & (u4_max_poc_lsb - 1)) != ai4_poc_lt_foll[i]) || (j == i));
  302|       |            }
  303|       |        }
  304|       |    }
  305|       |*/
  306|       |
  307|       |
  308|       |    /* Reference Pic sets creation */
  309|       |
  310|       |    /* Set all the DPB buffers to UNUSED_FOR_REF */
  311|  2.30k|    if(0 == ps_codec->i4_pic_present)
  ------------------
  |  Branch (311:8): [True: 1.54k, False: 760]
  ------------------
  312|  1.54k|    {
  313|   100k|        for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|   100k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|   100k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (313:20): [True: 98.5k, False: 1.54k]
  ------------------
  314|  98.5k|        {
  315|  98.5k|            if(ps_dpb_mgr->as_dpb_info[i].ps_pic_buf)
  ------------------
  |  Branch (315:16): [True: 3.17k, False: 95.3k]
  ------------------
  316|  3.17k|                ps_dpb_mgr->as_dpb_info[i].ps_pic_buf->u1_used_as_ref = UNUSED_FOR_REF;
  317|  98.5k|        }
  318|  1.54k|    }
  319|       |
  320|  3.53k|    for(i = 0; i < (WORD32)u4_num_lt_curr; i++)
  ------------------
  |  Branch (320:16): [True: 1.23k, False: 2.30k]
  ------------------
  321|  1.23k|    {
  322|  1.23k|        if(0 == ai1_curr_delta_poc_msb_present_flag[i])
  ------------------
  |  Branch (322:12): [True: 828, False: 410]
  ------------------
  323|    828|        {
  324|    828|            ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc_lsb(ps_dpb_mgr, ai4_poc_lt_curr[i]);
  325|    828|            if(NULL != ps_pic_buf)
  ------------------
  |  Branch (325:16): [True: 194, False: 634]
  ------------------
  326|    194|                ps_pic_buf->u1_used_as_ref = LONG_TERM_REF;
  327|       |
  328|    828|            as_ref_pic_lt_curr[i] = ps_pic_buf;
  329|    828|        }
  330|    410|        else
  331|    410|        {
  332|    410|            ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc(ps_dpb_mgr, ai4_poc_lt_curr[i]);
  333|    410|            if(NULL != ps_pic_buf)
  ------------------
  |  Branch (333:16): [True: 152, False: 258]
  ------------------
  334|    152|                ps_pic_buf->u1_used_as_ref = LONG_TERM_REF;
  335|       |
  336|    410|            as_ref_pic_lt_curr[i] = ps_pic_buf;
  337|    410|        }
  338|  1.23k|    }
  339|       |
  340|  2.88k|    for(i = 0; i < (WORD32)u4_num_lt_foll; i++)
  ------------------
  |  Branch (340:16): [True: 584, False: 2.30k]
  ------------------
  341|    584|    {
  342|    584|        if(0 == ai1_foll_delta_poc_msb_present_flag[i])
  ------------------
  |  Branch (342:12): [True: 243, False: 341]
  ------------------
  343|    243|        {
  344|    243|            ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc_lsb(ps_dpb_mgr, ai4_poc_lt_foll[i]);
  345|    243|            if(NULL != ps_pic_buf)
  ------------------
  |  Branch (345:16): [True: 108, False: 135]
  ------------------
  346|    108|                ps_pic_buf->u1_used_as_ref = LONG_TERM_REF;
  347|       |
  348|    243|            as_ref_pic_lt_foll[i] = ps_pic_buf;
  349|    243|        }
  350|    341|        else
  351|    341|        {
  352|    341|            ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc(ps_dpb_mgr, ai4_poc_lt_foll[i]);
  353|    341|            if(NULL != ps_pic_buf)
  ------------------
  |  Branch (353:16): [True: 3, False: 338]
  ------------------
  354|      3|                ps_pic_buf->u1_used_as_ref = LONG_TERM_REF;
  355|       |
  356|    341|            as_ref_pic_lt_foll[i] = ps_pic_buf;
  357|    341|        }
  358|    584|    }
  359|       |
  360|       |
  361|  6.37k|    for(i = 0; i < (WORD32)u4_num_st_curr_before; i++)
  ------------------
  |  Branch (361:16): [True: 4.07k, False: 2.30k]
  ------------------
  362|  4.07k|    {
  363|       |
  364|  4.07k|        ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc(ps_dpb_mgr, ai4_poc_st_curr_before[i]);
  365|  4.07k|        if(NULL != ps_pic_buf)
  ------------------
  |  Branch (365:12): [True: 1.10k, False: 2.97k]
  ------------------
  366|  1.10k|            ps_pic_buf->u1_used_as_ref = SHORT_TERM_REF;
  367|       |
  368|  4.07k|        as_ref_pic_st_curr_before[i] = ps_pic_buf;
  369|  4.07k|    }
  370|       |
  371|  4.61k|    for(i = 0; i < (WORD32)u4_num_st_curr_after; i++)
  ------------------
  |  Branch (371:16): [True: 2.31k, False: 2.30k]
  ------------------
  372|  2.31k|    {
  373|  2.31k|        ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc(ps_dpb_mgr, ai4_poc_st_curr_after[i]);
  374|  2.31k|        if(NULL != ps_pic_buf)
  ------------------
  |  Branch (374:12): [True: 658, False: 1.65k]
  ------------------
  375|    658|            ps_pic_buf->u1_used_as_ref = SHORT_TERM_REF;
  376|       |
  377|  2.31k|        as_ref_pic_st_curr_after[i] = ps_pic_buf;
  378|  2.31k|    }
  379|       |
  380|  3.02k|    for(i = 0; i < (WORD32)u4_num_st_foll; i++)
  ------------------
  |  Branch (380:16): [True: 724, False: 2.30k]
  ------------------
  381|    724|    {
  382|    724|        ps_pic_buf = ihevc_dpb_mgr_get_ref_by_poc(ps_dpb_mgr, ai4_poc_st_foll[i]);
  383|    724|        if(NULL != ps_pic_buf)
  ------------------
  |  Branch (383:12): [True: 135, False: 589]
  ------------------
  384|    135|            ps_pic_buf->u1_used_as_ref = SHORT_TERM_REF;
  385|       |
  386|    724|        as_ref_pic_st_foll[i] = ps_pic_buf;
  387|    724|    }
  388|       |
  389|       |    //TODO: Bit stream conformance tests to be included
  390|       |
  391|  2.30k|    u4_num_rps_curr_temp_list0 = (WORD32)u4_num_total_curr > ps_slice_hdr->i1_num_ref_idx_l0_active ? (WORD32)u4_num_total_curr : ps_slice_hdr->i1_num_ref_idx_l0_active;
  ------------------
  |  Branch (391:34): [True: 1.18k, False: 1.11k]
  ------------------
  392|       |
  393|  2.30k|    r_idx = 0;
  394|  2.30k|    if((PSLICE == ps_slice_hdr->i1_slice_type) ||
  ------------------
  |  Branch (394:8): [True: 115, False: 2.18k]
  ------------------
  395|  2.30k|       (BSLICE == ps_slice_hdr->i1_slice_type))
  ------------------
  |  Branch (395:8): [True: 1.34k, False: 837]
  ------------------
  396|  1.46k|    {
  397|  3.15k|        while(r_idx < u4_num_rps_curr_temp_list0)
  ------------------
  |  Branch (397:15): [True: 1.68k, False: 1.46k]
  ------------------
  398|  1.68k|        {
  399|  5.93k|            for(i = 0; (i < (WORD32)u4_num_st_curr_before) && (r_idx < u4_num_rps_curr_temp_list0); r_idx++, i++)
  ------------------
  |  Branch (399:24): [True: 4.27k, False: 1.65k]
  |  Branch (399:63): [True: 4.24k, False: 32]
  ------------------
  400|  4.24k|            {
  401|  4.24k|                if(NULL == as_ref_pic_st_curr_before[i])
  ------------------
  |  Branch (401:20): [True: 3.03k, False: 1.20k]
  ------------------
  402|  3.03k|                {
  403|  3.03k|                    as_ref_pic_st_curr_before[i] = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ai4_poc_st_curr_before[i]);
  404|  3.03k|                }
  405|  4.24k|                as_ref_pic_list_temp0[r_idx] = as_ref_pic_st_curr_before[i];
  406|  4.24k|            }
  407|       |
  408|  3.96k|            for(i = 0; (i < (WORD32)u4_num_st_curr_after) && (r_idx < u4_num_rps_curr_temp_list0); r_idx++, i++)
  ------------------
  |  Branch (408:24): [True: 2.28k, False: 1.68k]
  |  Branch (408:62): [True: 2.27k, False: 5]
  ------------------
  409|  2.27k|            {
  410|  2.27k|                if(NULL == as_ref_pic_st_curr_after[i])
  ------------------
  |  Branch (410:20): [True: 1.61k, False: 664]
  ------------------
  411|  1.61k|                {
  412|  1.61k|                    as_ref_pic_st_curr_after[i] = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ai4_poc_st_curr_after[i]);
  413|  1.61k|                }
  414|  2.27k|                as_ref_pic_list_temp0[r_idx] = as_ref_pic_st_curr_after[i];
  415|  2.27k|            }
  416|       |
  417|  3.01k|            for(i = 0; (i < (WORD32)u4_num_lt_curr) && (r_idx < u4_num_rps_curr_temp_list0); r_idx++, i++)
  ------------------
  |  Branch (417:24): [True: 1.36k, False: 1.64k]
  |  Branch (417:56): [True: 1.32k, False: 45]
  ------------------
  418|  1.32k|            {
  419|  1.32k|                if(NULL == as_ref_pic_lt_curr[i])
  ------------------
  |  Branch (419:20): [True: 890, False: 433]
  ------------------
  420|    890|                {
  421|    890|                    as_ref_pic_lt_curr[i] = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ai4_poc_lt_curr[i]);
  422|    890|                }
  423|  1.32k|                as_ref_pic_list_temp0[r_idx] = as_ref_pic_lt_curr[i];
  424|  1.32k|            }
  425|  1.68k|        }
  426|       |
  427|  4.44k|        for(r_idx = 0; (WORD32)r_idx < ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx++)
  ------------------
  |  Branch (427:24): [True: 3.11k, False: 1.33k]
  ------------------
  428|  3.11k|        {
  429|  3.11k|            pic_buf_t *ps_pic_buf;
  430|  3.11k|            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = ps_slice_hdr->s_rplm.i1_ref_pic_list_modification_flag_l0 ?  (void *)as_ref_pic_list_temp0[ps_slice_hdr->s_rplm.i1_list_entry_l0[r_idx]] :  (void *)as_ref_pic_list_temp0[r_idx];
  ------------------
  |  Branch (430:64): [True: 644, False: 2.46k]
  ------------------
  431|  3.11k|            ps_pic_buf = (pic_buf_t *)ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf;
  432|       |
  433|  3.11k|            if(ps_pic_buf == NULL)
  ------------------
  |  Branch (433:16): [True: 130, False: 2.98k]
  ------------------
  434|    130|                return IHEVCD_REF_PIC_NOT_FOUND;
  435|       |
  436|  2.98k|            ps_mv_buf = ihevcd_mv_mgr_get_poc(ps_mv_buf_mgr, ps_pic_buf->i4_abs_poc);
  437|  2.98k|            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = ps_mv_buf;
  438|  2.98k|        }
  439|       |
  440|       |
  441|  1.33k|        if(ps_slice_hdr->i1_slice_type  == BSLICE)
  ------------------
  |  Branch (441:12): [True: 1.22k, False: 106]
  ------------------
  442|  1.22k|        {
  443|  1.22k|            u4_num_rps_curr_temp_list1 = (WORD32)u4_num_total_curr > ps_slice_hdr->i1_num_ref_idx_l1_active ? (WORD32)u4_num_total_curr : ps_slice_hdr->i1_num_ref_idx_l1_active;
  ------------------
  |  Branch (443:42): [True: 954, False: 273]
  ------------------
  444|       |
  445|  1.22k|            r_idx = 0;
  446|  2.84k|            while(r_idx < u4_num_rps_curr_temp_list1)
  ------------------
  |  Branch (446:19): [True: 1.61k, False: 1.22k]
  ------------------
  447|  1.61k|            {
  448|  3.56k|                for(i = 0; (i < (WORD32)u4_num_st_curr_after) && (r_idx < u4_num_rps_curr_temp_list1); r_idx++, i++)
  ------------------
  |  Branch (448:28): [True: 1.96k, False: 1.60k]
  |  Branch (448:66): [True: 1.94k, False: 17]
  ------------------
  449|  1.94k|                {
  450|  1.94k|                    if(NULL == as_ref_pic_st_curr_after[i])
  ------------------
  |  Branch (450:24): [True: 0, False: 1.94k]
  ------------------
  451|      0|                    {
  452|      0|                        as_ref_pic_st_curr_after[i] = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ai4_poc_st_curr_after[i]);
  453|      0|                    }
  454|  1.94k|                    as_ref_pic_list_temp1[r_idx] = as_ref_pic_st_curr_after[i];
  455|  1.94k|                }
  456|       |
  457|  5.71k|                for(i = 0; (i < (WORD32)u4_num_st_curr_before) && (r_idx < u4_num_rps_curr_temp_list1); r_idx++, i++)
  ------------------
  |  Branch (457:28): [True: 4.15k, False: 1.56k]
  |  Branch (457:67): [True: 4.10k, False: 49]
  ------------------
  458|  4.10k|                {
  459|  4.10k|                    if(NULL == as_ref_pic_st_curr_before[i])
  ------------------
  |  Branch (459:24): [True: 0, False: 4.10k]
  ------------------
  460|      0|                    {
  461|      0|                        as_ref_pic_st_curr_before[i] = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ai4_poc_st_curr_before[i]);
  462|      0|                    }
  463|  4.10k|                    as_ref_pic_list_temp1[r_idx] = as_ref_pic_st_curr_before[i];
  464|  4.10k|                }
  465|       |
  466|  3.28k|                for(i = 0; (i < (WORD32)u4_num_lt_curr) && (r_idx < u4_num_rps_curr_temp_list1); r_idx++, i++)
  ------------------
  |  Branch (466:28): [True: 1.70k, False: 1.57k]
  |  Branch (466:60): [True: 1.66k, False: 45]
  ------------------
  467|  1.66k|                {
  468|  1.66k|                    if(NULL == as_ref_pic_lt_curr[i])
  ------------------
  |  Branch (468:24): [True: 0, False: 1.66k]
  ------------------
  469|      0|                    {
  470|      0|                        as_ref_pic_lt_curr[i] = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ai4_poc_lt_curr[i]);
  471|      0|                    }
  472|  1.66k|                    as_ref_pic_list_temp1[r_idx] = as_ref_pic_lt_curr[i];
  473|  1.66k|                }
  474|  1.61k|            }
  475|       |
  476|  4.72k|            for(r_idx = 0; (WORD32)r_idx < ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx++)
  ------------------
  |  Branch (476:28): [True: 3.49k, False: 1.22k]
  ------------------
  477|  3.49k|            {
  478|  3.49k|                pic_buf_t *ps_pic_buf;
  479|  3.49k|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = ps_slice_hdr->s_rplm.i1_ref_pic_list_modification_flag_l1 ?  (void *)as_ref_pic_list_temp1[ps_slice_hdr->s_rplm.i1_list_entry_l1[r_idx]] :  (void *)as_ref_pic_list_temp1[r_idx];
  ------------------
  |  Branch (479:68): [True: 768, False: 2.72k]
  ------------------
  480|  3.49k|                ps_pic_buf = (pic_buf_t *)ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf;
  481|       |
  482|  3.49k|                if(ps_pic_buf == NULL)
  ------------------
  |  Branch (482:20): [True: 0, False: 3.49k]
  ------------------
  483|      0|                    return IHEVCD_REF_PIC_NOT_FOUND;
  484|       |
  485|  3.49k|                ps_mv_buf = ihevcd_mv_mgr_get_poc(ps_mv_buf_mgr, ps_pic_buf->i4_abs_poc);
  486|  3.49k|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = ps_mv_buf;
  487|  3.49k|            }
  488|  1.22k|        }
  489|  1.33k|    }
  490|       |
  491|  2.17k|    DEBUG_PRINT_REF_LIST_POCS(i4_pic_order_cnt_val, ps_slice_hdr, ps_dpb_mgr, u4_num_st_curr_before, u4_num_st_curr_after, u4_num_st_foll, u4_num_lt_curr, u4_num_lt_foll, ai4_poc_st_curr_before, ai4_poc_st_curr_after, ai4_poc_st_foll, ai4_poc_lt_curr, ai4_poc_lt_foll);
  492|       |    /* Buffers that are still marked as UNUSED_FOR_REF are released from dpb (internally dpb calls release from pic buf manager)*/
  493|   141k|    for(i = 0; i < MAX_DPB_BUFS; i++)
  ------------------
  |  |   41|   141k|#define MAX_DPB_BUFS                (MAX_DPB_SIZE * 4)
  |  |  ------------------
  |  |  |  |  281|   141k|#define MAX_DPB_SIZE 16
  |  |  ------------------
  ------------------
  |  Branch (493:16): [True: 138k, False: 2.17k]
  ------------------
  494|   138k|    {
  495|   138k|        if((ps_dpb_mgr->as_dpb_info[i].ps_pic_buf) && (UNUSED_FOR_REF == ps_dpb_mgr->as_dpb_info[i].ps_pic_buf->u1_used_as_ref))
  ------------------
  |  Branch (495:12): [True: 2.92k, False: 135k]
  |  Branch (495:55): [True: 1.03k, False: 1.89k]
  ------------------
  496|  1.03k|        {
  497|  1.03k|            pic_buf_t *ps_pic_buf = ps_dpb_mgr->as_dpb_info[i].ps_pic_buf;
  498|  1.03k|            mv_buf_t *ps_mv_buf;
  499|       |
  500|       |            /* Long term index is set to MAX_DPB_BUFS to ensure it is not added as LT */
  501|  1.03k|            ihevc_dpb_mgr_del_ref(ps_dpb_mgr, (buf_mgr_t *)ps_codec->pv_pic_buf_mgr, ps_pic_buf->i4_abs_poc);
  502|       |
  503|       |
  504|       |            /* Find buffer id of the MV bank corresponding to the buffer being freed (Buffer with POC of u4_abs_poc) */
  505|  1.03k|            ps_mv_buf = (mv_buf_t *)ps_codec->ps_mv_buf;
  506|  2.18k|            for(j = 0; j < ps_codec->i4_max_dpb_size; j++)
  ------------------
  |  Branch (506:24): [True: 2.18k, False: 0]
  ------------------
  507|  2.18k|            {
  508|  2.18k|                if(ps_mv_buf && ps_mv_buf->i4_abs_poc == ps_pic_buf->i4_abs_poc)
  ------------------
  |  Branch (508:20): [True: 2.18k, False: 0]
  |  Branch (508:33): [True: 1.03k, False: 1.15k]
  ------------------
  509|  1.03k|                {
  510|  1.03k|                    ihevc_buf_mgr_release((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, j, BUF_MGR_REF);
  ------------------
  |  |   40|  1.03k|#define BUF_MGR_REF         (1 << 1)
  ------------------
  511|  1.03k|                    break;
  512|  1.03k|                }
  513|  1.15k|                ps_mv_buf++;
  514|  1.15k|            }
  515|  1.03k|        }
  516|       |
  517|   138k|    }
  518|       |
  519|  2.17k|    return IHEVCD_SUCCESS;
  520|  2.30k|}

ihevcd_sao_shift_ctb:
  525|  6.24M|{
  526|  6.24M|    codec_t *ps_codec = ps_sao_ctxt->ps_codec;
  527|  6.24M|    UWORD8 *pu1_src_luma;
  528|  6.24M|    UWORD8 *pu1_src_chroma;
  529|  6.24M|    WORD32 src_strd;
  530|  6.24M|    WORD32 ctb_size;
  531|  6.24M|    WORD32 log2_ctb_size;
  532|  6.24M|    sps_t *ps_sps;
  533|  6.24M|    sao_t *ps_sao;
  534|  6.24M|    pps_t *ps_pps;
  535|  6.24M|    slice_header_t *ps_slice_hdr, *ps_slice_hdr_base;
  536|  6.24M|    tile_t *ps_tile;
  537|  6.24M|    UWORD16 *pu1_slice_idx;
  538|  6.24M|    UWORD16 *pu1_tile_idx;
  539|  6.24M|    WORD32 row, col;
  540|  6.24M|    UWORD8 au1_avail_luma[8];
  541|  6.24M|    UWORD8 au1_avail_chroma[8];
  542|  6.24M|    UWORD8 au1_tile_slice_boundary[8];
  543|  6.24M|    UWORD8 au4_ilf_across_tile_slice_enable[8];
  544|  6.24M|    WORD32 i;
  545|  6.24M|    UWORD8 *pu1_src_top_luma;
  546|  6.24M|    UWORD8 *pu1_src_top_chroma;
  547|  6.24M|    UWORD8 *pu1_src_left_luma;
  548|  6.24M|    UWORD8 *pu1_src_left_chroma;
  549|  6.24M|    UWORD8 au1_src_top_right[2];
  550|  6.24M|    UWORD8 au1_src_bot_left[2];
  551|  6.24M|    UWORD8 *pu1_no_loop_filter_flag;
  552|  6.24M|    UWORD8 *pu1_src_backup_luma;
  553|  6.24M|    UWORD8 *pu1_src_backup_chroma;
  554|  6.24M|    WORD32 backup_strd;
  555|  6.24M|    WORD32 loop_filter_strd;
  556|       |
  557|  6.24M|    WORD32 no_loop_filter_enabled_luma = 0;
  558|  6.24M|    WORD32 no_loop_filter_enabled_chroma = 0;
  559|  6.24M|    UWORD8 *pu1_sao_src_top_left_chroma_curr_ctb;
  560|  6.24M|    UWORD8 *pu1_sao_src_top_left_luma_curr_ctb;
  561|  6.24M|    UWORD8 *pu1_sao_src_luma_top_left_ctb;
  562|  6.24M|    UWORD8 *pu1_sao_src_chroma_top_left_ctb;
  563|  6.24M|    UWORD8 *pu1_sao_src_top_left_luma_top_right;
  564|  6.24M|    UWORD8 *pu1_sao_src_top_left_chroma_top_right;
  565|  6.24M|    UWORD8  u1_sao_src_top_left_luma_bot_left;
  566|  6.24M|    UWORD8  *pu1_sao_src_top_left_luma_bot_left;
  567|  6.24M|    UWORD8 *au1_sao_src_top_left_chroma_bot_left;
  568|  6.24M|    UWORD8 *pu1_sao_src_top_left_chroma_bot_left;
  569|       |    /* Only first 5 values are used, but arrays are large
  570|       |     enough so that SIMD functions can read 64 bits at a time */
  571|  6.24M|    WORD8 ai1_offset_y[8] = {0};
  572|  6.24M|    WORD8 ai1_offset_cb[8] = {0};
  573|  6.24M|    WORD8 ai1_offset_cr[8] = {0};
  574|  6.24M|    WORD32  chroma_yuv420sp_vu = ps_sao_ctxt->is_chroma_yuv420sp_vu;
  575|       |
  576|  6.24M|    PROFILE_DISABLE_SAO();
  ------------------
  |  |   51|  6.24M|#define PROFILE_DISABLE_SAO() ;
  ------------------
  577|       |
  578|  6.24M|    ps_sps = ps_sao_ctxt->ps_sps;
  579|  6.24M|    ps_pps = ps_sao_ctxt->ps_pps;
  580|  6.24M|    ps_tile = ps_sao_ctxt->ps_tile;
  581|       |
  582|  6.24M|    log2_ctb_size = ps_sps->i1_log2_ctb_size;
  583|  6.24M|    ctb_size = (1 << log2_ctb_size);
  584|  6.24M|    src_strd = ps_sao_ctxt->ps_codec->i4_strd;
  585|  6.24M|    ps_slice_hdr_base = ps_sao_ctxt->ps_codec->ps_slice_hdr_base;
  586|  6.24M|    ps_slice_hdr = ps_slice_hdr_base + (ps_sao_ctxt->i4_cur_slice_idx & (MAX_SLICE_HDR_CNT - 1));
  ------------------
  |  |  153|  6.24M|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  6.24M|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  587|       |
  588|  6.24M|    pu1_slice_idx = ps_sao_ctxt->pu1_slice_idx;
  589|  6.24M|    pu1_tile_idx = ps_sao_ctxt->pu1_tile_idx;
  590|  6.24M|    pu1_src_luma = ps_sao_ctxt->pu1_cur_pic_luma + ((ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sao_ctxt->ps_codec->i4_strd) << (log2_ctb_size));
  591|  6.24M|    pu1_src_chroma = ps_sao_ctxt->pu1_cur_pic_chroma + ((ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sao_ctxt->ps_codec->i4_strd / 2) << (log2_ctb_size));
  592|       |
  593|       |    /*Stores the left value for each row ctbs- Needed for column tiles*/
  594|  6.24M|    pu1_sao_src_top_left_luma_curr_ctb = ps_sao_ctxt->pu1_sao_src_top_left_luma_curr_ctb + ((ps_sao_ctxt->i4_ctb_y));
  595|  6.24M|    pu1_sao_src_top_left_chroma_curr_ctb = ps_sao_ctxt->pu1_sao_src_top_left_chroma_curr_ctb + (2 * (ps_sao_ctxt->i4_ctb_y));
  596|  6.24M|    pu1_sao_src_luma_top_left_ctb = ps_sao_ctxt->pu1_sao_src_luma_top_left_ctb + ((ps_sao_ctxt->i4_ctb_y));
  597|  6.24M|    pu1_sao_src_chroma_top_left_ctb = ps_sao_ctxt->pu1_sao_src_chroma_top_left_ctb + (2 * ps_sao_ctxt->i4_ctb_y);
  598|  6.24M|    u1_sao_src_top_left_luma_bot_left = ps_sao_ctxt->u1_sao_src_top_left_luma_bot_left; // + ((ps_sao_ctxt->i4_ctb_y));
  599|  6.24M|    pu1_sao_src_top_left_luma_bot_left = ps_sao_ctxt->pu1_sao_src_top_left_luma_bot_left + ((ps_sao_ctxt->i4_ctb_y));
  600|  6.24M|    au1_sao_src_top_left_chroma_bot_left = ps_sao_ctxt->au1_sao_src_top_left_chroma_bot_left; // + (2 * ps_sao_ctxt->i4_ctb_y);
  601|  6.24M|    pu1_sao_src_top_left_chroma_bot_left = ps_sao_ctxt->pu1_sao_src_top_left_chroma_bot_left + (2 * ps_sao_ctxt->i4_ctb_y);
  602|  6.24M|    pu1_sao_src_top_left_luma_top_right = ps_sao_ctxt->pu1_sao_src_top_left_luma_top_right + ((ps_sao_ctxt->i4_ctb_x));
  603|  6.24M|    pu1_sao_src_top_left_chroma_top_right = ps_sao_ctxt->pu1_sao_src_top_left_chroma_top_right + (2 * ps_sao_ctxt->i4_ctb_x);
  604|       |
  605|  6.24M|    ps_sao = ps_sao_ctxt->ps_pic_sao + ps_sao_ctxt->i4_ctb_x + ps_sao_ctxt->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb;
  606|  6.24M|    loop_filter_strd =  (ps_sps->i2_pic_width_in_luma_samples + 63) >> 6;
  607|  6.24M|    backup_strd = 2 * MAX_CTB_SIZE;
  ------------------
  |  |  341|  6.24M|#define MAX_CTB_SIZE        64
  ------------------
  608|       |
  609|  6.24M|    DEBUG_INIT_TMP_BUF(ps_sao_ctxt->pu1_tmp_buf_luma, ps_sao_ctxt->pu1_tmp_buf_chroma);
  610|       |
  611|  6.24M|    {
  612|       |        /* Check the loop filter flags and copy the original values for back up */
  613|       |        /* Luma */
  614|       |
  615|       |        /* Done unconditionally since SAO is done on a shifted CTB and the constituent CTBs
  616|       |         * can belong to different slice with their own sao_enable flag */
  617|  6.24M|        {
  618|  6.24M|            UWORD32 u4_no_loop_filter_flag;
  619|  6.24M|            WORD32 loop_filter_bit_pos;
  620|  6.24M|            WORD32 log2_min_cu = 3;
  621|  6.24M|            WORD32 min_cu = (1 << log2_min_cu);
  622|  6.24M|            UWORD8 *pu1_src_tmp_luma = pu1_src_luma;
  623|  6.24M|            WORD32 sao_blk_ht = ctb_size - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  624|  6.24M|            WORD32 sao_blk_wd = ctb_size;
  625|  6.24M|            WORD32 remaining_rows;
  626|  6.24M|            WORD32 remaining_cols;
  627|       |
  628|  6.24M|            remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB);
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  629|  6.24M|            remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB);
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  630|  6.24M|            if(remaining_rows <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (630:16): [True: 166k, False: 6.07M]
  ------------------
  631|   166k|                sao_blk_ht += remaining_rows;
  632|  6.24M|            if(remaining_cols <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (632:16): [True: 126k, False: 6.11M]
  ------------------
  633|   126k|                sao_blk_wd += remaining_cols;
  634|       |
  635|  6.24M|            pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB : 0;
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (635:33): [True: 6.11M, False: 127k]
  ------------------
  636|  6.24M|            pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (636:33): [True: 6.07M, False: 168k]
  ------------------
  637|       |
  638|  6.24M|            pu1_src_backup_luma = ps_sao_ctxt->pu1_tmp_buf_luma;
  639|       |
  640|  6.24M|            loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) +
  641|  6.24M|                            (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3);
  642|  6.24M|            if(ps_sao_ctxt->i4_ctb_x > 0)
  ------------------
  |  Branch (642:16): [True: 6.11M, False: 128k]
  ------------------
  643|  6.11M|                loop_filter_bit_pos -= 1;
  644|       |
  645|  6.24M|            pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag +
  646|  6.24M|                            (loop_filter_bit_pos >> 3);
  647|       |
  648|  6.24M|            for(i = -(ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB : 0) >> log2_min_cu;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (648:23): [True: 6.07M, False: 167k]
  ------------------
  649|  25.6M|                            i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++)
  ------------------
  |  Branch (649:29): [True: 19.4M, False: 6.24M]
  ------------------
  650|  19.4M|            {
  651|  19.4M|                WORD32 tmp_wd = sao_blk_wd;
  652|       |
  653|  19.4M|                u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >>
  654|  19.4M|                                (loop_filter_bit_pos & 7);
  655|  19.4M|                u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1;
  656|       |
  657|  19.4M|                if(u4_no_loop_filter_flag)
  ------------------
  |  Branch (657:20): [True: 80.1k, False: 19.3M]
  ------------------
  658|  80.1k|                {
  659|  80.1k|                    no_loop_filter_enabled_luma = 1;
  660|   214k|                    while(tmp_wd > 0)
  ------------------
  |  Branch (660:27): [True: 134k, False: 80.1k]
  ------------------
  661|   134k|                    {
  662|   134k|                        if(CTZ(u4_no_loop_filter_flag))
  ------------------
  |  Branch (662:28): [True: 47.0k, False: 87.3k]
  ------------------
  663|  47.0k|                        {
  664|  47.0k|                            pu1_src_tmp_luma += MIN((WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  47.0k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 23.8k, False: 23.1k]
  |  |  ------------------
  ------------------
  665|  47.0k|                            pu1_src_backup_luma += MIN((WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  47.0k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 23.8k, False: 23.1k]
  |  |  ------------------
  ------------------
  666|  47.0k|                            tmp_wd -= (WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu);
  667|  47.0k|                            u4_no_loop_filter_flag  >>= (CTZ(u4_no_loop_filter_flag));
  668|  47.0k|                        }
  669|  87.3k|                        else
  670|  87.3k|                        {
  671|   756k|                            for(row = 0; row < min_cu; row++)
  ------------------
  |  Branch (671:42): [True: 669k, False: 87.3k]
  ------------------
  672|   669k|                            {
  673|  25.5M|                                for(col = 0; col < MIN((WORD32)(CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++)
  ------------------
  |  |   43|  25.5M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 3.88M, False: 21.6M]
  |  |  ------------------
  ------------------
  |  Branch (673:46): [True: 24.8M, False: 669k]
  ------------------
  674|  24.8M|                                {
  675|  24.8M|                                    pu1_src_backup_luma[row * backup_strd + col] = pu1_src_tmp_luma[row * src_strd + col];
  676|  24.8M|                                }
  677|   669k|                            }
  678|  87.3k|                            pu1_src_tmp_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  87.3k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 30.7k, False: 56.5k]
  |  |  ------------------
  ------------------
  679|  87.3k|                            pu1_src_backup_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  87.3k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 30.7k, False: 56.6k]
  |  |  ------------------
  ------------------
  680|  87.3k|                            tmp_wd -= (WORD32)(CTZ(~u4_no_loop_filter_flag) << log2_min_cu);
  681|  87.3k|                            u4_no_loop_filter_flag  >>= (CTZ(~u4_no_loop_filter_flag));
  682|  87.3k|                        }
  683|   134k|                    }
  684|       |
  685|  80.1k|                    pu1_src_tmp_luma -= sao_blk_wd;
  686|  80.1k|                    pu1_src_backup_luma -= sao_blk_wd;
  687|  80.1k|                }
  688|       |
  689|  19.4M|                pu1_src_tmp_luma += (src_strd << log2_min_cu);
  690|  19.4M|                pu1_src_backup_luma += (backup_strd << log2_min_cu);
  691|  19.4M|            }
  692|  6.24M|        }
  693|       |
  694|       |        /* Chroma */
  695|       |
  696|  6.24M|        {
  697|  6.24M|            UWORD32 u4_no_loop_filter_flag;
  698|  6.24M|            WORD32 loop_filter_bit_pos;
  699|  6.24M|            WORD32 log2_min_cu = 3;
  700|  6.24M|            WORD32 min_cu = (1 << log2_min_cu);
  701|  6.24M|            UWORD8 *pu1_src_tmp_chroma = pu1_src_chroma;
  702|  6.24M|            WORD32 sao_blk_ht = ctb_size - 2 * SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  703|  6.24M|            WORD32 sao_blk_wd = ctb_size;
  704|  6.24M|            WORD32 remaining_rows;
  705|  6.24M|            WORD32 remaining_cols;
  706|       |
  707|  6.24M|            remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB);
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  708|  6.24M|            remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB);
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  709|  6.24M|            if(remaining_rows <= 2 * SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (709:16): [True: 166k, False: 6.07M]
  ------------------
  710|   166k|                sao_blk_ht += remaining_rows;
  711|  6.24M|            if(remaining_cols <= 2 * SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (711:16): [True: 126k, False: 6.11M]
  ------------------
  712|   126k|                sao_blk_wd += remaining_cols;
  713|       |
  714|  6.24M|            pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB * 2 : 0;
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (714:35): [True: 6.11M, False: 125k]
  ------------------
  715|  6.24M|            pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (715:35): [True: 6.07M, False: 165k]
  ------------------
  716|       |
  717|  6.24M|            pu1_src_backup_chroma = ps_sao_ctxt->pu1_tmp_buf_chroma;
  718|       |
  719|  6.24M|            loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) +
  720|  6.24M|                            (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3);
  721|  6.24M|            if(ps_sao_ctxt->i4_ctb_x > 0)
  ------------------
  |  Branch (721:16): [True: 6.11M, False: 125k]
  ------------------
  722|  6.11M|                loop_filter_bit_pos -= 2;
  723|       |
  724|  6.24M|            pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag +
  725|  6.24M|                            (loop_filter_bit_pos >> 3);
  726|       |
  727|  6.24M|            for(i = -(ps_sao_ctxt->i4_ctb_y ? 2 * SAO_SHIFT_CTB : 0) >> log2_min_cu;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (727:23): [True: 6.07M, False: 165k]
  ------------------
  728|  25.7M|                            i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++)
  ------------------
  |  Branch (728:29): [True: 19.4M, False: 6.24M]
  ------------------
  729|  19.4M|            {
  730|  19.4M|                WORD32 tmp_wd = sao_blk_wd;
  731|       |
  732|  19.4M|                u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >>
  733|  19.4M|                                (loop_filter_bit_pos & 7);
  734|  19.4M|                u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1;
  735|       |
  736|  19.4M|                if(u4_no_loop_filter_flag)
  ------------------
  |  Branch (736:20): [True: 80.3k, False: 19.3M]
  ------------------
  737|  80.3k|                {
  738|  80.3k|                    no_loop_filter_enabled_chroma = 1;
  739|   211k|                    while(tmp_wd > 0)
  ------------------
  |  Branch (739:27): [True: 130k, False: 80.3k]
  ------------------
  740|   130k|                    {
  741|   130k|                        if(CTZ(u4_no_loop_filter_flag))
  ------------------
  |  Branch (741:28): [True: 44.6k, False: 85.9k]
  ------------------
  742|  44.6k|                        {
  743|  44.6k|                            pu1_src_tmp_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  44.6k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 21.6k, False: 22.9k]
  |  |  ------------------
  ------------------
  744|  44.6k|                            pu1_src_backup_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  44.6k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 21.6k, False: 22.9k]
  |  |  ------------------
  ------------------
  745|  44.6k|                            tmp_wd -= (WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu);
  746|  44.6k|                            u4_no_loop_filter_flag  >>= (CTZ(u4_no_loop_filter_flag));
  747|  44.6k|                        }
  748|  85.9k|                        else
  749|  85.9k|                        {
  750|   425k|                            for(row = 0; row < min_cu / 2; row++)
  ------------------
  |  Branch (750:42): [True: 339k, False: 85.9k]
  ------------------
  751|   339k|                            {
  752|  14.2M|                                for(col = 0; col < MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++)
  ------------------
  |  |   43|  14.2M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 2.32M, False: 11.8M]
  |  |  ------------------
  ------------------
  |  Branch (752:46): [True: 13.8M, False: 339k]
  ------------------
  753|  13.8M|                                {
  754|  13.8M|                                    pu1_src_backup_chroma[row * backup_strd + col] = pu1_src_tmp_chroma[row * src_strd + col];
  755|  13.8M|                                }
  756|   339k|                            }
  757|       |
  758|  85.9k|                            pu1_src_tmp_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  85.9k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 28.7k, False: 57.2k]
  |  |  ------------------
  ------------------
  759|  85.9k|                            pu1_src_backup_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  85.9k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 28.7k, False: 57.2k]
  |  |  ------------------
  ------------------
  760|  85.9k|                            tmp_wd -= (WORD32)(CTZ(~u4_no_loop_filter_flag) << log2_min_cu);
  761|  85.9k|                            u4_no_loop_filter_flag  >>= (CTZ(~u4_no_loop_filter_flag));
  762|  85.9k|                        }
  763|   130k|                    }
  764|       |
  765|  80.3k|                    pu1_src_tmp_chroma -= sao_blk_wd;
  766|  80.3k|                    pu1_src_backup_chroma -= sao_blk_wd;
  767|  80.3k|                }
  768|       |
  769|  19.4M|                pu1_src_tmp_chroma += ((src_strd / 2) << log2_min_cu);
  770|  19.4M|                pu1_src_backup_chroma += ((backup_strd / 2) << log2_min_cu);
  771|  19.4M|            }
  772|  6.24M|        }
  773|  6.24M|    }
  774|       |
  775|  6.24M|    DEBUG_PROCESS_TMP_BUF(ps_sao_ctxt->pu1_tmp_buf_luma, ps_sao_ctxt->pu1_tmp_buf_chroma);
  776|       |
  777|       |    /* Top-left CTB */
  778|  6.24M|    if(ps_sao_ctxt->i4_ctb_x > 0 && ps_sao_ctxt->i4_ctb_y > 0)
  ------------------
  |  Branch (778:8): [True: 6.11M, False: 125k]
  |  Branch (778:37): [True: 5.95M, False: 160k]
  ------------------
  779|  5.95M|    {
  780|  5.95M|        WORD32 sao_wd_luma = SAO_SHIFT_CTB;
  ------------------
  |  |   78|  5.95M|#define SAO_SHIFT_CTB    8
  ------------------
  781|  5.95M|        WORD32 sao_wd_chroma = 2 * SAO_SHIFT_CTB;
  ------------------
  |  |   78|  5.95M|#define SAO_SHIFT_CTB    8
  ------------------
  782|  5.95M|        WORD32 sao_ht_luma = SAO_SHIFT_CTB;
  ------------------
  |  |   78|  5.95M|#define SAO_SHIFT_CTB    8
  ------------------
  783|  5.95M|        WORD32 sao_ht_chroma = SAO_SHIFT_CTB;
  ------------------
  |  |   78|  5.95M|#define SAO_SHIFT_CTB    8
  ------------------
  784|       |
  785|  5.95M|        WORD32 ctbx_tl_t = 0, ctbx_tl_l = 0, ctbx_tl_r = 0, ctbx_tl_d = 0, ctbx_tl = 0;
  786|  5.95M|        WORD32 ctby_tl_t = 0, ctby_tl_l = 0, ctby_tl_r = 0, ctby_tl_d = 0, ctby_tl = 0;
  787|  5.95M|        WORD32 au4_idx_tl[8], idx_tl;
  788|       |
  789|  5.95M|        slice_header_t *ps_slice_hdr_top_left;
  790|  5.95M|        {
  791|  5.95M|            WORD32 top_left_ctb_indx = (ps_sao_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb +
  792|  5.95M|                                        (ps_sao_ctxt->i4_ctb_x - 1);
  793|  5.95M|            ps_slice_hdr_top_left = ps_slice_hdr_base + pu1_slice_idx[top_left_ctb_indx];
  794|  5.95M|        }
  795|       |
  796|       |
  797|  5.95M|        pu1_src_luma -= (sao_wd_luma + sao_ht_luma * src_strd);
  798|  5.95M|        pu1_src_chroma -= (sao_wd_chroma + sao_ht_chroma * src_strd);
  799|  5.95M|        ps_sao -= (1 + ps_sps->i2_pic_wd_in_ctb);
  800|  5.95M|        pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma;
  801|  5.95M|        pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma;
  802|  5.95M|        pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma;
  803|  5.95M|        pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - (2 * sao_ht_chroma);
  804|       |
  805|  5.95M|        if(ps_slice_hdr_top_left->i1_slice_sao_luma_flag)
  ------------------
  |  Branch (805:12): [True: 2.87M, False: 3.08M]
  ------------------
  806|  2.87M|        {
  807|  2.87M|            if(0 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (807:16): [True: 2.85M, False: 22.0k]
  ------------------
  808|  2.85M|            {
  809|       |                /* Update left, top and top-left */
  810|  25.6M|                for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (810:30): [True: 22.8M, False: 2.85M]
  ------------------
  811|  22.8M|                {
  812|  22.8M|                    pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
  813|  22.8M|                }
  814|  2.85M|                pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
  815|       |
  816|  2.85M|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
  817|       |
  818|       |
  819|  2.85M|            }
  820|       |
  821|  22.0k|            else if(1 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (821:21): [True: 13.4k, False: 8.64k]
  ------------------
  822|  13.4k|            {
  823|  13.4k|                ai1_offset_y[1] = ps_sao->b4_y_offset_1;
  824|  13.4k|                ai1_offset_y[2] = ps_sao->b4_y_offset_2;
  825|  13.4k|                ai1_offset_y[3] = ps_sao->b4_y_offset_3;
  826|  13.4k|                ai1_offset_y[4] = ps_sao->b4_y_offset_4;
  827|       |
  828|  13.4k|                ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma,
  829|  13.4k|                                                                          src_strd,
  830|  13.4k|                                                                          pu1_src_left_luma,
  831|  13.4k|                                                                          pu1_src_top_luma,
  832|  13.4k|                                                                          pu1_sao_src_luma_top_left_ctb,
  833|  13.4k|                                                                          ps_sao->b5_y_band_pos,
  834|  13.4k|                                                                          ai1_offset_y,
  835|  13.4k|                                                                          sao_wd_luma,
  836|  13.4k|                                                                          sao_ht_luma
  837|  13.4k|                                                                         );
  838|  13.4k|            }
  839|       |
  840|  8.64k|            else // if(2 <= ps_sao->b3_y_type_idx)
  841|  8.64k|            {
  842|  8.64k|                ai1_offset_y[1] = ps_sao->b4_y_offset_1;
  843|  8.64k|                ai1_offset_y[2] = ps_sao->b4_y_offset_2;
  844|  8.64k|                ai1_offset_y[3] = ps_sao->b4_y_offset_3;
  845|  8.64k|                ai1_offset_y[4] = ps_sao->b4_y_offset_4;
  846|       |
  847|  78.4k|                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (847:28): [True: 69.8k, False: 8.64k]
  ------------------
  848|  69.8k|                {
  849|  69.8k|                    au1_avail_luma[i] = 255;
  850|  69.8k|                    au1_tile_slice_boundary[i] = 0;
  851|  69.8k|                    au4_idx_tl[i] = 0;
  852|  69.8k|                    au4_ilf_across_tile_slice_enable[i] = 1;
  853|  69.8k|                }
  854|       |
  855|       |                /******************************************************************
  856|       |                 * Derive the  Top-left CTB's neighbor pixel's slice indices.
  857|       |                 *
  858|       |                 *          TL_T
  859|       |                 *       4  _2__5________
  860|       |                 *     0   |    |       |
  861|       |                 *    TL_L | TL | 1 TL_R|
  862|       |                 *         |____|_______|____
  863|       |                 *        6|TL_D|7      |    |
  864|       |                 *         | 3  |       |    |
  865|       |                 *         |____|_______|    |
  866|       |                 *              |            |
  867|       |                 *              |            |
  868|       |                 *              |____________|
  869|       |                 *
  870|       |                 *****************************************************************/
  871|       |
  872|       |                /*In case of slices, unless we encounter multiple slice/tiled clips, don't enter*/
  873|  8.64k|                {
  874|  8.64k|                    if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (874:24): [True: 196, False: 8.44k]
  |  Branch (874:71): [True: 825, False: 7.62k]
  ------------------
  875|  1.10k|                    {
  876|  1.10k|                        {
  877|       |                            /*Assuming that sao shift is uniform along x and y directions*/
  878|  1.10k|                            if((0 == (1 << log2_ctb_size) - sao_wd_luma) && (ps_sao_ctxt->i4_ctb_y > 1) && (ps_sao_ctxt->i4_ctb_x > 1))
  ------------------
  |  Branch (878:32): [True: 0, False: 1.10k]
  |  Branch (878:77): [True: 0, False: 0]
  |  Branch (878:108): [True: 0, False: 0]
  ------------------
  879|      0|                            {
  880|      0|                                ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 2;
  881|      0|                                ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 2;
  882|      0|                            }
  883|  1.10k|                            else if(!(0 == (1 << log2_ctb_size) - sao_wd_luma))
  ------------------
  |  Branch (883:37): [True: 1.10k, False: 2]
  ------------------
  884|  1.10k|                            {
  885|  1.10k|                                ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 1;
  886|  1.10k|                                ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 1;
  887|  1.10k|                            }
  888|  1.10k|                            ctbx_tl_t = ps_sao_ctxt->i4_ctb_x - 1;
  889|  1.10k|                            ctby_tl_l = ps_sao_ctxt->i4_ctb_y - 1;
  890|       |
  891|  1.10k|                            ctbx_tl_r = ps_sao_ctxt->i4_ctb_x;
  892|  1.10k|                            ctby_tl_r = ps_sao_ctxt->i4_ctb_y - 1;
  893|       |
  894|  1.10k|                            ctbx_tl_d =  ps_sao_ctxt->i4_ctb_x - 1;
  895|  1.10k|                            ctby_tl_d =  ps_sao_ctxt->i4_ctb_y;
  896|       |
  897|  1.10k|                            ctbx_tl = ps_sao_ctxt->i4_ctb_x - 1;
  898|  1.10k|                            ctby_tl = ps_sao_ctxt->i4_ctb_y - 1;
  899|  1.10k|                        }
  900|       |
  901|  1.10k|                        if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (901:28): [True: 278, False: 825]
  ------------------
  902|    278|                        {
  903|       |                            /*Calculate slice indices for neighbor pixels*/
  904|    278|                            idx_tl   = pu1_slice_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)];
  905|    278|                            au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_slice_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb));
  906|    278|                            au4_idx_tl[0] =  pu1_slice_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
  907|    278|                            au4_idx_tl[1] = au4_idx_tl[5] = pu1_slice_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
  908|    278|                            au4_idx_tl[3] = au4_idx_tl[6] =   pu1_slice_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
  909|    278|                            au4_idx_tl[7] = pu1_slice_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
  910|       |
  911|    278|                            if((0 == (1 << log2_ctb_size) - sao_wd_luma))
  ------------------
  |  Branch (911:32): [True: 0, False: 278]
  ------------------
  912|      0|                            {
  913|      0|                                if(ps_sao_ctxt->i4_ctb_x == 1)
  ------------------
  |  Branch (913:36): [True: 0, False: 0]
  ------------------
  914|      0|                                {
  915|      0|                                    au4_idx_tl[6] = -1;
  916|      0|                                    au4_idx_tl[4] = -1;
  917|      0|                                }
  918|      0|                                else
  919|      0|                                {
  920|      0|                                    au4_idx_tl[6] = pu1_slice_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
  921|      0|                                }
  922|      0|                                if(ps_sao_ctxt->i4_ctb_y == 1)
  ------------------
  |  Branch (922:36): [True: 0, False: 0]
  ------------------
  923|      0|                                {
  924|      0|                                    au4_idx_tl[5] = -1;
  925|      0|                                    au4_idx_tl[4] = -1;
  926|      0|                                }
  927|      0|                                else
  928|      0|                                {
  929|      0|                                    au4_idx_tl[5] = pu1_slice_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
  930|      0|                                    au4_idx_tl[4] = pu1_slice_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)];
  931|      0|                                }
  932|      0|                                au4_idx_tl[7] = pu1_slice_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
  933|      0|                            }
  934|       |
  935|       |                            /* Verify that the neighbor ctbs dont cross pic boundary.
  936|       |                             * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
  937|       |                             * of the pixel having a greater address is checked. Accordingly, set the availability flags.
  938|       |                             * Hence, for top and left pixels, current ctb flag is checked. For right and down pixels,
  939|       |                             * the respective pixel's flags are checked
  940|       |                             */
  941|       |
  942|    278|                            if((0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma))
  ------------------
  |  Branch (942:32): [True: 0, False: 278]
  ------------------
  943|      0|                            {
  944|      0|                                au4_ilf_across_tile_slice_enable[4] = 0;
  945|      0|                                au4_ilf_across_tile_slice_enable[6] = 0;
  946|      0|                            }
  947|    278|                            else
  948|    278|                            {
  949|    278|                                au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_tl[6])->i1_slice_loop_filter_across_slices_enabled_flag;
  950|    278|                            }
  951|    278|                            if((0 == (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma))
  ------------------
  |  Branch (951:32): [True: 0, False: 278]
  ------------------
  952|      0|                            {
  953|      0|                                au4_ilf_across_tile_slice_enable[5] = 0;
  954|      0|                                au4_ilf_across_tile_slice_enable[4] = 0;
  955|      0|                            }
  956|    278|                            else
  957|    278|                            {
  958|    278|                                au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
  959|    278|                                au4_ilf_across_tile_slice_enable[4] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
  960|    278|                            }
  961|    278|                            au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
  962|    278|                            au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
  963|    278|                            au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_tl[1])->i1_slice_loop_filter_across_slices_enabled_flag;
  964|    278|                            au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_tl[3])->i1_slice_loop_filter_across_slices_enabled_flag;
  965|    278|                            au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_tl[7])->i1_slice_loop_filter_across_slices_enabled_flag;
  966|       |
  967|    278|                            if(au4_idx_tl[5] > idx_tl)
  ------------------
  |  Branch (967:32): [True: 184, False: 94]
  ------------------
  968|    184|                            {
  969|    184|                                au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_tl[5])->i1_slice_loop_filter_across_slices_enabled_flag;
  970|    184|                            }
  971|       |
  972|       |                            /*
  973|       |                             * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
  974|       |                             * of the pixel having a greater address is checked. Accordingly, set the availability flags.
  975|       |                             * Hence, for top and left pixels, current ctb flag is checked. For right and down pixels,
  976|       |                             * the respective pixel's flags are checked
  977|       |                             */
  978|  2.50k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (978:40): [True: 2.22k, False: 278]
  ------------------
  979|  2.22k|                            {
  980|       |                                /*Sets the edges that lie on the slice/tile boundary*/
  981|  2.22k|                                if(au4_idx_tl[i] != idx_tl)
  ------------------
  |  Branch (981:36): [True: 729, False: 1.49k]
  ------------------
  982|    729|                                {
  983|    729|                                    au1_tile_slice_boundary[i] = 1;
  984|    729|                                }
  985|  1.49k|                                else
  986|  1.49k|                                {
  987|  1.49k|                                    au4_ilf_across_tile_slice_enable[i] = 1;
  988|  1.49k|                                }
  989|  2.22k|                            }
  990|       |
  991|    278|                            ps_codec->s_func_selector.ihevc_memset_mul_8_fptr((UWORD8 *)au4_idx_tl, 0, 8 * sizeof(WORD32));
  992|    278|                        }
  993|       |
  994|  1.10k|                        if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (994:28): [True: 980, False: 123]
  ------------------
  995|    980|                        {
  996|       |                            /* Calculate availability flags at slice boundary */
  997|    980|                            if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (997:33): [True: 197, False: 783]
  |  Branch (997:81): [True: 290, False: 493]
  |  Branch (997:133): [True: 297, False: 197]
  |  Branch (997:161): [True: 0, False: 297]
  ------------------
  998|    494|                            {
  999|       |                                /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 1000|    494|                                if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (1000:36): [True: 247, False: 247]
  ------------------
 1001|    247|                                {
 1002|       |                                    /*Set the boundary arrays*/
 1003|       |                                    /*Calculate tile indices for neighbor pixels*/
 1004|    247|                                    idx_tl   = pu1_tile_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)];
 1005|    247|                                    au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_tile_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb));
 1006|    247|                                    au4_idx_tl[0] =  pu1_tile_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
 1007|    247|                                    au4_idx_tl[1] = au4_idx_tl[5] = pu1_tile_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
 1008|    247|                                    au4_idx_tl[3] = au4_idx_tl[6] =   pu1_tile_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1009|    247|                                    au4_idx_tl[7] = pu1_tile_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1010|       |
 1011|    247|                                    if((0 == (1 << log2_ctb_size) - sao_wd_luma))
  ------------------
  |  Branch (1011:40): [True: 0, False: 247]
  ------------------
 1012|      0|                                    {
 1013|      0|                                        if(ps_sao_ctxt->i4_ctb_x == 1)
  ------------------
  |  Branch (1013:44): [True: 0, False: 0]
  ------------------
 1014|      0|                                        {
 1015|      0|                                            au4_idx_tl[6] = -1;
 1016|      0|                                            au4_idx_tl[4] = -1;
 1017|      0|                                        }
 1018|      0|                                        else
 1019|      0|                                        {
 1020|      0|                                            au4_idx_tl[6] = pu1_tile_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
 1021|      0|                                        }
 1022|      0|                                        if(ps_sao_ctxt->i4_ctb_y == 1)
  ------------------
  |  Branch (1022:44): [True: 0, False: 0]
  ------------------
 1023|      0|                                        {
 1024|      0|                                            au4_idx_tl[5] = -1;
 1025|      0|                                            au4_idx_tl[4] = -1;
 1026|      0|                                        }
 1027|      0|                                        else
 1028|      0|                                        {
 1029|      0|                                            au4_idx_tl[5] = pu1_tile_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
 1030|      0|                                            au4_idx_tl[4] = pu1_tile_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)];
 1031|      0|                                        }
 1032|      0|                                        au4_idx_tl[7] = pu1_tile_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1033|      0|                                    }
 1034|  2.22k|                                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1034:48): [True: 1.97k, False: 247]
  ------------------
 1035|  1.97k|                                    {
 1036|       |                                        /*Sets the edges that lie on the tile boundary*/
 1037|  1.97k|                                        if(au4_idx_tl[i] != idx_tl)
  ------------------
  |  Branch (1037:44): [True: 741, False: 1.23k]
  ------------------
 1038|    741|                                        {
 1039|    741|                                            au1_tile_slice_boundary[i] |= 1;
 1040|    741|                                            au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0
 1041|    741|                                        }
 1042|  1.97k|                                    }
 1043|    247|                                }
 1044|    494|                            }
 1045|    980|                        }
 1046|       |
 1047|       |
 1048|       |                        /*Set availability flags based on tile and slice boundaries*/
 1049|  9.91k|                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1049:36): [True: 8.80k, False: 1.10k]
  ------------------
 1050|  8.80k|                        {
 1051|       |                            /*Sets the edges that lie on the slice/tile boundary*/
 1052|  8.80k|                            if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (1052:32): [True: 1.47k, False: 7.33k]
  |  Branch (1052:64): [True: 851, False: 619]
  ------------------
 1053|    851|                            {
 1054|    851|                                au1_avail_luma[i] = 0;
 1055|    851|                            }
 1056|  8.80k|                        }
 1057|  1.10k|                    }
 1058|  8.64k|                }
 1059|       |
 1060|  8.64k|                if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma)
  ------------------
  |  Branch (1060:20): [True: 0, False: 8.64k]
  ------------------
 1061|      0|                {
 1062|      0|                    au1_avail_luma[0] = 0;
 1063|      0|                    au1_avail_luma[4] = 0;
 1064|      0|                    au1_avail_luma[6] = 0;
 1065|      0|                }
 1066|       |
 1067|  8.64k|                if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1067:20): [True: 0, False: 8.64k]
  ------------------
 1068|      0|                {
 1069|      0|                    au1_avail_luma[1] = 0;
 1070|      0|                    au1_avail_luma[5] = 0;
 1071|      0|                    au1_avail_luma[7] = 0;
 1072|      0|                }
 1073|       |                //y==1 case
 1074|  8.64k|                if((0 == (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma))
  ------------------
  |  Branch (1074:20): [True: 0, False: 8.64k]
  ------------------
 1075|      0|                {
 1076|      0|                    au1_avail_luma[2] = 0;
 1077|      0|                    au1_avail_luma[4] = 0;
 1078|      0|                    au1_avail_luma[5] = 0;
 1079|      0|                }
 1080|  8.64k|                if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (1080:20): [True: 0, False: 8.64k]
  ------------------
 1081|      0|                {
 1082|      0|                    au1_avail_luma[3] = 0;
 1083|      0|                    au1_avail_luma[6] = 0;
 1084|      0|                    au1_avail_luma[7] = 0;
 1085|      0|                }
 1086|       |
 1087|  8.64k|                {
 1088|  8.64k|                    au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma];
 1089|  8.64k|                    u1_sao_src_top_left_luma_bot_left = pu1_src_left_luma[sao_ht_luma];
 1090|  8.64k|                    ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma,
 1091|  8.64k|                                                                      src_strd,
 1092|  8.64k|                                                                      pu1_src_left_luma,
 1093|  8.64k|                                                                      pu1_src_top_luma,
 1094|  8.64k|                                                                      pu1_sao_src_luma_top_left_ctb,
 1095|  8.64k|                                                                      au1_src_top_right,
 1096|  8.64k|                                                                      &u1_sao_src_top_left_luma_bot_left,
 1097|  8.64k|                                                                      au1_avail_luma,
 1098|  8.64k|                                                                      ai1_offset_y,
 1099|  8.64k|                                                                      sao_wd_luma,
 1100|  8.64k|                                                                      sao_ht_luma);
 1101|  8.64k|                }
 1102|  8.64k|            }
 1103|       |
 1104|  2.87M|        }
 1105|  3.08M|        else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (1105:17): [True: 1.85M, False: 1.22M]
  |  Branch (1105:64): [True: 124k, False: 1.10M]
  ------------------
 1106|  1.97M|        {
 1107|       |            /* Update left, top and top-left */
 1108|  17.8M|            for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (1108:26): [True: 15.8M, False: 1.97M]
  ------------------
 1109|  15.8M|            {
 1110|  15.8M|                pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 1111|  15.8M|            }
 1112|  1.97M|            pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 1113|       |
 1114|  1.97M|            ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 1115|  1.97M|        }
 1116|       |
 1117|  5.95M|        if(ps_slice_hdr_top_left->i1_slice_sao_chroma_flag)
  ------------------
  |  Branch (1117:12): [True: 2.84M, False: 3.11M]
  ------------------
 1118|  2.84M|        {
 1119|  2.84M|            if(0 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (1119:16): [True: 2.82M, False: 17.0k]
  ------------------
 1120|  2.82M|            {
 1121|  25.4M|                for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (1121:30): [True: 22.6M, False: 2.82M]
  ------------------
 1122|  22.6M|                {
 1123|  22.6M|                    pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 1124|  22.6M|                    pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 1125|  22.6M|                }
 1126|  2.82M|                pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 1127|  2.82M|                pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 1128|       |
 1129|  2.82M|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 1130|       |
 1131|  2.82M|            }
 1132|       |
 1133|  17.0k|            else if(1 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (1133:21): [True: 9.25k, False: 7.82k]
  ------------------
 1134|  9.25k|            {
 1135|  9.25k|                ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 1136|  9.25k|                ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 1137|  9.25k|                ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 1138|  9.25k|                ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 1139|       |
 1140|  9.25k|                ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 1141|  9.25k|                ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 1142|  9.25k|                ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 1143|  9.25k|                ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 1144|       |
 1145|  9.25k|                if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (1145:20): [True: 1.06k, False: 8.18k]
  ------------------
 1146|  1.06k|                {
 1147|  1.06k|                    ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 1148|  1.06k|                                                                                src_strd,
 1149|  1.06k|                                                                                pu1_src_left_chroma,
 1150|  1.06k|                                                                                pu1_src_top_chroma,
 1151|  1.06k|                                                                                pu1_sao_src_chroma_top_left_ctb,
 1152|  1.06k|                                                                                ps_sao->b5_cr_band_pos,
 1153|  1.06k|                                                                                ps_sao->b5_cb_band_pos,
 1154|  1.06k|                                                                                ai1_offset_cr,
 1155|  1.06k|                                                                                ai1_offset_cb,
 1156|  1.06k|                                                                                sao_wd_chroma,
 1157|  1.06k|                                                                                sao_ht_chroma
 1158|  1.06k|                                                                               );
 1159|  1.06k|                }
 1160|  8.18k|                else
 1161|  8.18k|                {
 1162|  8.18k|                    ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 1163|  8.18k|                                                                                src_strd,
 1164|  8.18k|                                                                                pu1_src_left_chroma,
 1165|  8.18k|                                                                                pu1_src_top_chroma,
 1166|  8.18k|                                                                                pu1_sao_src_chroma_top_left_ctb,
 1167|  8.18k|                                                                                ps_sao->b5_cb_band_pos,
 1168|  8.18k|                                                                                ps_sao->b5_cr_band_pos,
 1169|  8.18k|                                                                                ai1_offset_cb,
 1170|  8.18k|                                                                                ai1_offset_cr,
 1171|  8.18k|                                                                                sao_wd_chroma,
 1172|  8.18k|                                                                                sao_ht_chroma
 1173|  8.18k|                                                                               );
 1174|  8.18k|                }
 1175|  9.25k|            }
 1176|       |
 1177|  7.82k|            else // if(2 <= ps_sao->b3_cb_type_idx)
 1178|  7.82k|            {
 1179|  7.82k|                ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 1180|  7.82k|                ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 1181|  7.82k|                ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 1182|  7.82k|                ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 1183|       |
 1184|  7.82k|                ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 1185|  7.82k|                ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 1186|  7.82k|                ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 1187|  7.82k|                ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 1188|  71.5k|                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1188:28): [True: 63.7k, False: 7.82k]
  ------------------
 1189|  63.7k|                {
 1190|  63.7k|                    au1_avail_chroma[i] = 255;
 1191|  63.7k|                    au1_tile_slice_boundary[i] = 0;
 1192|  63.7k|                    au4_idx_tl[i] = 0;
 1193|  63.7k|                    au4_ilf_across_tile_slice_enable[i] = 1;
 1194|  63.7k|                }
 1195|       |                /*In case of slices*/
 1196|  7.82k|                {
 1197|  7.82k|                    if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (1197:24): [True: 255, False: 7.56k]
  |  Branch (1197:71): [True: 826, False: 6.74k]
  ------------------
 1198|  1.22k|                    {
 1199|  1.22k|                        if((0 == (1 << log2_ctb_size) - sao_wd_chroma) && (ps_sao_ctxt->i4_ctb_y > 1) && (ps_sao_ctxt->i4_ctb_x > 1))
  ------------------
  |  Branch (1199:28): [True: 288, False: 935]
  |  Branch (1199:75): [True: 162, False: 126]
  |  Branch (1199:106): [True: 145, False: 17]
  ------------------
 1200|    145|                        {
 1201|    145|                            ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 2;
 1202|    145|                            ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 2;
 1203|    145|                        }
 1204|  1.07k|                        else if(!(0 == (1 << log2_ctb_size) - sao_wd_chroma))
  ------------------
  |  Branch (1204:33): [True: 935, False: 143]
  ------------------
 1205|    935|                        {
 1206|    935|                            ctby_tl_t = ps_sao_ctxt->i4_ctb_y - 1;
 1207|    935|                            ctbx_tl_l = ps_sao_ctxt->i4_ctb_x - 1;
 1208|    935|                        }
 1209|  1.22k|                        ctbx_tl_t = ps_sao_ctxt->i4_ctb_x - 1;
 1210|  1.22k|                        ctby_tl_l = ps_sao_ctxt->i4_ctb_y - 1;
 1211|       |
 1212|  1.22k|                        ctbx_tl_r = ps_sao_ctxt->i4_ctb_x;
 1213|  1.22k|                        ctby_tl_r = ps_sao_ctxt->i4_ctb_y - 1;
 1214|       |
 1215|  1.22k|                        ctbx_tl_d =  ps_sao_ctxt->i4_ctb_x - 1;
 1216|  1.22k|                        ctby_tl_d =  ps_sao_ctxt->i4_ctb_y;
 1217|       |
 1218|  1.22k|                        ctbx_tl = ps_sao_ctxt->i4_ctb_x - 1;
 1219|  1.22k|                        ctby_tl = ps_sao_ctxt->i4_ctb_y - 1;
 1220|       |
 1221|  1.22k|                        if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (1221:28): [True: 397, False: 826]
  ------------------
 1222|    397|                        {
 1223|       |
 1224|    397|                            idx_tl   = pu1_slice_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)];
 1225|    397|                            au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_slice_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb));
 1226|    397|                            au4_idx_tl[0] =  pu1_slice_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
 1227|    397|                            au4_idx_tl[1] = au4_idx_tl[5] = pu1_slice_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
 1228|    397|                            au4_idx_tl[3] = au4_idx_tl[6] =   pu1_slice_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1229|    397|                            au4_idx_tl[7] = pu1_slice_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1230|       |
 1231|    397|                            if((0 == (1 << log2_ctb_size) - sao_wd_chroma))
  ------------------
  |  Branch (1231:32): [True: 0, False: 397]
  ------------------
 1232|      0|                            {
 1233|      0|                                if(ps_sao_ctxt->i4_ctb_x == 1)
  ------------------
  |  Branch (1233:36): [True: 0, False: 0]
  ------------------
 1234|      0|                                {
 1235|      0|                                    au4_idx_tl[6] = -1;
 1236|      0|                                    au4_idx_tl[4] = -1;
 1237|      0|                                }
 1238|      0|                                else
 1239|      0|                                {
 1240|      0|                                    au4_idx_tl[6] = pu1_slice_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
 1241|      0|                                }
 1242|      0|                                if(ps_sao_ctxt->i4_ctb_y == 1)
  ------------------
  |  Branch (1242:36): [True: 0, False: 0]
  ------------------
 1243|      0|                                {
 1244|      0|                                    au4_idx_tl[5] = -1;
 1245|      0|                                    au4_idx_tl[4] = -1;
 1246|      0|                                }
 1247|      0|                                else
 1248|      0|                                {
 1249|      0|                                    au4_idx_tl[5] = pu1_slice_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
 1250|      0|                                    au4_idx_tl[4] = pu1_slice_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)];
 1251|      0|                                }
 1252|      0|                                au4_idx_tl[7] = pu1_slice_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1253|      0|                            }
 1254|       |
 1255|       |                            /* Verify that the neighbor ctbs don't cross pic boundary
 1256|       |                             * Also, the ILF flag belonging to the higher pixel address (between neighbor and current pixels) must be assigned*/
 1257|    397|                            if((0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma))
  ------------------
  |  Branch (1257:32): [True: 0, False: 397]
  ------------------
 1258|      0|                            {
 1259|      0|                                au4_ilf_across_tile_slice_enable[4] = 0;
 1260|      0|                                au4_ilf_across_tile_slice_enable[6] = 0;
 1261|      0|                            }
 1262|    397|                            else
 1263|    397|                            {
 1264|    397|                                au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_tl[6])->i1_slice_loop_filter_across_slices_enabled_flag;
 1265|    397|                            }
 1266|    397|                            if((0 == (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) - sao_ht_chroma))
  ------------------
  |  Branch (1266:32): [True: 0, False: 397]
  ------------------
 1267|      0|                            {
 1268|      0|                                au4_ilf_across_tile_slice_enable[5] = 0;
 1269|      0|                                au4_ilf_across_tile_slice_enable[4] = 0;
 1270|      0|                            }
 1271|    397|                            else
 1272|    397|                            {
 1273|    397|                                au4_ilf_across_tile_slice_enable[4] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
 1274|    397|                                au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_tl[5])->i1_slice_loop_filter_across_slices_enabled_flag;
 1275|    397|                            }
 1276|    397|                            au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
 1277|    397|                            au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_tl)->i1_slice_loop_filter_across_slices_enabled_flag;
 1278|    397|                            au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_tl[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 1279|    397|                            au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_tl[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 1280|    397|                            au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_tl[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 1281|       |                            /*
 1282|       |                             * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 1283|       |                             * of the pixel having a greater address is checked. Accordingly, set the availability flags
 1284|       |                             */
 1285|  3.57k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1285:40): [True: 3.17k, False: 397]
  ------------------
 1286|  3.17k|                            {
 1287|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 1288|  3.17k|                                if(au4_idx_tl[i] != idx_tl)
  ------------------
  |  Branch (1288:36): [True: 662, False: 2.51k]
  ------------------
 1289|    662|                                {
 1290|    662|                                    au1_tile_slice_boundary[i] = 1;
 1291|    662|                                }
 1292|  2.51k|                                else
 1293|  2.51k|                                {
 1294|  2.51k|                                    au4_ilf_across_tile_slice_enable[i] = 1;
 1295|  2.51k|                                }
 1296|  3.17k|                            }
 1297|       |
 1298|       |                            /*Reset indices*/
 1299|  3.57k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1299:40): [True: 3.17k, False: 397]
  ------------------
 1300|  3.17k|                            {
 1301|  3.17k|                                au4_idx_tl[i] = 0;
 1302|  3.17k|                            }
 1303|    397|                        }
 1304|  1.22k|                        if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (1304:28): [True: 1.06k, False: 159]
  ------------------
 1305|  1.06k|                        {
 1306|       |                            /* Calculate availability flags at slice boundary */
 1307|  1.06k|                            if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (1307:33): [True: 238, False: 826]
  |  Branch (1307:81): [True: 392, False: 434]
  |  Branch (1307:133): [True: 344, False: 288]
  |  Branch (1307:161): [True: 0, False: 344]
  ------------------
 1308|    632|                            {
 1309|       |                                /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 1310|    632|                                if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (1310:36): [True: 251, False: 381]
  ------------------
 1311|    251|                                {
 1312|       |                                    /*Set the boundary arrays*/
 1313|       |                                    /*Calculate tile indices for neighbor pixels*/
 1314|    251|                                    idx_tl   = pu1_tile_idx[ctbx_tl + (ctby_tl * ps_sps->i2_pic_wd_in_ctb)];
 1315|    251|                                    au4_idx_tl[2] = au4_idx_tl[4] = *(pu1_tile_idx + ctbx_tl_t + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb));
 1316|    251|                                    au4_idx_tl[0] =  pu1_tile_idx[ctbx_tl_l + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
 1317|    251|                                    au4_idx_tl[1] = au4_idx_tl[5] = pu1_tile_idx[ctbx_tl_r + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
 1318|    251|                                    au4_idx_tl[3] = au4_idx_tl[6] =   pu1_tile_idx[ctbx_tl_d + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1319|    251|                                    au4_idx_tl[7] = pu1_tile_idx[ctbx_tl_d + 1 + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1320|       |
 1321|    251|                                    if((0 == (1 << log2_ctb_size) - sao_wd_luma))
  ------------------
  |  Branch (1321:40): [True: 0, False: 251]
  ------------------
 1322|      0|                                    {
 1323|      0|                                        if(ps_sao_ctxt->i4_ctb_x == 1)
  ------------------
  |  Branch (1323:44): [True: 0, False: 0]
  ------------------
 1324|      0|                                        {
 1325|      0|                                            au4_idx_tl[6] = -1;
 1326|      0|                                            au4_idx_tl[4] = -1;
 1327|      0|                                        }
 1328|      0|                                        else
 1329|      0|                                        {
 1330|      0|                                            au4_idx_tl[6] = pu1_tile_idx[(ctbx_tl_d - 1) + (ctby_tl_r * ps_sps->i2_pic_wd_in_ctb)];
 1331|      0|                                        }
 1332|      0|                                        if(ps_sao_ctxt->i4_ctb_y == 1)
  ------------------
  |  Branch (1332:44): [True: 0, False: 0]
  ------------------
 1333|      0|                                        {
 1334|      0|                                            au4_idx_tl[5] = -1;
 1335|      0|                                            au4_idx_tl[4] = -1;
 1336|      0|                                        }
 1337|      0|                                        else
 1338|      0|                                        {
 1339|      0|                                            au4_idx_tl[5] = pu1_tile_idx[(ctbx_tl_l + 1) + (ctby_tl_l * ps_sps->i2_pic_wd_in_ctb)];
 1340|      0|                                            au4_idx_tl[4] = pu1_tile_idx[(ctbx_tl_t - 1) + (ctby_tl_t * ps_sps->i2_pic_wd_in_ctb)];
 1341|      0|                                        }
 1342|      0|                                        au4_idx_tl[7] = pu1_tile_idx[(ctbx_tl_d + 1) + (ctby_tl_d * ps_sps->i2_pic_wd_in_ctb)];
 1343|      0|                                    }
 1344|  2.25k|                                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1344:48): [True: 2.00k, False: 251]
  ------------------
 1345|  2.00k|                                    {
 1346|       |                                        /*Sets the edges that lie on the tile boundary*/
 1347|  2.00k|                                        if(au4_idx_tl[i] != idx_tl)
  ------------------
  |  Branch (1347:44): [True: 753, False: 1.25k]
  ------------------
 1348|    753|                                        {
 1349|    753|                                            au1_tile_slice_boundary[i] |= 1;
 1350|    753|                                            au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0
 1351|    753|                                        }
 1352|  2.00k|                                    }
 1353|    251|                                }
 1354|    632|                            }
 1355|  1.06k|                        }
 1356|       |
 1357|  10.9k|                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1357:36): [True: 9.77k, False: 1.22k]
  ------------------
 1358|  9.77k|                        {
 1359|       |                            /*Sets the edges that lie on the slice/tile boundary*/
 1360|  9.77k|                            if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (1360:32): [True: 1.41k, False: 8.36k]
  |  Branch (1360:64): [True: 753, False: 662]
  ------------------
 1361|    753|                            {
 1362|    753|                                au1_avail_chroma[i] = 0;
 1363|    753|                            }
 1364|  9.77k|                        }
 1365|  1.22k|                    }
 1366|  7.82k|                }
 1367|       |
 1368|  7.82k|                if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma)
  ------------------
  |  Branch (1368:20): [True: 21, False: 7.80k]
  ------------------
 1369|     21|                {
 1370|     21|                    au1_avail_chroma[0] = 0;
 1371|     21|                    au1_avail_chroma[4] = 0;
 1372|     21|                    au1_avail_chroma[6] = 0;
 1373|     21|                }
 1374|  7.82k|                if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1374:20): [True: 0, False: 7.82k]
  ------------------
 1375|      0|                {
 1376|      0|                    au1_avail_chroma[1] = 0;
 1377|      0|                    au1_avail_chroma[5] = 0;
 1378|      0|                    au1_avail_chroma[7] = 0;
 1379|      0|                }
 1380|       |
 1381|  7.82k|                if(0 == (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) - sao_ht_chroma)
  ------------------
  |  Branch (1381:20): [True: 129, False: 7.69k]
  ------------------
 1382|    129|                {
 1383|    129|                    au1_avail_chroma[2] = 0;
 1384|    129|                    au1_avail_chroma[4] = 0;
 1385|    129|                    au1_avail_chroma[5] = 0;
 1386|    129|                }
 1387|  7.82k|                if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (1387:20): [True: 0, False: 7.82k]
  ------------------
 1388|      0|                {
 1389|      0|                    au1_avail_chroma[3] = 0;
 1390|      0|                    au1_avail_chroma[6] = 0;
 1391|      0|                    au1_avail_chroma[7] = 0;
 1392|      0|                }
 1393|       |
 1394|  7.82k|                {
 1395|  7.82k|                    au1_src_top_right[0] = pu1_src_top_chroma[sao_wd_chroma];
 1396|  7.82k|                    au1_src_top_right[1] = pu1_src_top_chroma[sao_wd_chroma + 1];
 1397|  7.82k|                    au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_left_chroma[2 * sao_ht_chroma];
 1398|  7.82k|                    au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_left_chroma[2 * sao_ht_chroma + 1];
 1399|  7.82k|                    if((ctb_size == 16) && (ps_sao_ctxt->i4_ctb_y != ps_sps->i2_pic_ht_in_ctb - 1))
  ------------------
  |  Branch (1399:24): [True: 297, False: 7.52k]
  |  Branch (1399:44): [True: 297, False: 0]
  ------------------
 1400|    297|                    {
 1401|    297|                        au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2];
 1402|    297|                        au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1];
 1403|    297|                    }
 1404|       |
 1405|  7.82k|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (1405:24): [True: 559, False: 7.26k]
  ------------------
 1406|    559|                    {
 1407|    559|                        ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 1408|    559|                                                                             src_strd,
 1409|    559|                                                                             pu1_src_left_chroma,
 1410|    559|                                                                             pu1_src_top_chroma,
 1411|    559|                                                                             pu1_sao_src_chroma_top_left_ctb,
 1412|    559|                                                                             au1_src_top_right,
 1413|    559|                                                                             au1_sao_src_top_left_chroma_bot_left,
 1414|    559|                                                                             au1_avail_chroma,
 1415|    559|                                                                             ai1_offset_cr,
 1416|    559|                                                                             ai1_offset_cb,
 1417|    559|                                                                             sao_wd_chroma,
 1418|    559|                                                                             sao_ht_chroma);
 1419|    559|                    }
 1420|  7.26k|                    else
 1421|  7.26k|                    {
 1422|  7.26k|                        ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 1423|  7.26k|                                                                             src_strd,
 1424|  7.26k|                                                                             pu1_src_left_chroma,
 1425|  7.26k|                                                                             pu1_src_top_chroma,
 1426|  7.26k|                                                                             pu1_sao_src_chroma_top_left_ctb,
 1427|  7.26k|                                                                             au1_src_top_right,
 1428|  7.26k|                                                                             au1_sao_src_top_left_chroma_bot_left,
 1429|  7.26k|                                                                             au1_avail_chroma,
 1430|  7.26k|                                                                             ai1_offset_cb,
 1431|  7.26k|                                                                             ai1_offset_cr,
 1432|  7.26k|                                                                             sao_wd_chroma,
 1433|  7.26k|                                                                             sao_ht_chroma);
 1434|  7.26k|                    }
 1435|  7.82k|                }
 1436|  7.82k|            }
 1437|  2.84M|        }
 1438|  3.11M|        else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (1438:17): [True: 1.90M, False: 1.20M]
  |  Branch (1438:64): [True: 131k, False: 1.07M]
  ------------------
 1439|  2.03M|        {
 1440|  18.3M|            for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (1440:26): [True: 16.3M, False: 2.03M]
  ------------------
 1441|  16.3M|            {
 1442|  16.3M|                pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 1443|  16.3M|                pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 1444|  16.3M|            }
 1445|  2.03M|            pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 1446|  2.03M|            pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 1447|       |
 1448|  2.03M|            ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 1449|  2.03M|        }
 1450|       |
 1451|  5.95M|        pu1_src_luma += sao_wd_luma + sao_ht_luma * src_strd;
 1452|  5.95M|        pu1_src_chroma += sao_wd_chroma + sao_ht_chroma * src_strd;
 1453|  5.95M|        ps_sao += (1 + ps_sps->i2_pic_wd_in_ctb);
 1454|  5.95M|    }
 1455|       |
 1456|       |
 1457|       |    /* Top CTB */
 1458|  6.24M|    if((ps_sao_ctxt->i4_ctb_y > 0))
  ------------------
  |  Branch (1458:8): [True: 6.07M, False: 167k]
  ------------------
 1459|  6.07M|    {
 1460|  6.07M|        WORD32 sao_wd_luma = ctb_size - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
 1461|  6.07M|        WORD32 sao_wd_chroma = ctb_size - 2 * SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
 1462|  6.07M|        WORD32 sao_ht_luma = SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
 1463|  6.07M|        WORD32 sao_ht_chroma = SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
 1464|       |
 1465|  6.07M|        WORD32 ctbx_t_t = 0, ctbx_t_l = 0, ctbx_t_r = 0, ctbx_t_d = 0, ctbx_t = 0;
 1466|  6.07M|        WORD32 ctby_t_t = 0, ctby_t_l = 0, ctby_t_r = 0, ctby_t_d = 0, ctby_t = 0;
 1467|  6.07M|        WORD32 au4_idx_t[8], idx_t;
 1468|       |
 1469|  6.07M|        WORD32 remaining_cols;
 1470|       |
 1471|  6.07M|        slice_header_t *ps_slice_hdr_top;
 1472|  6.07M|        {
 1473|  6.07M|            WORD32 top_ctb_indx = (ps_sao_ctxt->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb +
 1474|  6.07M|                                        (ps_sao_ctxt->i4_ctb_x);
 1475|  6.07M|            ps_slice_hdr_top = ps_slice_hdr_base + pu1_slice_idx[top_ctb_indx];
 1476|  6.07M|        }
 1477|       |
 1478|  6.07M|        remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_luma);
 1479|  6.07M|        if(remaining_cols <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (1479:12): [True: 121k, False: 5.95M]
  ------------------
 1480|   121k|        {
 1481|   121k|            sao_wd_luma += remaining_cols;
 1482|   121k|        }
 1483|  6.07M|        remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_chroma);
 1484|  6.07M|        if(remaining_cols <= 2 * SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.07M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (1484:12): [True: 121k, False: 5.95M]
  ------------------
 1485|   121k|        {
 1486|   121k|            sao_wd_chroma += remaining_cols;
 1487|   121k|        }
 1488|       |
 1489|  6.07M|        pu1_src_luma -= (sao_ht_luma * src_strd);
 1490|  6.07M|        pu1_src_chroma -= (sao_ht_chroma * src_strd);
 1491|  6.07M|        ps_sao -= (ps_sps->i2_pic_wd_in_ctb);
 1492|  6.07M|        pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size);
 1493|  6.07M|        pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size);
 1494|  6.07M|        pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_chroma;
 1495|  6.07M|        pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - (2 * sao_ht_chroma);
 1496|       |
 1497|  6.07M|        if(0 != sao_wd_luma)
  ------------------
  |  Branch (1497:12): [True: 6.07M, False: 341]
  ------------------
 1498|  6.07M|        {
 1499|  6.07M|            if(ps_slice_hdr_top->i1_slice_sao_luma_flag)
  ------------------
  |  Branch (1499:16): [True: 2.90M, False: 3.17M]
  ------------------
 1500|  2.90M|            {
 1501|  2.90M|                if(0 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (1501:20): [True: 2.87M, False: 25.0k]
  ------------------
 1502|  2.87M|                {
 1503|       |                    /* Update left, top and top-left */
 1504|  25.8M|                    for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (1504:34): [True: 23.0M, False: 2.87M]
  ------------------
 1505|  23.0M|                    {
 1506|  23.0M|                        pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 1507|  23.0M|                    }
 1508|  2.87M|                    pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 1509|       |
 1510|  2.87M|                    ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 1511|       |
 1512|  2.87M|                }
 1513|       |
 1514|  25.0k|                else if(1 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (1514:25): [True: 15.0k, False: 10.0k]
  ------------------
 1515|  15.0k|                {
 1516|  15.0k|                    ai1_offset_y[1] = ps_sao->b4_y_offset_1;
 1517|  15.0k|                    ai1_offset_y[2] = ps_sao->b4_y_offset_2;
 1518|  15.0k|                    ai1_offset_y[3] = ps_sao->b4_y_offset_3;
 1519|  15.0k|                    ai1_offset_y[4] = ps_sao->b4_y_offset_4;
 1520|       |
 1521|  15.0k|                    ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma,
 1522|  15.0k|                                                                              src_strd,
 1523|  15.0k|                                                                              pu1_src_left_luma,
 1524|  15.0k|                                                                              pu1_src_top_luma,
 1525|  15.0k|                                                                              pu1_sao_src_luma_top_left_ctb,
 1526|  15.0k|                                                                              ps_sao->b5_y_band_pos,
 1527|  15.0k|                                                                              ai1_offset_y,
 1528|  15.0k|                                                                              sao_wd_luma,
 1529|  15.0k|                                                                              sao_ht_luma
 1530|  15.0k|                                                                             );
 1531|  15.0k|                }
 1532|       |
 1533|  10.0k|                else // if(2 <= ps_sao->b3_y_type_idx)
 1534|  10.0k|                {
 1535|  10.0k|                    ai1_offset_y[1] = ps_sao->b4_y_offset_1;
 1536|  10.0k|                    ai1_offset_y[2] = ps_sao->b4_y_offset_2;
 1537|  10.0k|                    ai1_offset_y[3] = ps_sao->b4_y_offset_3;
 1538|  10.0k|                    ai1_offset_y[4] = ps_sao->b4_y_offset_4;
 1539|       |
 1540|  10.0k|                    ps_codec->s_func_selector.ihevc_memset_mul_8_fptr(au1_avail_luma, 255, 8);
 1541|  10.0k|                    ps_codec->s_func_selector.ihevc_memset_mul_8_fptr(au1_tile_slice_boundary, 0, 8);
 1542|  10.0k|                    ps_codec->s_func_selector.ihevc_memset_mul_8_fptr((UWORD8 *)au4_idx_t, 0, 8 * sizeof(WORD32));
 1543|       |
 1544|  90.8k|                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1544:32): [True: 80.8k, False: 10.0k]
  ------------------
 1545|  80.8k|                    {
 1546|       |
 1547|  80.8k|                        au4_ilf_across_tile_slice_enable[i] = 1;
 1548|  80.8k|                    }
 1549|       |                    /******************************************************************
 1550|       |                     * Derive the  Top-left CTB's neighbor pixel's slice indices.
 1551|       |                     *
 1552|       |                     *               T_T
 1553|       |                     *          ____________
 1554|       |                     *         |    |       |
 1555|       |                     *         | T_L|  T    |T_R
 1556|       |                     *         |    | ______|____
 1557|       |                     *         |    |  T_D  |    |
 1558|       |                     *         |    |       |    |
 1559|       |                     *         |____|_______|    |
 1560|       |                     *              |            |
 1561|       |                     *              |            |
 1562|       |                     *              |____________|
 1563|       |                     *
 1564|       |                     *****************************************************************/
 1565|       |
 1566|       |                    /*In case of slices*/
 1567|  10.0k|                    {
 1568|  10.0k|                        if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (1568:28): [True: 382, False: 9.65k]
  |  Branch (1568:75): [True: 1.10k, False: 8.54k]
  ------------------
 1569|  1.55k|                        {
 1570|       |
 1571|  1.55k|                            ctbx_t_t = ps_sao_ctxt->i4_ctb_x;
 1572|  1.55k|                            ctby_t_t = ps_sao_ctxt->i4_ctb_y - 1;
 1573|       |
 1574|  1.55k|                            ctbx_t_l = ps_sao_ctxt->i4_ctb_x - 1;
 1575|  1.55k|                            ctby_t_l = ps_sao_ctxt->i4_ctb_y - 1;
 1576|       |
 1577|  1.55k|                            ctbx_t_r = ps_sao_ctxt->i4_ctb_x;
 1578|  1.55k|                            ctby_t_r = ps_sao_ctxt->i4_ctb_y - 1;
 1579|       |
 1580|  1.55k|                            ctbx_t_d =  ps_sao_ctxt->i4_ctb_x;
 1581|  1.55k|                            ctby_t_d =  ps_sao_ctxt->i4_ctb_y;
 1582|       |
 1583|  1.55k|                            ctbx_t = ps_sao_ctxt->i4_ctb_x;
 1584|  1.55k|                            ctby_t = ps_sao_ctxt->i4_ctb_y - 1;
 1585|       |
 1586|  1.55k|                            if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (1586:32): [True: 454, False: 1.10k]
  ------------------
 1587|    454|                            {
 1588|       |                                /*Calculate neighbor ctb slice indices*/
 1589|    454|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1589:36): [True: 351, False: 103]
  ------------------
 1590|    351|                                {
 1591|    351|                                    au4_idx_t[0] = -1;
 1592|    351|                                    au4_idx_t[6] = -1;
 1593|    351|                                    au4_idx_t[4] = -1;
 1594|    351|                                }
 1595|    103|                                else
 1596|    103|                                {
 1597|    103|                                    au4_idx_t[0] = au4_idx_t[4] = pu1_slice_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)];
 1598|    103|                                    au4_idx_t[6] = pu1_slice_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1599|    103|                                }
 1600|    454|                                idx_t   = pu1_slice_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)];
 1601|    454|                                au4_idx_t[2] = au4_idx_t[5] = pu1_slice_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)];
 1602|    454|                                au4_idx_t[1] = pu1_slice_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)];
 1603|    454|                                au4_idx_t[3] = au4_idx_t[7] = pu1_slice_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1604|       |
 1605|       |                                /*Verify that the neighbor ctbs don't cross pic boundary.*/
 1606|    454|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1606:36): [True: 351, False: 103]
  ------------------
 1607|    351|                                {
 1608|    351|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 1609|    351|                                    au4_ilf_across_tile_slice_enable[6] = 0;
 1610|    351|                                    au4_ilf_across_tile_slice_enable[0] = 0;
 1611|    351|                                }
 1612|    103|                                else
 1613|    103|                                {
 1614|    103|                                    au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1615|    103|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_t[6])->i1_slice_loop_filter_across_slices_enabled_flag;
 1616|    103|                                }
 1617|       |
 1618|       |
 1619|       |
 1620|    454|                                au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1621|    454|                                au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1622|    454|                                au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_t[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 1623|    454|                                au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_t[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 1624|    454|                                au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_t[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 1625|       |
 1626|    454|                                if(au4_idx_t[6] < idx_t)
  ------------------
  |  Branch (1626:36): [True: 351, False: 103]
  ------------------
 1627|    351|                                {
 1628|    351|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1629|    351|                                }
 1630|       |
 1631|       |                                /*
 1632|       |                                 * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 1633|       |                                 * of the pixel having a greater address is checked. Accordingly, set the availability flags
 1634|       |                                 */
 1635|       |
 1636|  4.08k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1636:44): [True: 3.63k, False: 454]
  ------------------
 1637|  3.63k|                                {
 1638|       |                                    /*Sets the edges that lie on the slice/tile boundary*/
 1639|  3.63k|                                    if(au4_idx_t[i] != idx_t)
  ------------------
  |  Branch (1639:40): [True: 1.29k, False: 2.33k]
  ------------------
 1640|  1.29k|                                    {
 1641|  1.29k|                                        au1_tile_slice_boundary[i] = 1;
 1642|       |                                        /*Check for slice flag at such boundaries*/
 1643|  1.29k|                                    }
 1644|  2.33k|                                    else
 1645|  2.33k|                                    {
 1646|  2.33k|                                        au4_ilf_across_tile_slice_enable[i] = 1;
 1647|  2.33k|                                    }
 1648|  3.63k|                                }
 1649|       |                                /*Reset indices*/
 1650|  4.08k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1650:44): [True: 3.63k, False: 454]
  ------------------
 1651|  3.63k|                                {
 1652|  3.63k|                                    au4_idx_t[i] = 0;
 1653|  3.63k|                                }
 1654|    454|                            }
 1655|       |
 1656|  1.55k|                            if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (1656:32): [True: 1.14k, False: 409]
  ------------------
 1657|  1.14k|                            {
 1658|       |                                /* Calculate availability flags at slice boundary */
 1659|  1.14k|                                if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (1659:37): [True: 350, False: 798]
  |  Branch (1659:85): [True: 295, False: 503]
  |  Branch (1659:137): [True: 635, False: 11]
  |  Branch (1659:165): [True: 206, False: 429]
  ------------------
 1660|    440|                                {
 1661|       |                                    /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 1662|    440|                                    if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (1662:40): [True: 347, False: 93]
  ------------------
 1663|    347|                                    {
 1664|       |                                        /*Calculate neighbor ctb slice indices*/
 1665|    347|                                        if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1665:44): [True: 132, False: 215]
  ------------------
 1666|    132|                                        {
 1667|    132|                                            au4_idx_t[0] = -1;
 1668|    132|                                            au4_idx_t[6] = -1;
 1669|    132|                                            au4_idx_t[4] = -1;
 1670|    132|                                        }
 1671|    215|                                        else
 1672|    215|                                        {
 1673|    215|                                            au4_idx_t[0] = au4_idx_t[4] = pu1_tile_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)];
 1674|    215|                                            au4_idx_t[6] = pu1_tile_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1675|    215|                                        }
 1676|    347|                                        idx_t   = pu1_tile_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)];
 1677|    347|                                        au4_idx_t[2] = au4_idx_t[5] = pu1_tile_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)];
 1678|    347|                                        au4_idx_t[1] = pu1_tile_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)];
 1679|    347|                                        au4_idx_t[3] = au4_idx_t[7] = pu1_tile_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1680|       |
 1681|  3.12k|                                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1681:52): [True: 2.77k, False: 347]
  ------------------
 1682|  2.77k|                                        {
 1683|       |                                            /*Sets the edges that lie on the tile boundary*/
 1684|  2.77k|                                            if(au4_idx_t[i] != idx_t)
  ------------------
  |  Branch (1684:48): [True: 1.13k, False: 1.64k]
  ------------------
 1685|  1.13k|                                            {
 1686|  1.13k|                                                au1_tile_slice_boundary[i] |= 1;
 1687|  1.13k|                                                au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag;
 1688|  1.13k|                                            }
 1689|  2.77k|                                        }
 1690|    347|                                    }
 1691|    440|                                }
 1692|  1.14k|                            }
 1693|       |
 1694|  14.0k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1694:40): [True: 12.4k, False: 1.55k]
  ------------------
 1695|  12.4k|                            {
 1696|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 1697|  12.4k|                                if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (1697:36): [True: 2.43k, False: 10.0k]
  |  Branch (1697:68): [True: 1.91k, False: 512]
  ------------------
 1698|  1.91k|                                {
 1699|  1.91k|                                    au1_avail_luma[i] = 0;
 1700|  1.91k|                                }
 1701|  12.4k|                            }
 1702|  1.55k|                        }
 1703|  10.0k|                    }
 1704|       |
 1705|       |
 1706|  10.0k|                    if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1706:24): [True: 1.71k, False: 8.31k]
  ------------------
 1707|  1.71k|                    {
 1708|  1.71k|                        au1_avail_luma[0] = 0;
 1709|  1.71k|                        au1_avail_luma[4] = 0;
 1710|  1.71k|                        au1_avail_luma[6] = 0;
 1711|  1.71k|                    }
 1712|       |
 1713|  10.0k|                    if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_luma)
  ------------------
  |  Branch (1713:24): [True: 1.37k, False: 8.66k]
  ------------------
 1714|  1.37k|                    {
 1715|  1.37k|                        au1_avail_luma[1] = 0;
 1716|  1.37k|                        au1_avail_luma[5] = 0;
 1717|  1.37k|                        au1_avail_luma[7] = 0;
 1718|  1.37k|                    }
 1719|       |
 1720|  10.0k|                    if(0 == (ps_sao_ctxt->i4_ctb_y << log2_ctb_size) - sao_ht_luma)
  ------------------
  |  Branch (1720:24): [True: 0, False: 10.0k]
  ------------------
 1721|      0|                    {
 1722|      0|                        au1_avail_luma[2] = 0;
 1723|      0|                        au1_avail_luma[4] = 0;
 1724|      0|                        au1_avail_luma[5] = 0;
 1725|      0|                    }
 1726|       |
 1727|  10.0k|                    if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (1727:24): [True: 0, False: 10.0k]
  ------------------
 1728|      0|                    {
 1729|      0|                        au1_avail_luma[3] = 0;
 1730|      0|                        au1_avail_luma[6] = 0;
 1731|      0|                        au1_avail_luma[7] = 0;
 1732|      0|                    }
 1733|       |
 1734|  10.0k|                    {
 1735|  10.0k|                        au1_src_top_right[0] = pu1_sao_src_top_left_luma_top_right[0];
 1736|  10.0k|                        u1_sao_src_top_left_luma_bot_left = pu1_src_luma[sao_ht_luma * src_strd - 1];
 1737|  10.0k|                        ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma,
 1738|  10.0k|                                                                          src_strd,
 1739|  10.0k|                                                                          pu1_src_left_luma,
 1740|  10.0k|                                                                          pu1_src_top_luma,
 1741|  10.0k|                                                                          pu1_sao_src_luma_top_left_ctb,
 1742|  10.0k|                                                                          au1_src_top_right,
 1743|  10.0k|                                                                          &u1_sao_src_top_left_luma_bot_left,
 1744|  10.0k|                                                                          au1_avail_luma,
 1745|  10.0k|                                                                          ai1_offset_y,
 1746|  10.0k|                                                                          sao_wd_luma,
 1747|  10.0k|                                                                          sao_ht_luma);
 1748|  10.0k|                    }
 1749|  10.0k|                }
 1750|  2.90M|            }
 1751|  3.17M|            else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (1751:21): [True: 1.86M, False: 1.30M]
  |  Branch (1751:68): [True: 124k, False: 1.17M]
  ------------------
 1752|  1.99M|            {
 1753|       |                /* Update left, top and top-left */
 1754|  17.9M|                for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (1754:30): [True: 15.9M, False: 1.99M]
  ------------------
 1755|  15.9M|                {
 1756|  15.9M|                    pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 1757|  15.9M|                }
 1758|  1.99M|                pu1_sao_src_luma_top_left_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 1759|       |
 1760|  1.99M|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 1761|  1.99M|            }
 1762|  6.07M|        }
 1763|       |
 1764|  6.07M|        if(0 != sao_wd_chroma)
  ------------------
  |  Branch (1764:12): [True: 1.40M, False: 4.66M]
  ------------------
 1765|  1.40M|        {
 1766|  1.40M|            if(ps_slice_hdr_top->i1_slice_sao_chroma_flag)
  ------------------
  |  Branch (1766:16): [True: 169k, False: 1.23M]
  ------------------
 1767|   169k|            {
 1768|   169k|                if(0 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (1768:20): [True: 151k, False: 18.4k]
  ------------------
 1769|   151k|                {
 1770|       |
 1771|  1.36M|                    for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (1771:34): [True: 1.20M, False: 151k]
  ------------------
 1772|  1.20M|                    {
 1773|  1.20M|                        pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 1774|  1.20M|                        pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 1775|  1.20M|                    }
 1776|   151k|                    pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 1777|   151k|                    pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 1778|       |
 1779|   151k|                    ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 1780|       |
 1781|   151k|                }
 1782|       |
 1783|  18.4k|                else if(1 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (1783:25): [True: 9.34k, False: 9.15k]
  ------------------
 1784|  9.34k|                {
 1785|  9.34k|                    ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 1786|  9.34k|                    ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 1787|  9.34k|                    ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 1788|  9.34k|                    ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 1789|       |
 1790|  9.34k|                    ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 1791|  9.34k|                    ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 1792|  9.34k|                    ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 1793|  9.34k|                    ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 1794|       |
 1795|  9.34k|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (1795:24): [True: 1.11k, False: 8.23k]
  ------------------
 1796|  1.11k|                    {
 1797|  1.11k|                        ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 1798|  1.11k|                                                                                    src_strd,
 1799|  1.11k|                                                                                    pu1_src_left_chroma,
 1800|  1.11k|                                                                                    pu1_src_top_chroma,
 1801|  1.11k|                                                                                    pu1_sao_src_chroma_top_left_ctb,
 1802|  1.11k|                                                                                    ps_sao->b5_cr_band_pos,
 1803|  1.11k|                                                                                    ps_sao->b5_cb_band_pos,
 1804|  1.11k|                                                                                    ai1_offset_cr,
 1805|  1.11k|                                                                                    ai1_offset_cb,
 1806|  1.11k|                                                                                    sao_wd_chroma,
 1807|  1.11k|                                                                                    sao_ht_chroma
 1808|  1.11k|                                                                                   );
 1809|  1.11k|                    }
 1810|  8.23k|                    else
 1811|  8.23k|                    {
 1812|  8.23k|                        ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 1813|  8.23k|                                                                                    src_strd,
 1814|  8.23k|                                                                                    pu1_src_left_chroma,
 1815|  8.23k|                                                                                    pu1_src_top_chroma,
 1816|  8.23k|                                                                                    pu1_sao_src_chroma_top_left_ctb,
 1817|  8.23k|                                                                                    ps_sao->b5_cb_band_pos,
 1818|  8.23k|                                                                                    ps_sao->b5_cr_band_pos,
 1819|  8.23k|                                                                                    ai1_offset_cb,
 1820|  8.23k|                                                                                    ai1_offset_cr,
 1821|  8.23k|                                                                                    sao_wd_chroma,
 1822|  8.23k|                                                                                    sao_ht_chroma
 1823|  8.23k|                                                                                   );
 1824|  8.23k|                    }
 1825|  9.34k|                }
 1826|  9.15k|                else // if(2 <= ps_sao->b3_cb_type_idx)
 1827|  9.15k|                {
 1828|  9.15k|                    ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 1829|  9.15k|                    ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 1830|  9.15k|                    ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 1831|  9.15k|                    ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 1832|       |
 1833|  9.15k|                    ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 1834|  9.15k|                    ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 1835|  9.15k|                    ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 1836|  9.15k|                    ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 1837|       |
 1838|  82.6k|                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1838:32): [True: 73.4k, False: 9.15k]
  ------------------
 1839|  73.4k|                    {
 1840|  73.4k|                        au1_avail_chroma[i] = 255;
 1841|  73.4k|                        au1_tile_slice_boundary[i] = 0;
 1842|  73.4k|                        au4_idx_t[i] = 0;
 1843|  73.4k|                        au4_ilf_across_tile_slice_enable[i] = 1;
 1844|  73.4k|                    }
 1845|       |
 1846|  9.15k|                    {
 1847|  9.15k|                        if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (1847:28): [True: 508, False: 8.64k]
  |  Branch (1847:75): [True: 885, False: 7.76k]
  ------------------
 1848|  1.42k|                        {
 1849|  1.42k|                            ctbx_t_t = ps_sao_ctxt->i4_ctb_x;
 1850|  1.42k|                            ctby_t_t = ps_sao_ctxt->i4_ctb_y - 1;
 1851|       |
 1852|  1.42k|                            ctbx_t_l = ps_sao_ctxt->i4_ctb_x - 1;
 1853|  1.42k|                            ctby_t_l = ps_sao_ctxt->i4_ctb_y - 1;
 1854|       |
 1855|  1.42k|                            ctbx_t_r = ps_sao_ctxt->i4_ctb_x;
 1856|  1.42k|                            ctby_t_r = ps_sao_ctxt->i4_ctb_y - 1;
 1857|       |
 1858|  1.42k|                            ctbx_t_d =  ps_sao_ctxt->i4_ctb_x;
 1859|  1.42k|                            ctby_t_d =  ps_sao_ctxt->i4_ctb_y;
 1860|       |
 1861|  1.42k|                            ctbx_t = ps_sao_ctxt->i4_ctb_x;
 1862|  1.42k|                            ctby_t = ps_sao_ctxt->i4_ctb_y - 1;
 1863|       |
 1864|  1.42k|                            if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (1864:32): [True: 535, False: 885]
  ------------------
 1865|    535|                            {
 1866|    535|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1866:36): [True: 305, False: 230]
  ------------------
 1867|    305|                                {
 1868|    305|                                    au4_idx_t[0] = -1;
 1869|    305|                                    au4_idx_t[6] = -1;
 1870|    305|                                    au4_idx_t[4] = -1;
 1871|    305|                                }
 1872|    230|                                else
 1873|    230|                                {
 1874|    230|                                    au4_idx_t[0] = au4_idx_t[4] = pu1_slice_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)];
 1875|    230|                                    au4_idx_t[6] = pu1_slice_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1876|    230|                                }
 1877|    535|                                idx_t   = pu1_slice_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)];
 1878|    535|                                au4_idx_t[2] = au4_idx_t[5] = pu1_slice_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)];
 1879|    535|                                au4_idx_t[1] = pu1_slice_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)];
 1880|    535|                                au4_idx_t[3] = au4_idx_t[7] = pu1_slice_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1881|       |
 1882|       |                                /*Verify that the neighbor ctbs don't cross pic boundary.*/
 1883|       |
 1884|    535|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1884:36): [True: 305, False: 230]
  ------------------
 1885|    305|                                {
 1886|    305|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 1887|    305|                                    au4_ilf_across_tile_slice_enable[6] = 0;
 1888|    305|                                    au4_ilf_across_tile_slice_enable[0] = 0;
 1889|    305|                                }
 1890|    230|                                else
 1891|    230|                                {
 1892|    230|                                    au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1893|    230|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_t[6])->i1_slice_loop_filter_across_slices_enabled_flag;
 1894|    230|                                }
 1895|       |
 1896|    535|                                au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_t[5])->i1_slice_loop_filter_across_slices_enabled_flag;
 1897|    535|                                au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1898|    535|                                au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_t[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 1899|    535|                                au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_t[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 1900|    535|                                au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_t[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 1901|       |
 1902|    535|                                if(idx_t > au4_idx_t[6])
  ------------------
  |  Branch (1902:36): [True: 327, False: 208]
  ------------------
 1903|    327|                                {
 1904|    327|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_t)->i1_slice_loop_filter_across_slices_enabled_flag;
 1905|    327|                                }
 1906|       |
 1907|       |                                /*
 1908|       |                                 * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 1909|       |                                 * of the pixel having a greater address is checked. Accordingly, set the availability flags
 1910|       |                                 */
 1911|  4.81k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1911:44): [True: 4.28k, False: 535]
  ------------------
 1912|  4.28k|                                {
 1913|       |                                    /*Sets the edges that lie on the slice/tile boundary*/
 1914|  4.28k|                                    if(au4_idx_t[i] != idx_t)
  ------------------
  |  Branch (1914:40): [True: 1.23k, False: 3.04k]
  ------------------
 1915|  1.23k|                                    {
 1916|  1.23k|                                        au1_tile_slice_boundary[i] = 1;
 1917|  1.23k|                                    }
 1918|  3.04k|                                    else
 1919|  3.04k|                                    {
 1920|       |                                        /*Indicates that the neighbour belongs to same/dependent slice*/
 1921|  3.04k|                                        au4_ilf_across_tile_slice_enable[i] = 1;
 1922|  3.04k|                                    }
 1923|  4.28k|                                }
 1924|       |                                /*Reset indices*/
 1925|  4.81k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1925:44): [True: 4.28k, False: 535]
  ------------------
 1926|  4.28k|                                {
 1927|  4.28k|                                    au4_idx_t[i] = 0;
 1928|  4.28k|                                }
 1929|    535|                            }
 1930|  1.42k|                            if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (1930:32): [True: 997, False: 423]
  ------------------
 1931|    997|                            {
 1932|       |                                /* Calculate availability flags at slice boundary */
 1933|    997|                                if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (1933:37): [True: 505, False: 492]
  |  Branch (1933:85): [True: 221, False: 271]
  |  Branch (1933:137): [True: 653, False: 74]
  |  Branch (1933:165): [True: 209, False: 444]
  ------------------
 1934|    518|                                {
 1935|       |                                    /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 1936|    518|                                    if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (1936:40): [True: 316, False: 202]
  ------------------
 1937|    316|                                    {
 1938|       |                                        /*Calculate neighbor ctb slice indices*/
 1939|    316|                                        if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1939:44): [True: 186, False: 130]
  ------------------
 1940|    186|                                        {
 1941|    186|                                            au4_idx_t[0] = -1;
 1942|    186|                                            au4_idx_t[6] = -1;
 1943|    186|                                            au4_idx_t[4] = -1;
 1944|    186|                                        }
 1945|    130|                                        else
 1946|    130|                                        {
 1947|    130|                                            au4_idx_t[0] = au4_idx_t[4] = pu1_tile_idx[ctbx_t_l + (ctby_t_l * ps_sps->i2_pic_wd_in_ctb)];
 1948|    130|                                            au4_idx_t[6] = pu1_tile_idx[ctbx_t_d - 1 + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1949|    130|                                        }
 1950|    316|                                        idx_t   = pu1_tile_idx[ctbx_t + (ctby_t * ps_sps->i2_pic_wd_in_ctb)];
 1951|    316|                                        au4_idx_t[2] = au4_idx_t[5] = pu1_tile_idx[ctbx_t_t + (ctby_t_t * ps_sps->i2_pic_wd_in_ctb)];
 1952|    316|                                        au4_idx_t[1] = pu1_tile_idx[ctbx_t_r + (ctby_t_r * ps_sps->i2_pic_wd_in_ctb)];
 1953|    316|                                        au4_idx_t[3] = au4_idx_t[7] = pu1_tile_idx[ctbx_t_d + (ctby_t_d * ps_sps->i2_pic_wd_in_ctb)];
 1954|       |
 1955|  2.84k|                                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1955:52): [True: 2.52k, False: 316]
  ------------------
 1956|  2.52k|                                        {
 1957|       |                                            /*Sets the edges that lie on the tile boundary*/
 1958|  2.52k|                                            if(au4_idx_t[i] != idx_t)
  ------------------
  |  Branch (1958:48): [True: 1.25k, False: 1.27k]
  ------------------
 1959|  1.25k|                                            {
 1960|  1.25k|                                                au1_tile_slice_boundary[i] |= 1;
 1961|  1.25k|                                                au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag;
 1962|  1.25k|                                            }
 1963|  2.52k|                                        }
 1964|    316|                                    }
 1965|    518|                                }
 1966|    997|                            }
 1967|  12.7k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (1967:40): [True: 11.3k, False: 1.42k]
  ------------------
 1968|  11.3k|                            {
 1969|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 1970|  11.3k|                                if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (1970:36): [True: 2.38k, False: 8.97k]
  |  Branch (1970:68): [True: 1.91k, False: 475]
  ------------------
 1971|  1.91k|                                {
 1972|  1.91k|                                    au1_avail_chroma[i] = 0;
 1973|  1.91k|                                }
 1974|  11.3k|                            }
 1975|       |
 1976|  1.42k|                        }
 1977|  9.15k|                    }
 1978|  9.15k|                    if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (1978:24): [True: 1.91k, False: 7.24k]
  ------------------
 1979|  1.91k|                    {
 1980|  1.91k|                        au1_avail_chroma[0] = 0;
 1981|  1.91k|                        au1_avail_chroma[4] = 0;
 1982|  1.91k|                        au1_avail_chroma[6] = 0;
 1983|  1.91k|                    }
 1984|       |
 1985|  9.15k|                    if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_chroma)
  ------------------
  |  Branch (1985:24): [True: 1.50k, False: 7.65k]
  ------------------
 1986|  1.50k|                    {
 1987|  1.50k|                        au1_avail_chroma[1] = 0;
 1988|  1.50k|                        au1_avail_chroma[5] = 0;
 1989|  1.50k|                        au1_avail_chroma[7] = 0;
 1990|  1.50k|                    }
 1991|       |
 1992|  9.15k|                    if(0 == (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) - sao_ht_chroma)
  ------------------
  |  Branch (1992:24): [True: 4, False: 9.15k]
  ------------------
 1993|      4|                    {
 1994|      4|                        au1_avail_chroma[2] = 0;
 1995|      4|                        au1_avail_chroma[4] = 0;
 1996|      4|                        au1_avail_chroma[5] = 0;
 1997|      4|                    }
 1998|       |
 1999|  9.15k|                    if(ps_sps->i2_pic_ht_in_ctb == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (1999:24): [True: 0, False: 9.15k]
  ------------------
 2000|      0|                    {
 2001|      0|                        au1_avail_chroma[3] = 0;
 2002|      0|                        au1_avail_chroma[6] = 0;
 2003|      0|                        au1_avail_chroma[7] = 0;
 2004|      0|                    }
 2005|       |
 2006|  9.15k|                    {
 2007|  9.15k|                        au1_src_top_right[0] = pu1_sao_src_top_left_chroma_top_right[0];
 2008|  9.15k|                        au1_src_top_right[1] = pu1_sao_src_top_left_chroma_top_right[1];
 2009|  9.15k|                        au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2];
 2010|  9.15k|                        au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1];
 2011|       |
 2012|  9.15k|                        if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (2012:28): [True: 666, False: 8.48k]
  ------------------
 2013|    666|                        {
 2014|    666|                            ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 2015|    666|                                                                                 src_strd,
 2016|    666|                                                                                 pu1_src_left_chroma,
 2017|    666|                                                                                 pu1_src_top_chroma,
 2018|    666|                                                                                 pu1_sao_src_chroma_top_left_ctb,
 2019|    666|                                                                                 au1_src_top_right,
 2020|    666|                                                                                 au1_sao_src_top_left_chroma_bot_left,
 2021|    666|                                                                                 au1_avail_chroma,
 2022|    666|                                                                                 ai1_offset_cr,
 2023|    666|                                                                                 ai1_offset_cb,
 2024|    666|                                                                                 sao_wd_chroma,
 2025|    666|                                                                                 sao_ht_chroma);
 2026|    666|                        }
 2027|  8.48k|                        else
 2028|  8.48k|                        {
 2029|  8.48k|                            ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 2030|  8.48k|                                                                                 src_strd,
 2031|  8.48k|                                                                                 pu1_src_left_chroma,
 2032|  8.48k|                                                                                 pu1_src_top_chroma,
 2033|  8.48k|                                                                                 pu1_sao_src_chroma_top_left_ctb,
 2034|  8.48k|                                                                                 au1_src_top_right,
 2035|  8.48k|                                                                                 au1_sao_src_top_left_chroma_bot_left,
 2036|  8.48k|                                                                                 au1_avail_chroma,
 2037|  8.48k|                                                                                 ai1_offset_cb,
 2038|  8.48k|                                                                                 ai1_offset_cr,
 2039|  8.48k|                                                                                 sao_wd_chroma,
 2040|  8.48k|                                                                                 sao_ht_chroma);
 2041|  8.48k|                        }
 2042|  9.15k|                    }
 2043|       |
 2044|  9.15k|                }
 2045|   169k|            }
 2046|  1.23M|            else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2046:21): [True: 27.6k, False: 1.21M]
  |  Branch (2046:68): [True: 66.7k, False: 1.14M]
  ------------------
 2047|  94.2k|            {
 2048|   848k|                for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (2048:30): [True: 753k, False: 94.2k]
  ------------------
 2049|   753k|                {
 2050|   753k|                    pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 2051|   753k|                    pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 2052|   753k|                }
 2053|  94.2k|                pu1_sao_src_chroma_top_left_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 2054|  94.2k|                pu1_sao_src_chroma_top_left_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 2055|       |
 2056|  94.2k|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 2057|  94.2k|            }
 2058|  1.40M|        }
 2059|       |
 2060|  6.07M|        pu1_src_luma += sao_ht_luma * src_strd;
 2061|  6.07M|        pu1_src_chroma += sao_ht_chroma * src_strd;
 2062|  6.07M|        ps_sao += (ps_sps->i2_pic_wd_in_ctb);
 2063|  6.07M|    }
 2064|       |
 2065|       |    /* Left CTB */
 2066|  6.24M|    if(ps_sao_ctxt->i4_ctb_x > 0)
  ------------------
  |  Branch (2066:8): [True: 6.11M, False: 129k]
  ------------------
 2067|  6.11M|    {
 2068|  6.11M|        WORD32 sao_wd_luma = SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
 2069|  6.11M|        WORD32 sao_wd_chroma = 2 * SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
 2070|  6.11M|        WORD32 sao_ht_luma = ctb_size - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
 2071|  6.11M|        WORD32 sao_ht_chroma = ctb_size / 2 - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
 2072|       |
 2073|  6.11M|        WORD32 ctbx_l_t = 0, ctbx_l_l = 0, ctbx_l_r = 0, ctbx_l_d = 0, ctbx_l = 0;
 2074|  6.11M|        WORD32 ctby_l_t = 0, ctby_l_l = 0, ctby_l_r = 0, ctby_l_d = 0, ctby_l = 0;
 2075|  6.11M|        WORD32 au4_idx_l[8], idx_l;
 2076|       |
 2077|  6.11M|        WORD32 remaining_rows;
 2078|  6.11M|        slice_header_t *ps_slice_hdr_left;
 2079|  6.11M|        {
 2080|  6.11M|            WORD32 left_ctb_indx = (ps_sao_ctxt->i4_ctb_y) * ps_sps->i2_pic_wd_in_ctb +
 2081|  6.11M|                                        (ps_sao_ctxt->i4_ctb_x - 1);
 2082|  6.11M|            ps_slice_hdr_left = ps_slice_hdr_base + pu1_slice_idx[left_ctb_indx];
 2083|  6.11M|        }
 2084|       |
 2085|  6.11M|        remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + sao_ht_luma);
 2086|  6.11M|        if(remaining_rows <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (2086:12): [True: 161k, False: 5.95M]
  ------------------
 2087|   161k|        {
 2088|   161k|            sao_ht_luma += remaining_rows;
 2089|   161k|        }
 2090|  6.11M|        remaining_rows = ps_sps->i2_pic_height_in_luma_samples / 2 - ((ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) + sao_ht_chroma);
 2091|  6.11M|        if(remaining_rows <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.11M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (2091:12): [True: 161k, False: 5.95M]
  ------------------
 2092|   161k|        {
 2093|   161k|            sao_ht_chroma += remaining_rows;
 2094|   161k|        }
 2095|       |
 2096|  6.11M|        pu1_src_luma -= sao_wd_luma;
 2097|  6.11M|        pu1_src_chroma -= sao_wd_chroma;
 2098|  6.11M|        ps_sao -= 1;
 2099|  6.11M|        pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma;
 2100|  6.11M|        pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma;
 2101|  6.11M|        pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size);
 2102|  6.11M|        pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size);
 2103|       |
 2104|       |
 2105|  6.11M|        if(0 != sao_ht_luma)
  ------------------
  |  Branch (2105:12): [True: 6.11M, False: 18.4E]
  ------------------
 2106|  6.11M|        {
 2107|  6.11M|            if(ps_slice_hdr_left->i1_slice_sao_luma_flag)
  ------------------
  |  Branch (2107:16): [True: 2.90M, False: 3.20M]
  ------------------
 2108|  2.90M|            {
 2109|  2.90M|                if(0 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (2109:20): [True: 2.87M, False: 25.0k]
  ------------------
 2110|  2.87M|                {
 2111|       |                    /* Update left, top and top-left */
 2112|  30.3M|                    for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (2112:34): [True: 27.5M, False: 2.87M]
  ------------------
 2113|  27.5M|                    {
 2114|  27.5M|                        pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 2115|  27.5M|                    }
 2116|       |                    /*Update in next location*/
 2117|  2.87M|                    pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 2118|       |
 2119|  2.87M|                    ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 2120|       |
 2121|  2.87M|                }
 2122|       |
 2123|  25.0k|                else if(1 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (2123:25): [True: 14.9k, False: 10.1k]
  ------------------
 2124|  14.9k|                {
 2125|  14.9k|                    ai1_offset_y[1] = ps_sao->b4_y_offset_1;
 2126|  14.9k|                    ai1_offset_y[2] = ps_sao->b4_y_offset_2;
 2127|  14.9k|                    ai1_offset_y[3] = ps_sao->b4_y_offset_3;
 2128|  14.9k|                    ai1_offset_y[4] = ps_sao->b4_y_offset_4;
 2129|       |
 2130|  14.9k|                    ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma,
 2131|  14.9k|                                                                              src_strd,
 2132|  14.9k|                                                                              pu1_src_left_luma,
 2133|  14.9k|                                                                              pu1_src_top_luma,
 2134|  14.9k|                                                                              pu1_sao_src_top_left_luma_curr_ctb,
 2135|  14.9k|                                                                              ps_sao->b5_y_band_pos,
 2136|  14.9k|                                                                              ai1_offset_y,
 2137|  14.9k|                                                                              sao_wd_luma,
 2138|  14.9k|                                                                              sao_ht_luma
 2139|  14.9k|                                                                             );
 2140|  14.9k|                }
 2141|       |
 2142|  10.1k|                else // if(2 <= ps_sao->b3_y_type_idx)
 2143|  10.1k|                {
 2144|  10.1k|                    ai1_offset_y[1] = ps_sao->b4_y_offset_1;
 2145|  10.1k|                    ai1_offset_y[2] = ps_sao->b4_y_offset_2;
 2146|  10.1k|                    ai1_offset_y[3] = ps_sao->b4_y_offset_3;
 2147|  10.1k|                    ai1_offset_y[4] = ps_sao->b4_y_offset_4;
 2148|       |
 2149|  91.3k|                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2149:32): [True: 81.2k, False: 10.1k]
  ------------------
 2150|  81.2k|                    {
 2151|  81.2k|                        au1_avail_luma[i] = 255;
 2152|  81.2k|                        au1_tile_slice_boundary[i] = 0;
 2153|  81.2k|                        au4_idx_l[i] = 0;
 2154|  81.2k|                        au4_ilf_across_tile_slice_enable[i] = 1;
 2155|  81.2k|                    }
 2156|       |                    /******************************************************************
 2157|       |                     * Derive the  Top-left CTB's neighbour pixel's slice indices.
 2158|       |                     *
 2159|       |                     *
 2160|       |                     *          ____________
 2161|       |                     *         |    |       |
 2162|       |                     *         | L_T|       |
 2163|       |                     *         |____|_______|____
 2164|       |                     *         |    |       |    |
 2165|       |                     *     L_L |  L |  L_R  |    |
 2166|       |                     *         |____|_______|    |
 2167|       |                     *              |            |
 2168|       |                     *          L_D |            |
 2169|       |                     *              |____________|
 2170|       |                     *
 2171|       |                     *****************************************************************/
 2172|       |
 2173|       |                    /*In case of slices or tiles*/
 2174|  10.1k|                    {
 2175|  10.1k|                        if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2175:28): [True: 225, False: 9.88k]
  |  Branch (2175:75): [True: 908, False: 8.97k]
  ------------------
 2176|  1.18k|                        {
 2177|  1.18k|                            ctbx_l_t = ps_sao_ctxt->i4_ctb_x - 1;
 2178|  1.18k|                            ctby_l_t = ps_sao_ctxt->i4_ctb_y - 1;
 2179|       |
 2180|  1.18k|                            ctbx_l_l = ps_sao_ctxt->i4_ctb_x - 1;
 2181|  1.18k|                            ctby_l_l = ps_sao_ctxt->i4_ctb_y;
 2182|       |
 2183|  1.18k|                            ctbx_l_r = ps_sao_ctxt->i4_ctb_x;
 2184|  1.18k|                            ctby_l_r = ps_sao_ctxt->i4_ctb_y;
 2185|       |
 2186|  1.18k|                            ctbx_l_d =  ps_sao_ctxt->i4_ctb_x - 1;
 2187|  1.18k|                            ctby_l_d =  ps_sao_ctxt->i4_ctb_y;
 2188|       |
 2189|  1.18k|                            ctbx_l = ps_sao_ctxt->i4_ctb_x - 1;
 2190|  1.18k|                            ctby_l = ps_sao_ctxt->i4_ctb_y;
 2191|       |
 2192|  1.18k|                            if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (2192:32): [True: 274, False: 908]
  ------------------
 2193|    274|                            {
 2194|    274|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2194:36): [True: 68, False: 206]
  ------------------
 2195|     68|                                {
 2196|     68|                                    au4_idx_l[2] = -1;
 2197|     68|                                    au4_idx_l[4] = -1;
 2198|     68|                                    au4_idx_l[5] = -1;
 2199|     68|                                }
 2200|    206|                                else
 2201|    206|                                {
 2202|    206|                                    au4_idx_l[2] = au4_idx_l[4] = pu1_slice_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)];
 2203|    206|                                    au4_idx_l[5] =  pu1_slice_idx[ctbx_l_t + 1 + (ctby_l_t  * ps_sps->i2_pic_wd_in_ctb)];
 2204|    206|                                }
 2205|    274|                                idx_l   = au4_idx_l[6] = pu1_slice_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)];
 2206|    274|                                au4_idx_l[0] = pu1_slice_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)];
 2207|    274|                                au4_idx_l[1] = au4_idx_l[7] = pu1_slice_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)];
 2208|    274|                                au4_idx_l[3] = pu1_slice_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)];
 2209|       |
 2210|       |                                /*Verify that the neighbor ctbs don't cross pic boundary.*/
 2211|    274|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2211:36): [True: 68, False: 206]
  ------------------
 2212|     68|                                {
 2213|     68|                                    au4_ilf_across_tile_slice_enable[2] = 0;
 2214|     68|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 2215|     68|                                    au4_ilf_across_tile_slice_enable[5] = 0;
 2216|     68|                                }
 2217|    206|                                else
 2218|    206|                                {
 2219|    206|                                    au4_ilf_across_tile_slice_enable[2] =  (ps_slice_hdr_base + idx_l)->i1_slice_loop_filter_across_slices_enabled_flag;
 2220|    206|                                    au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2];
 2221|       |
 2222|    206|                                }
 2223|       |                                //TODO: ILF flag checks for [0] and [6] is missing.
 2224|    274|                                au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_l[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 2225|    274|                                au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_l[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 2226|    274|                                au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_l[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 2227|       |
 2228|    274|                                if(idx_l < au4_idx_l[5])
  ------------------
  |  Branch (2228:36): [True: 145, False: 129]
  ------------------
 2229|    145|                                {
 2230|    145|                                    au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_l[5])->i1_slice_loop_filter_across_slices_enabled_flag;
 2231|    145|                                }
 2232|       |
 2233|       |                                /*
 2234|       |                                 * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 2235|       |                                 * of the pixel having a greater address is checked. Accordingly, set the availability flags
 2236|       |                                 */
 2237|  2.46k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2237:44): [True: 2.19k, False: 274]
  ------------------
 2238|  2.19k|                                {
 2239|       |                                    /*Sets the edges that lie on the slice/tile boundary*/
 2240|  2.19k|                                    if(au4_idx_l[i] != idx_l)
  ------------------
  |  Branch (2240:40): [True: 792, False: 1.40k]
  ------------------
 2241|    792|                                    {
 2242|    792|                                        au1_tile_slice_boundary[i] = 1;
 2243|    792|                                    }
 2244|  1.40k|                                    else
 2245|  1.40k|                                    {
 2246|  1.40k|                                        au4_ilf_across_tile_slice_enable[i] = 1;
 2247|  1.40k|                                    }
 2248|  2.19k|                                }
 2249|       |                                /*Reset indices*/
 2250|  2.46k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2250:44): [True: 2.19k, False: 274]
  ------------------
 2251|  2.19k|                                {
 2252|  2.19k|                                    au4_idx_l[i] = 0;
 2253|  2.19k|                                }
 2254|    274|                            }
 2255|       |
 2256|  1.18k|                            if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (2256:32): [True: 1.06k, False: 117]
  ------------------
 2257|  1.06k|                            {
 2258|       |                                /* Calculate availability flags at slice boundary */
 2259|  1.06k|                                if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (2259:37): [True: 199, False: 866]
  |  Branch (2259:85): [True: 405, False: 461]
  |  Branch (2259:137): [True: 396, False: 208]
  |  Branch (2259:165): [True: 231, False: 165]
  ------------------
 2260|    374|                                {
 2261|       |                                    /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 2262|    374|                                    if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (2262:40): [True: 155, False: 219]
  ------------------
 2263|    155|                                    {
 2264|    155|                                        if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2264:44): [True: 11, False: 144]
  ------------------
 2265|     11|                                        {
 2266|     11|                                            au4_idx_l[2] = -1;
 2267|     11|                                            au4_idx_l[4] = -1;
 2268|     11|                                            au4_idx_l[5] = -1;
 2269|     11|                                        }
 2270|    144|                                        else
 2271|    144|                                        {
 2272|    144|                                            au4_idx_l[2] = au4_idx_l[4] = pu1_tile_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)];
 2273|    144|                                            au4_idx_l[5] =  pu1_tile_idx[ctbx_l_t + 1 + (ctby_l_t  * ps_sps->i2_pic_wd_in_ctb)];
 2274|    144|                                        }
 2275|       |
 2276|    155|                                        idx_l   = au4_idx_l[6] = pu1_tile_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)];
 2277|    155|                                        au4_idx_l[0] = pu1_tile_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)];
 2278|    155|                                        au4_idx_l[1] = au4_idx_l[7] = pu1_tile_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)];
 2279|    155|                                        au4_idx_l[3] = pu1_tile_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)];
 2280|       |
 2281|  1.39k|                                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2281:52): [True: 1.24k, False: 155]
  ------------------
 2282|  1.24k|                                        {
 2283|       |                                            /*Sets the edges that lie on the slice/tile boundary*/
 2284|  1.24k|                                            if(au4_idx_l[i] != idx_l)
  ------------------
  |  Branch (2284:48): [True: 469, False: 771]
  ------------------
 2285|    469|                                            {
 2286|    469|                                                au1_tile_slice_boundary[i] |= 1;
 2287|    469|                                                au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag;
 2288|    469|                                            }
 2289|  1.24k|                                        }
 2290|    155|                                    }
 2291|    374|                                }
 2292|  1.06k|                            }
 2293|       |
 2294|  10.6k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2294:40): [True: 9.46k, False: 1.18k]
  ------------------
 2295|  9.46k|                            {
 2296|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 2297|  9.46k|                                if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (2297:36): [True: 1.26k, False: 8.20k]
  |  Branch (2297:68): [True: 741, False: 520]
  ------------------
 2298|    741|                                {
 2299|    741|                                    au1_avail_luma[i] = 0;
 2300|    741|                                }
 2301|  9.46k|                            }
 2302|  1.18k|                        }
 2303|  10.1k|                    }
 2304|  10.1k|                    if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_luma)
  ------------------
  |  Branch (2304:24): [True: 0, False: 10.1k]
  ------------------
 2305|      0|                    {
 2306|      0|                        au1_avail_luma[0] = 0;
 2307|      0|                        au1_avail_luma[4] = 0;
 2308|      0|                        au1_avail_luma[6] = 0;
 2309|      0|                    }
 2310|  10.1k|                    if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (2310:24): [True: 0, False: 10.1k]
  ------------------
 2311|      0|                    {
 2312|      0|                        au1_avail_luma[1] = 0;
 2313|      0|                        au1_avail_luma[5] = 0;
 2314|      0|                        au1_avail_luma[7] = 0;
 2315|      0|                    }
 2316|       |
 2317|  10.1k|                    if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2317:24): [True: 2.71k, False: 7.39k]
  ------------------
 2318|  2.71k|                    {
 2319|  2.71k|                        au1_avail_luma[2] = 0;
 2320|  2.71k|                        au1_avail_luma[4] = 0;
 2321|  2.71k|                        au1_avail_luma[5] = 0;
 2322|  2.71k|                    }
 2323|       |
 2324|  10.1k|                    if(ps_sps->i2_pic_height_in_luma_samples - (ps_sao_ctxt->i4_ctb_y  << log2_ctb_size) <= sao_ht_luma)
  ------------------
  |  Branch (2324:24): [True: 1.40k, False: 8.70k]
  ------------------
 2325|  1.40k|                    {
 2326|  1.40k|                        au1_avail_luma[3] = 0;
 2327|  1.40k|                        au1_avail_luma[6] = 0;
 2328|  1.40k|                        au1_avail_luma[7] = 0;
 2329|  1.40k|                    }
 2330|       |
 2331|  10.1k|                    {
 2332|  10.1k|                        au1_src_top_right[0] = pu1_src_top_luma[sao_wd_luma];
 2333|  10.1k|                        u1_sao_src_top_left_luma_bot_left = pu1_sao_src_top_left_luma_bot_left[0];
 2334|  10.1k|                        ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma,
 2335|  10.1k|                                                                          src_strd,
 2336|  10.1k|                                                                          pu1_src_left_luma,
 2337|  10.1k|                                                                          pu1_src_top_luma,
 2338|  10.1k|                                                                          pu1_sao_src_top_left_luma_curr_ctb,
 2339|  10.1k|                                                                          au1_src_top_right,
 2340|  10.1k|                                                                          &u1_sao_src_top_left_luma_bot_left,
 2341|  10.1k|                                                                          au1_avail_luma,
 2342|  10.1k|                                                                          ai1_offset_y,
 2343|  10.1k|                                                                          sao_wd_luma,
 2344|  10.1k|                                                                          sao_ht_luma);
 2345|  10.1k|                    }
 2346|       |
 2347|  10.1k|                }
 2348|  2.90M|            }
 2349|  3.20M|            else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2349:21): [True: 1.86M, False: 1.34M]
  |  Branch (2349:68): [True: 130k, False: 1.21M]
  ------------------
 2350|  1.99M|            {
 2351|       |                /* Update left, top and top-left */
 2352|  21.3M|                for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (2352:30): [True: 19.3M, False: 1.99M]
  ------------------
 2353|  19.3M|                {
 2354|  19.3M|                    pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 2355|  19.3M|                }
 2356|       |                /*Update in next location*/
 2357|  1.99M|                pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 2358|       |
 2359|  1.99M|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 2360|  1.99M|            }
 2361|  6.11M|        }
 2362|       |
 2363|  6.11M|        if(0 != sao_ht_chroma)
  ------------------
  |  Branch (2363:12): [True: 1.44M, False: 4.66M]
  ------------------
 2364|  1.44M|        {
 2365|  1.44M|            if(ps_slice_hdr_left->i1_slice_sao_chroma_flag)
  ------------------
  |  Branch (2365:16): [True: 169k, False: 1.27M]
  ------------------
 2366|   169k|            {
 2367|   169k|                if(0 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (2367:20): [True: 151k, False: 17.9k]
  ------------------
 2368|   151k|                {
 2369|  3.04M|                    for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (2369:34): [True: 2.89M, False: 151k]
  ------------------
 2370|  2.89M|                    {
 2371|  2.89M|                        pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 2372|  2.89M|                        pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 2373|  2.89M|                    }
 2374|   151k|                    pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 2375|   151k|                    pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 2376|       |
 2377|   151k|                    ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 2378|   151k|                }
 2379|       |
 2380|  17.9k|                else if(1 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (2380:25): [True: 9.44k, False: 8.53k]
  ------------------
 2381|  9.44k|                {
 2382|  9.44k|                    ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 2383|  9.44k|                    ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 2384|  9.44k|                    ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 2385|  9.44k|                    ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 2386|       |
 2387|  9.44k|                    ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 2388|  9.44k|                    ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 2389|  9.44k|                    ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 2390|  9.44k|                    ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 2391|       |
 2392|  9.44k|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (2392:24): [True: 1.03k, False: 8.40k]
  ------------------
 2393|  1.03k|                    {
 2394|  1.03k|                        ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 2395|  1.03k|                                                                                    src_strd,
 2396|  1.03k|                                                                                    pu1_src_left_chroma,
 2397|  1.03k|                                                                                    pu1_src_top_chroma,
 2398|  1.03k|                                                                                    pu1_sao_src_top_left_chroma_curr_ctb,
 2399|  1.03k|                                                                                    ps_sao->b5_cr_band_pos,
 2400|  1.03k|                                                                                    ps_sao->b5_cb_band_pos,
 2401|  1.03k|                                                                                    ai1_offset_cr,
 2402|  1.03k|                                                                                    ai1_offset_cb,
 2403|  1.03k|                                                                                    sao_wd_chroma,
 2404|  1.03k|                                                                                    sao_ht_chroma
 2405|  1.03k|                                                                                   );
 2406|  1.03k|                    }
 2407|  8.40k|                    else
 2408|  8.40k|                    {
 2409|  8.40k|                        ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 2410|  8.40k|                                                                                    src_strd,
 2411|  8.40k|                                                                                    pu1_src_left_chroma,
 2412|  8.40k|                                                                                    pu1_src_top_chroma,
 2413|  8.40k|                                                                                    pu1_sao_src_top_left_chroma_curr_ctb,
 2414|  8.40k|                                                                                    ps_sao->b5_cb_band_pos,
 2415|  8.40k|                                                                                    ps_sao->b5_cr_band_pos,
 2416|  8.40k|                                                                                    ai1_offset_cb,
 2417|  8.40k|                                                                                    ai1_offset_cr,
 2418|  8.40k|                                                                                    sao_wd_chroma,
 2419|  8.40k|                                                                                    sao_ht_chroma
 2420|  8.40k|                                                                                   );
 2421|  8.40k|                    }
 2422|  9.44k|                }
 2423|       |
 2424|  8.53k|                else // if(2 <= ps_sao->b3_cb_type_idx)
 2425|  8.53k|                {
 2426|  8.53k|                    ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 2427|  8.53k|                    ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 2428|  8.53k|                    ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 2429|  8.53k|                    ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 2430|       |
 2431|  8.53k|                    ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 2432|  8.53k|                    ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 2433|  8.53k|                    ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 2434|  8.53k|                    ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 2435|       |
 2436|  76.9k|                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2436:32): [True: 68.4k, False: 8.53k]
  ------------------
 2437|  68.4k|                    {
 2438|  68.4k|                        au1_avail_chroma[i] = 255;
 2439|  68.4k|                        au1_tile_slice_boundary[i] = 0;
 2440|  68.4k|                        au4_idx_l[i] = 0;
 2441|  68.4k|                        au4_ilf_across_tile_slice_enable[i] = 1;
 2442|  68.4k|                    }
 2443|       |                    /*In case of slices*/
 2444|  8.53k|                    {
 2445|  8.53k|                        if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2445:28): [True: 369, False: 8.16k]
  |  Branch (2445:75): [True: 608, False: 7.55k]
  ------------------
 2446|  1.00k|                        {
 2447|  1.00k|                            ctbx_l_t = ps_sao_ctxt->i4_ctb_x - 1;
 2448|  1.00k|                            ctby_l_t = ps_sao_ctxt->i4_ctb_y - 1;
 2449|       |
 2450|  1.00k|                            ctbx_l_l = ps_sao_ctxt->i4_ctb_x - 1;
 2451|  1.00k|                            ctby_l_l = ps_sao_ctxt->i4_ctb_y;
 2452|       |
 2453|  1.00k|                            ctbx_l_r = ps_sao_ctxt->i4_ctb_x;
 2454|  1.00k|                            ctby_l_r = ps_sao_ctxt->i4_ctb_y;
 2455|       |
 2456|  1.00k|                            ctbx_l_d =  ps_sao_ctxt->i4_ctb_x - 1;
 2457|  1.00k|                            ctby_l_d =  ps_sao_ctxt->i4_ctb_y;
 2458|       |
 2459|  1.00k|                            ctbx_l = ps_sao_ctxt->i4_ctb_x - 1;
 2460|  1.00k|                            ctby_l = ps_sao_ctxt->i4_ctb_y;
 2461|       |
 2462|  1.00k|                            if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (2462:32): [True: 392, False: 608]
  ------------------
 2463|    392|                            {
 2464|    392|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2464:36): [True: 171, False: 221]
  ------------------
 2465|    171|                                {
 2466|    171|                                    au4_idx_l[2] = -1;
 2467|    171|                                    au4_idx_l[4] = -1;
 2468|    171|                                    au4_idx_l[5] = -1;
 2469|    171|                                }
 2470|    221|                                else
 2471|    221|                                {
 2472|    221|                                    au4_idx_l[2] = au4_idx_l[4] = pu1_slice_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)];
 2473|    221|                                    au4_idx_l[5] =  pu1_slice_idx[ctbx_l_t + 1 + (ctby_l_t  * ps_sps->i2_pic_wd_in_ctb)];
 2474|    221|                                }
 2475|    392|                                idx_l   = au4_idx_l[6] = pu1_slice_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)];
 2476|    392|                                au4_idx_l[0] = pu1_slice_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)];
 2477|    392|                                au4_idx_l[1] = au4_idx_l[7] = pu1_slice_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)];
 2478|    392|                                au4_idx_l[3] = pu1_slice_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)];
 2479|       |
 2480|       |                                /*Verify that the neighbour ctbs dont cross pic boundary.*/
 2481|    392|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2481:36): [True: 171, False: 221]
  ------------------
 2482|    171|                                {
 2483|    171|                                    au4_ilf_across_tile_slice_enable[2] = 0;
 2484|    171|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 2485|    171|                                    au4_ilf_across_tile_slice_enable[5] = 0;
 2486|    171|                                }
 2487|    221|                                else
 2488|    221|                                {
 2489|    221|                                    au4_ilf_across_tile_slice_enable[2] =  (ps_slice_hdr_base + idx_l)->i1_slice_loop_filter_across_slices_enabled_flag;
 2490|    221|                                    au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2];
 2491|    221|                                }
 2492|       |
 2493|    392|                                if(au4_idx_l[5] > idx_l)
  ------------------
  |  Branch (2493:36): [True: 144, False: 248]
  ------------------
 2494|    144|                                {
 2495|    144|                                    au4_ilf_across_tile_slice_enable[5] = (ps_slice_hdr_base + au4_idx_l[5])->i1_slice_loop_filter_across_slices_enabled_flag;
 2496|    144|                                }
 2497|       |
 2498|       |                                //  au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_l)->i1_slice_loop_filter_across_slices_enabled_flag;
 2499|    392|                                au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_l[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 2500|    392|                                au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_l[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 2501|    392|                                au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_l[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 2502|       |                                /*
 2503|       |                                 * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 2504|       |                                 * of the pixel having a greater address is checked. Accordingly, set the availability flags
 2505|       |                                 */
 2506|  3.52k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2506:44): [True: 3.13k, False: 392]
  ------------------
 2507|  3.13k|                                {
 2508|       |                                    /*Sets the edges that lie on the slice/tile boundary*/
 2509|  3.13k|                                    if(au4_idx_l[i] != idx_l)
  ------------------
  |  Branch (2509:40): [True: 1.19k, False: 1.93k]
  ------------------
 2510|  1.19k|                                    {
 2511|  1.19k|                                        au1_tile_slice_boundary[i] = 1;
 2512|  1.19k|                                    }
 2513|  1.93k|                                    else
 2514|  1.93k|                                    {
 2515|  1.93k|                                        au4_ilf_across_tile_slice_enable[i] = 1;
 2516|  1.93k|                                    }
 2517|  3.13k|                                }
 2518|       |                                /*Reset indices*/
 2519|  3.52k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2519:44): [True: 3.13k, False: 392]
  ------------------
 2520|  3.13k|                                {
 2521|  3.13k|                                    au4_idx_l[i] = 0;
 2522|  3.13k|                                }
 2523|    392|                            }
 2524|  1.00k|                            if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (2524:32): [True: 843, False: 157]
  ------------------
 2525|    843|                            {
 2526|       |                                /* Calculate availability flags at slice boundary */
 2527|    843|                                if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (2527:37): [True: 237, False: 606]
  |  Branch (2527:85): [True: 228, False: 378]
  |  Branch (2527:137): [True: 228, False: 238]
  |  Branch (2527:165): [True: 111, False: 117]
  ------------------
 2528|    355|                                {
 2529|       |                                    /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 2530|    355|                                    if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (2530:40): [True: 53, False: 302]
  ------------------
 2531|     53|                                    {
 2532|     53|                                        if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2532:44): [True: 2, False: 51]
  ------------------
 2533|      2|                                        {
 2534|      2|                                            au4_idx_l[2] = -1;
 2535|      2|                                            au4_idx_l[4] = -1;
 2536|      2|                                            au4_idx_l[5] = -1;
 2537|      2|                                        }
 2538|     51|                                        else
 2539|     51|                                        {
 2540|     51|                                            au4_idx_l[2] = au4_idx_l[4] = pu1_tile_idx[ctbx_l_t + (ctby_l_t * ps_sps->i2_pic_wd_in_ctb)];
 2541|     51|                                            au4_idx_l[5] =  pu1_tile_idx[ctbx_l_t + 1 + (ctby_l_t  * ps_sps->i2_pic_wd_in_ctb)];
 2542|     51|                                        }
 2543|       |
 2544|     53|                                        idx_l   = au4_idx_l[6] = pu1_tile_idx[ctbx_l + (ctby_l * ps_sps->i2_pic_wd_in_ctb)];
 2545|     53|                                        au4_idx_l[0] = pu1_tile_idx[ctbx_l_l + (ctby_l_l * ps_sps->i2_pic_wd_in_ctb)];
 2546|     53|                                        au4_idx_l[1] = au4_idx_l[7] = pu1_tile_idx[ctbx_l_r + (ctby_l_r * ps_sps->i2_pic_wd_in_ctb)];
 2547|     53|                                        au4_idx_l[3] = pu1_tile_idx[ctbx_l_d + (ctby_l_d * ps_sps->i2_pic_wd_in_ctb)];
 2548|       |
 2549|    477|                                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2549:52): [True: 424, False: 53]
  ------------------
 2550|    424|                                        {
 2551|       |                                            /*Sets the edges that lie on the slice/tile boundary*/
 2552|    424|                                            if(au4_idx_l[i] != idx_l)
  ------------------
  |  Branch (2552:48): [True: 163, False: 261]
  ------------------
 2553|    163|                                            {
 2554|    163|                                                au1_tile_slice_boundary[i] |= 1;
 2555|    163|                                                au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0
 2556|    163|                                            }
 2557|    424|                                        }
 2558|     53|                                    }
 2559|    355|                                }
 2560|    843|                            }
 2561|  9.00k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2561:40): [True: 8.00k, False: 1.00k]
  ------------------
 2562|  8.00k|                            {
 2563|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 2564|  8.00k|                                if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (2564:36): [True: 1.36k, False: 6.64k]
  |  Branch (2564:68): [True: 811, False: 549]
  ------------------
 2565|    811|                                {
 2566|    811|                                    au1_avail_chroma[i] = 0;
 2567|    811|                                }
 2568|  8.00k|                            }
 2569|  1.00k|                        }
 2570|  8.53k|                    }
 2571|  8.53k|                    if(0 == (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) - sao_wd_chroma)
  ------------------
  |  Branch (2571:24): [True: 3, False: 8.53k]
  ------------------
 2572|      3|                    {
 2573|      3|                        au1_avail_chroma[0] = 0;
 2574|      3|                        au1_avail_chroma[4] = 0;
 2575|      3|                        au1_avail_chroma[6] = 0;
 2576|      3|                    }
 2577|       |
 2578|  8.53k|                    if(ps_sps->i2_pic_wd_in_ctb == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (2578:24): [True: 0, False: 8.53k]
  ------------------
 2579|      0|                    {
 2580|      0|                        au1_avail_chroma[1] = 0;
 2581|      0|                        au1_avail_chroma[5] = 0;
 2582|      0|                        au1_avail_chroma[7] = 0;
 2583|      0|                    }
 2584|       |
 2585|  8.53k|                    if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2585:24): [True: 2.12k, False: 6.40k]
  ------------------
 2586|  2.12k|                    {
 2587|  2.12k|                        au1_avail_chroma[2] = 0;
 2588|  2.12k|                        au1_avail_chroma[4] = 0;
 2589|  2.12k|                        au1_avail_chroma[5] = 0;
 2590|  2.12k|                    }
 2591|       |
 2592|  8.53k|                    if(ps_sps->i2_pic_height_in_luma_samples / 2 - (ps_sao_ctxt->i4_ctb_y  << (log2_ctb_size - 1)) <= sao_ht_chroma)
  ------------------
  |  Branch (2592:24): [True: 877, False: 7.65k]
  ------------------
 2593|    877|                    {
 2594|    877|                        au1_avail_chroma[3] = 0;
 2595|    877|                        au1_avail_chroma[6] = 0;
 2596|    877|                        au1_avail_chroma[7] = 0;
 2597|    877|                    }
 2598|       |
 2599|  8.53k|                    {
 2600|  8.53k|                        au1_src_top_right[0] = pu1_src_top_chroma[sao_wd_chroma];
 2601|  8.53k|                        au1_src_top_right[1] = pu1_src_top_chroma[sao_wd_chroma + 1];
 2602|  8.53k|                        au1_src_bot_left[0] = pu1_sao_src_top_left_chroma_bot_left[0];
 2603|  8.53k|                        au1_src_bot_left[1] = pu1_sao_src_top_left_chroma_bot_left[1];
 2604|       |                        //au1_src_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2];
 2605|       |                        //au1_src_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1];
 2606|  8.53k|                        if((ctb_size == 16) && (ps_sao_ctxt->i4_ctb_x != ps_sps->i2_pic_wd_in_ctb - 1))
  ------------------
  |  Branch (2606:28): [True: 3, False: 8.53k]
  |  Branch (2606:48): [True: 0, False: 3]
  ------------------
 2607|      0|                        {
 2608|      0|                            au1_src_top_right[0] = pu1_src_chroma[sao_wd_chroma - src_strd];
 2609|      0|                            au1_src_top_right[1] = pu1_src_chroma[sao_wd_chroma - src_strd + 1];
 2610|      0|                        }
 2611|       |
 2612|       |
 2613|  8.53k|                        if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (2613:28): [True: 569, False: 7.96k]
  ------------------
 2614|    569|                        {
 2615|    569|                            ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 2616|    569|                                                                                 src_strd,
 2617|    569|                                                                                 pu1_src_left_chroma,
 2618|    569|                                                                                 pu1_src_top_chroma,
 2619|    569|                                                                                 pu1_sao_src_top_left_chroma_curr_ctb,
 2620|    569|                                                                                 au1_src_top_right,
 2621|    569|                                                                                 au1_src_bot_left,
 2622|    569|                                                                                 au1_avail_chroma,
 2623|    569|                                                                                 ai1_offset_cr,
 2624|    569|                                                                                 ai1_offset_cb,
 2625|    569|                                                                                 sao_wd_chroma,
 2626|    569|                                                                                 sao_ht_chroma);
 2627|    569|                        }
 2628|  7.96k|                        else
 2629|  7.96k|                        {
 2630|  7.96k|                            ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 2631|  7.96k|                                                                                 src_strd,
 2632|  7.96k|                                                                                 pu1_src_left_chroma,
 2633|  7.96k|                                                                                 pu1_src_top_chroma,
 2634|  7.96k|                                                                                 pu1_sao_src_top_left_chroma_curr_ctb,
 2635|  7.96k|                                                                                 au1_src_top_right,
 2636|  7.96k|                                                                                 au1_src_bot_left,
 2637|  7.96k|                                                                                 au1_avail_chroma,
 2638|  7.96k|                                                                                 ai1_offset_cb,
 2639|  7.96k|                                                                                 ai1_offset_cr,
 2640|  7.96k|                                                                                 sao_wd_chroma,
 2641|  7.96k|                                                                                 sao_ht_chroma);
 2642|  7.96k|                        }
 2643|  8.53k|                    }
 2644|       |
 2645|  8.53k|                }
 2646|   169k|            }
 2647|  1.27M|            else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2647:21): [True: 29.1k, False: 1.25M]
  |  Branch (2647:68): [True: 74.2k, False: 1.17M]
  ------------------
 2648|   103k|            {
 2649|  2.21M|                for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (2649:30): [True: 2.11M, False: 103k]
  ------------------
 2650|  2.11M|                {
 2651|  2.11M|                    pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 2652|  2.11M|                    pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 2653|  2.11M|                }
 2654|   103k|                pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 2655|   103k|                pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 2656|       |
 2657|   103k|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 2658|   103k|            }
 2659|       |
 2660|  1.44M|        }
 2661|  6.11M|        pu1_src_luma += sao_wd_luma;
 2662|  6.11M|        pu1_src_chroma += sao_wd_chroma;
 2663|  6.11M|        ps_sao += 1;
 2664|  6.11M|    }
 2665|       |
 2666|       |
 2667|       |    /* Current CTB */
 2668|  6.24M|    {
 2669|  6.24M|        WORD32 sao_wd_luma = ctb_size - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
 2670|  6.24M|        WORD32 sao_wd_chroma = ctb_size - SAO_SHIFT_CTB * 2;
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
 2671|  6.24M|        WORD32 sao_ht_luma = ctb_size - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
 2672|  6.24M|        WORD32 sao_ht_chroma = ctb_size / 2 - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
 2673|  6.24M|        WORD32 ctbx_c_t = 0, ctbx_c_l = 0, ctbx_c_r = 0, ctbx_c_d = 0, ctbx_c = 0;
 2674|  6.24M|        WORD32 ctby_c_t = 0, ctby_c_l = 0, ctby_c_r = 0, ctby_c_d = 0, ctby_c = 0;
 2675|  6.24M|        WORD32 au4_idx_c[8], idx_c;
 2676|       |
 2677|  6.24M|        WORD32 remaining_rows;
 2678|  6.24M|        WORD32 remaining_cols;
 2679|       |
 2680|  6.24M|        remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_luma);
 2681|  6.24M|        if(remaining_cols <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (2681:12): [True: 126k, False: 6.11M]
  ------------------
 2682|   126k|        {
 2683|   126k|            sao_wd_luma += remaining_cols;
 2684|   126k|        }
 2685|  6.24M|        remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + sao_wd_chroma);
 2686|  6.24M|        if(remaining_cols <= 2 * SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (2686:12): [True: 126k, False: 6.11M]
  ------------------
 2687|   126k|        {
 2688|   126k|            sao_wd_chroma += remaining_cols;
 2689|   126k|        }
 2690|       |
 2691|  6.24M|        remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + sao_ht_luma);
 2692|  6.24M|        if(remaining_rows <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (2692:12): [True: 166k, False: 6.07M]
  ------------------
 2693|   166k|        {
 2694|   166k|            sao_ht_luma += remaining_rows;
 2695|   166k|        }
 2696|  6.24M|        remaining_rows = ps_sps->i2_pic_height_in_luma_samples / 2 - ((ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 1)) + sao_ht_chroma);
 2697|  6.24M|        if(remaining_rows <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  6.24M|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (2697:12): [True: 166k, False: 6.07M]
  ------------------
 2698|   166k|        {
 2699|   166k|            sao_ht_chroma += remaining_rows;
 2700|   166k|        }
 2701|       |
 2702|  6.24M|        pu1_src_top_luma = ps_sao_ctxt->pu1_sao_src_top_luma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size);
 2703|  6.24M|        pu1_src_top_chroma = ps_sao_ctxt->pu1_sao_src_top_chroma + (ps_sao_ctxt->i4_ctb_x << log2_ctb_size);
 2704|  6.24M|        pu1_src_left_luma = ps_sao_ctxt->pu1_sao_src_left_luma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size);
 2705|  6.24M|        pu1_src_left_chroma = ps_sao_ctxt->pu1_sao_src_left_chroma + (ps_sao_ctxt->i4_ctb_y << log2_ctb_size);
 2706|       |
 2707|  6.24M|        if((0 != sao_wd_luma) && (0 != sao_ht_luma))
  ------------------
  |  Branch (2707:12): [True: 6.24M, False: 1.49k]
  |  Branch (2707:34): [True: 6.24M, False: 18.4E]
  ------------------
 2708|  6.24M|        {
 2709|  6.24M|            if(ps_sao_ctxt->ps_slice_hdr->i1_slice_sao_luma_flag)
  ------------------
  |  Branch (2709:16): [True: 2.93M, False: 3.30M]
  ------------------
 2710|  2.93M|            {
 2711|  2.93M|                if(0 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (2711:20): [True: 2.90M, False: 28.3k]
  ------------------
 2712|  2.90M|                {
 2713|       |                    /* Update left, top and top-left */
 2714|  31.0M|                    for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (2714:34): [True: 28.1M, False: 2.90M]
  ------------------
 2715|  28.1M|                    {
 2716|  28.1M|                        pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 2717|  28.1M|                    }
 2718|  2.90M|                    pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 2719|       |
 2720|  2.90M|                    ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 2721|       |
 2722|  2.90M|                    pu1_sao_src_top_left_luma_top_right[0] = pu1_src_luma[(sao_ht_luma - 1) * src_strd + sao_wd_luma];
 2723|       |
 2724|  2.90M|                }
 2725|       |
 2726|  28.3k|                else if(1 == ps_sao->b3_y_type_idx)
  ------------------
  |  Branch (2726:25): [True: 16.7k, False: 11.6k]
  ------------------
 2727|  16.7k|                {
 2728|  16.7k|                    ai1_offset_y[1] = ps_sao->b4_y_offset_1;
 2729|  16.7k|                    ai1_offset_y[2] = ps_sao->b4_y_offset_2;
 2730|  16.7k|                    ai1_offset_y[3] = ps_sao->b4_y_offset_3;
 2731|  16.7k|                    ai1_offset_y[4] = ps_sao->b4_y_offset_4;
 2732|       |
 2733|  16.7k|                    ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr(pu1_src_luma,
 2734|  16.7k|                                                                              src_strd,
 2735|  16.7k|                                                                              pu1_src_left_luma,
 2736|  16.7k|                                                                              pu1_src_top_luma,
 2737|  16.7k|                                                                              pu1_sao_src_top_left_luma_curr_ctb,
 2738|  16.7k|                                                                              ps_sao->b5_y_band_pos,
 2739|  16.7k|                                                                              ai1_offset_y,
 2740|  16.7k|                                                                              sao_wd_luma,
 2741|  16.7k|                                                                              sao_ht_luma
 2742|  16.7k|                                                                             );
 2743|  16.7k|                }
 2744|       |
 2745|  11.6k|                else // if(2 <= ps_sao->b3_y_type_idx)
 2746|  11.6k|                {
 2747|  11.6k|                    ai1_offset_y[1] = ps_sao->b4_y_offset_1;
 2748|  11.6k|                    ai1_offset_y[2] = ps_sao->b4_y_offset_2;
 2749|  11.6k|                    ai1_offset_y[3] = ps_sao->b4_y_offset_3;
 2750|  11.6k|                    ai1_offset_y[4] = ps_sao->b4_y_offset_4;
 2751|       |
 2752|   104k|                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2752:32): [True: 93.1k, False: 11.6k]
  ------------------
 2753|  93.1k|                    {
 2754|  93.1k|                        au1_avail_luma[i] = 255;
 2755|  93.1k|                        au1_tile_slice_boundary[i] = 0;
 2756|  93.1k|                        au4_idx_c[i] = 0;
 2757|  93.1k|                        au4_ilf_across_tile_slice_enable[i] = 1;
 2758|  93.1k|                    }
 2759|       |                    /******************************************************************
 2760|       |                     * Derive the  Top-left CTB's neighbour pixel's slice indices.
 2761|       |                     *
 2762|       |                     *
 2763|       |                     *          ____________
 2764|       |                     *         |    |       |
 2765|       |                     *         |    | C_T   |
 2766|       |                     *         |____|_______|____
 2767|       |                     *         |    |       |    |
 2768|       |                     *         | C_L|   C   | C_R|
 2769|       |                     *         |____|_______|    |
 2770|       |                     *              |  C_D       |
 2771|       |                     *              |            |
 2772|       |                     *              |____________|
 2773|       |                     *
 2774|       |                     *****************************************************************/
 2775|       |
 2776|       |                    /*In case of slices*/
 2777|  11.6k|                    {
 2778|  11.6k|                        if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2778:28): [True: 359, False: 11.2k]
  |  Branch (2778:75): [True: 1.21k, False: 10.0k]
  ------------------
 2779|  1.61k|                        {
 2780|  1.61k|                            ctbx_c_t = ps_sao_ctxt->i4_ctb_x;
 2781|  1.61k|                            ctby_c_t = ps_sao_ctxt->i4_ctb_y - 1;
 2782|       |
 2783|  1.61k|                            ctbx_c_l = ps_sao_ctxt->i4_ctb_x - 1;
 2784|  1.61k|                            ctby_c_l = ps_sao_ctxt->i4_ctb_y;
 2785|       |
 2786|  1.61k|                            ctbx_c_r = ps_sao_ctxt->i4_ctb_x;
 2787|  1.61k|                            ctby_c_r = ps_sao_ctxt->i4_ctb_y;
 2788|       |
 2789|  1.61k|                            ctbx_c_d =  ps_sao_ctxt->i4_ctb_x;
 2790|  1.61k|                            ctby_c_d =  ps_sao_ctxt->i4_ctb_y;
 2791|       |
 2792|  1.61k|                            ctbx_c = ps_sao_ctxt->i4_ctb_x;
 2793|  1.61k|                            ctby_c = ps_sao_ctxt->i4_ctb_y;
 2794|       |
 2795|  1.61k|                            if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (2795:32): [True: 393, False: 1.21k]
  ------------------
 2796|    393|                            {
 2797|    393|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (2797:36): [True: 291, False: 102]
  ------------------
 2798|    291|                                {
 2799|    291|                                    au4_idx_c[6] = -1;
 2800|    291|                                    au4_idx_c[0] = -1;
 2801|    291|                                    au4_idx_c[4] = -1;
 2802|    291|                                }
 2803|    102|                                else
 2804|    102|                                {
 2805|    102|                                    au4_idx_c[0] =  au4_idx_c[6] = pu1_slice_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)];
 2806|    102|                                }
 2807|       |
 2808|    393|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2808:36): [True: 47, False: 346]
  ------------------
 2809|     47|                                {
 2810|     47|                                    au4_idx_c[2] = -1;
 2811|     47|                                    au4_idx_c[5] = -1;
 2812|     47|                                    au4_idx_c[4] = -1;
 2813|     47|                                }
 2814|    346|                                else
 2815|    346|                                {
 2816|    346|                                    au4_idx_c[4] =  pu1_slice_idx[ctbx_c_t - 1 + (ctby_c_t  * ps_sps->i2_pic_wd_in_ctb)];
 2817|    346|                                    au4_idx_c[2] = au4_idx_c[5] = pu1_slice_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)];
 2818|    346|                                }
 2819|    393|                                idx_c   = pu1_slice_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)];
 2820|    393|                                au4_idx_c[1] = au4_idx_c[7] = pu1_slice_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)];
 2821|    393|                                au4_idx_c[3] = pu1_slice_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)];
 2822|       |
 2823|    393|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (2823:36): [True: 291, False: 102]
  ------------------
 2824|    291|                                {
 2825|    291|                                    au4_ilf_across_tile_slice_enable[6] = 0;
 2826|    291|                                    au4_ilf_across_tile_slice_enable[0] = 0;
 2827|    291|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 2828|    291|                                }
 2829|    102|                                else
 2830|    102|                                {
 2831|    102|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + au4_idx_c[6])->i1_slice_loop_filter_across_slices_enabled_flag;
 2832|    102|                                    au4_ilf_across_tile_slice_enable[0] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;;
 2833|    102|                                }
 2834|    393|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2834:36): [True: 47, False: 346]
  ------------------
 2835|     47|                                {
 2836|     47|                                    au4_ilf_across_tile_slice_enable[2] = 0;
 2837|     47|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 2838|     47|                                    au4_ilf_across_tile_slice_enable[5] = 0;
 2839|     47|                                }
 2840|    346|                                else
 2841|    346|                                {
 2842|    346|                                    au4_ilf_across_tile_slice_enable[2] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;
 2843|    346|                                    au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2];
 2844|    346|                                }
 2845|    393|                                au4_ilf_across_tile_slice_enable[1] = (ps_slice_hdr_base + au4_idx_c[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 2846|    393|                                au4_ilf_across_tile_slice_enable[3] = (ps_slice_hdr_base + au4_idx_c[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 2847|    393|                                au4_ilf_across_tile_slice_enable[7] = (ps_slice_hdr_base + au4_idx_c[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 2848|       |
 2849|    393|                                if(au4_idx_c[6] < idx_c)
  ------------------
  |  Branch (2849:36): [True: 316, False: 77]
  ------------------
 2850|    316|                                {
 2851|    316|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;
 2852|    316|                                }
 2853|       |
 2854|       |                                /*
 2855|       |                                 * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 2856|       |                                 * of the pixel having a greater address is checked. Accordingly, set the availability flags
 2857|       |                                 */
 2858|  3.53k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2858:44): [True: 3.14k, False: 393]
  ------------------
 2859|  3.14k|                                {
 2860|       |                                    /*Sets the edges that lie on the slice/tile boundary*/
 2861|  3.14k|                                    if(au4_idx_c[i] != idx_c)
  ------------------
  |  Branch (2861:40): [True: 854, False: 2.29k]
  ------------------
 2862|    854|                                    {
 2863|    854|                                        au1_tile_slice_boundary[i] = 1;
 2864|    854|                                    }
 2865|  2.29k|                                    else
 2866|  2.29k|                                    {
 2867|  2.29k|                                        au4_ilf_across_tile_slice_enable[i] = 1;
 2868|  2.29k|                                    }
 2869|  3.14k|                                }
 2870|       |                                /*Reset indices*/
 2871|  3.53k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2871:44): [True: 3.14k, False: 393]
  ------------------
 2872|  3.14k|                                {
 2873|  3.14k|                                    au4_idx_c[i] = 0;
 2874|  3.14k|                                }
 2875|    393|                            }
 2876|       |
 2877|  1.61k|                            if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (2877:32): [True: 1.22k, False: 381]
  ------------------
 2878|  1.22k|                            {
 2879|       |                                /* Calculate availability flags at slice boundary */
 2880|  1.22k|                                if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (2880:37): [True: 357, False: 872]
  |  Branch (2880:85): [True: 411, False: 461]
  |  Branch (2880:137): [True: 747, False: 21]
  |  Branch (2880:165): [True: 443, False: 304]
  ------------------
 2881|    326|                                {
 2882|       |                                    /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 2883|    326|                                    if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (2883:40): [True: 261, False: 65]
  ------------------
 2884|    261|                                    {
 2885|    261|                                        if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (2885:44): [True: 131, False: 130]
  ------------------
 2886|    131|                                        {
 2887|    131|                                            au4_idx_c[6] = -1;
 2888|    131|                                            au4_idx_c[0] = -1;
 2889|    131|                                            au4_idx_c[4] = -1;
 2890|    131|                                        }
 2891|    130|                                        else
 2892|    130|                                        {
 2893|    130|                                            au4_idx_c[0] =  au4_idx_c[6] = pu1_tile_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)];
 2894|    130|                                        }
 2895|       |
 2896|    261|                                        if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2896:44): [True: 11, False: 250]
  ------------------
 2897|     11|                                        {
 2898|     11|                                            au4_idx_c[2] = -1;
 2899|     11|                                            au4_idx_c[5] = -1;
 2900|     11|                                            au4_idx_c[4] = -1;
 2901|     11|                                        }
 2902|    250|                                        else
 2903|    250|                                        {
 2904|    250|                                            au4_idx_c[4] =  pu1_tile_idx[ctbx_c_t - 1 + (ctby_c_t  * ps_sps->i2_pic_wd_in_ctb)];
 2905|    250|                                            au4_idx_c[2] = au4_idx_c[5] = pu1_tile_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)];
 2906|    250|                                        }
 2907|    261|                                        idx_c   = pu1_tile_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)];
 2908|    261|                                        au4_idx_c[1] = au4_idx_c[7] = pu1_tile_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)];
 2909|    261|                                        au4_idx_c[3] = pu1_tile_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)];
 2910|       |
 2911|  2.34k|                                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2911:52): [True: 2.08k, False: 261]
  ------------------
 2912|  2.08k|                                        {
 2913|       |                                            /*Sets the edges that lie on the slice/tile boundary*/
 2914|  2.08k|                                            if(au4_idx_c[i] != idx_c)
  ------------------
  |  Branch (2914:48): [True: 799, False: 1.28k]
  ------------------
 2915|    799|                                            {
 2916|    799|                                                au1_tile_slice_boundary[i] |= 1;
 2917|    799|                                                au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0
 2918|    799|                                            }
 2919|  2.08k|                                        }
 2920|    261|                                    }
 2921|    326|                                }
 2922|  1.22k|                            }
 2923|       |
 2924|  14.4k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (2924:40): [True: 12.8k, False: 1.61k]
  ------------------
 2925|  12.8k|                            {
 2926|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 2927|  12.8k|                                if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (2927:36): [True: 1.65k, False: 11.2k]
  |  Branch (2927:68): [True: 1.27k, False: 376]
  ------------------
 2928|  1.27k|                                {
 2929|  1.27k|                                    au1_avail_luma[i] = 0;
 2930|  1.27k|                                }
 2931|  12.8k|                            }
 2932|       |
 2933|  1.61k|                        }
 2934|  11.6k|                    }
 2935|  11.6k|                    if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (2935:24): [True: 1.92k, False: 9.68k]
  ------------------
 2936|  1.92k|                    {
 2937|  1.92k|                        au1_avail_luma[0] = 0;
 2938|  1.92k|                        au1_avail_luma[4] = 0;
 2939|  1.92k|                        au1_avail_luma[6] = 0;
 2940|  1.92k|                    }
 2941|       |
 2942|  11.6k|                    if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_luma)
  ------------------
  |  Branch (2942:24): [True: 1.48k, False: 10.1k]
  ------------------
 2943|  1.48k|                    {
 2944|  1.48k|                        au1_avail_luma[1] = 0;
 2945|  1.48k|                        au1_avail_luma[5] = 0;
 2946|  1.48k|                        au1_avail_luma[7] = 0;
 2947|  1.48k|                    }
 2948|       |
 2949|  11.6k|                    if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (2949:24): [True: 3.04k, False: 8.56k]
  ------------------
 2950|  3.04k|                    {
 2951|  3.04k|                        au1_avail_luma[2] = 0;
 2952|  3.04k|                        au1_avail_luma[4] = 0;
 2953|  3.04k|                        au1_avail_luma[5] = 0;
 2954|  3.04k|                    }
 2955|       |
 2956|  11.6k|                    if(ps_sps->i2_pic_height_in_luma_samples - (ps_sao_ctxt->i4_ctb_y  << log2_ctb_size) <= sao_ht_luma)
  ------------------
  |  Branch (2956:24): [True: 1.52k, False: 10.0k]
  ------------------
 2957|  1.52k|                    {
 2958|  1.52k|                        au1_avail_luma[3] = 0;
 2959|  1.52k|                        au1_avail_luma[6] = 0;
 2960|  1.52k|                        au1_avail_luma[7] = 0;
 2961|  1.52k|                    }
 2962|       |
 2963|  11.6k|                    {
 2964|  11.6k|                        au1_src_top_right[0] = pu1_src_luma[sao_wd_luma - src_strd];
 2965|  11.6k|                        u1_sao_src_top_left_luma_bot_left = pu1_src_luma[sao_ht_luma * src_strd - 1];
 2966|       |
 2967|  11.6k|                        ps_codec->apf_sao_luma[ps_sao->b3_y_type_idx - 2](pu1_src_luma,
 2968|  11.6k|                                                                          src_strd,
 2969|  11.6k|                                                                          pu1_src_left_luma,
 2970|  11.6k|                                                                          pu1_src_top_luma,
 2971|  11.6k|                                                                          pu1_sao_src_top_left_luma_curr_ctb,
 2972|  11.6k|                                                                          au1_src_top_right,
 2973|  11.6k|                                                                          &u1_sao_src_top_left_luma_bot_left,
 2974|  11.6k|                                                                          au1_avail_luma,
 2975|  11.6k|                                                                          ai1_offset_y,
 2976|  11.6k|                                                                          sao_wd_luma,
 2977|  11.6k|                                                                          sao_ht_luma);
 2978|  11.6k|                    }
 2979|  11.6k|                    pu1_sao_src_top_left_luma_top_right[0] = pu1_src_luma[(sao_ht_luma - 1) * src_strd + sao_wd_luma];
 2980|  11.6k|                    pu1_sao_src_top_left_luma_bot_left[0] = pu1_src_luma[(sao_ht_luma)*src_strd + sao_wd_luma - 1];
 2981|  11.6k|                }
 2982|  2.93M|            }
 2983|  3.30M|            else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (2983:21): [True: 1.87M, False: 1.42M]
  |  Branch (2983:68): [True: 133k, False: 1.29M]
  ------------------
 2984|  2.01M|            {
 2985|       |                /* Update left, top and top-left */
 2986|  21.6M|                for(row = 0; row < sao_ht_luma; row++)
  ------------------
  |  Branch (2986:30): [True: 19.6M, False: 2.01M]
  ------------------
 2987|  19.6M|                {
 2988|  19.6M|                    pu1_src_left_luma[row] = pu1_src_luma[row * src_strd + (sao_wd_luma - 1)];
 2989|  19.6M|                }
 2990|  2.01M|                pu1_sao_src_top_left_luma_curr_ctb[0] = pu1_src_top_luma[sao_wd_luma - 1];
 2991|       |
 2992|  2.01M|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_luma, &pu1_src_luma[(sao_ht_luma - 1) * src_strd], sao_wd_luma);
 2993|       |
 2994|  2.01M|                pu1_sao_src_top_left_luma_top_right[0] = pu1_src_luma[(sao_ht_luma - 1) * src_strd + sao_wd_luma];
 2995|  2.01M|            }
 2996|  6.24M|        }
 2997|       |
 2998|  6.24M|        if((0 != sao_wd_chroma) && (0 != sao_ht_chroma))
  ------------------
  |  Branch (2998:12): [True: 1.54M, False: 4.69M]
  |  Branch (2998:36): [True: 1.51M, False: 31.9k]
  ------------------
 2999|  1.51M|        {
 3000|  1.51M|            if(ps_sao_ctxt->ps_slice_hdr->i1_slice_sao_chroma_flag)
  ------------------
  |  Branch (3000:16): [True: 166k, False: 1.34M]
  ------------------
 3001|   166k|            {
 3002|   166k|                if(0 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (3002:20): [True: 145k, False: 20.3k]
  ------------------
 3003|   145k|                {
 3004|  3.15M|                    for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (3004:34): [True: 3.00M, False: 145k]
  ------------------
 3005|  3.00M|                    {
 3006|  3.00M|                        pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 3007|  3.00M|                        pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 3008|  3.00M|                    }
 3009|   145k|                    pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 3010|   145k|                    pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 3011|       |
 3012|   145k|                    ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 3013|       |
 3014|   145k|                    pu1_sao_src_top_left_chroma_top_right[0] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma];
 3015|   145k|                    pu1_sao_src_top_left_chroma_top_right[1] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma + 1];
 3016|   145k|                }
 3017|       |
 3018|  20.3k|                else if(1 == ps_sao->b3_cb_type_idx)
  ------------------
  |  Branch (3018:25): [True: 10.5k, False: 9.84k]
  ------------------
 3019|  10.5k|                {
 3020|  10.5k|                    ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 3021|  10.5k|                    ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 3022|  10.5k|                    ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 3023|  10.5k|                    ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 3024|       |
 3025|  10.5k|                    ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 3026|  10.5k|                    ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 3027|  10.5k|                    ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 3028|  10.5k|                    ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 3029|       |
 3030|  10.5k|                    if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (3030:24): [True: 1.12k, False: 9.40k]
  ------------------
 3031|  1.12k|                    {
 3032|  1.12k|                        ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 3033|  1.12k|                                                                                    src_strd,
 3034|  1.12k|                                                                                    pu1_src_left_chroma,
 3035|  1.12k|                                                                                    pu1_src_top_chroma,
 3036|  1.12k|                                                                                    pu1_sao_src_top_left_chroma_curr_ctb,
 3037|  1.12k|                                                                                    ps_sao->b5_cr_band_pos,
 3038|  1.12k|                                                                                    ps_sao->b5_cb_band_pos,
 3039|  1.12k|                                                                                    ai1_offset_cr,
 3040|  1.12k|                                                                                    ai1_offset_cb,
 3041|  1.12k|                                                                                    sao_wd_chroma,
 3042|  1.12k|                                                                                    sao_ht_chroma
 3043|  1.12k|                                                                                   );
 3044|  1.12k|                    }
 3045|  9.40k|                    else
 3046|  9.40k|                    {
 3047|  9.40k|                        ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr(pu1_src_chroma,
 3048|  9.40k|                                                                                    src_strd,
 3049|  9.40k|                                                                                    pu1_src_left_chroma,
 3050|  9.40k|                                                                                    pu1_src_top_chroma,
 3051|  9.40k|                                                                                    pu1_sao_src_top_left_chroma_curr_ctb,
 3052|  9.40k|                                                                                    ps_sao->b5_cb_band_pos,
 3053|  9.40k|                                                                                    ps_sao->b5_cr_band_pos,
 3054|  9.40k|                                                                                    ai1_offset_cb,
 3055|  9.40k|                                                                                    ai1_offset_cr,
 3056|  9.40k|                                                                                    sao_wd_chroma,
 3057|  9.40k|                                                                                    sao_ht_chroma
 3058|  9.40k|                                                                                   );
 3059|  9.40k|                    }
 3060|  10.5k|                }
 3061|       |
 3062|  9.84k|                else // if(2 <= ps_sao->b3_cb_type_idx)
 3063|  9.84k|                {
 3064|  9.84k|                    ai1_offset_cb[1] = ps_sao->b4_cb_offset_1;
 3065|  9.84k|                    ai1_offset_cb[2] = ps_sao->b4_cb_offset_2;
 3066|  9.84k|                    ai1_offset_cb[3] = ps_sao->b4_cb_offset_3;
 3067|  9.84k|                    ai1_offset_cb[4] = ps_sao->b4_cb_offset_4;
 3068|       |
 3069|  9.84k|                    ai1_offset_cr[1] = ps_sao->b4_cr_offset_1;
 3070|  9.84k|                    ai1_offset_cr[2] = ps_sao->b4_cr_offset_2;
 3071|  9.84k|                    ai1_offset_cr[3] = ps_sao->b4_cr_offset_3;
 3072|  9.84k|                    ai1_offset_cr[4] = ps_sao->b4_cr_offset_4;
 3073|       |
 3074|  88.9k|                    for(i = 0; i < 8; i++)
  ------------------
  |  Branch (3074:32): [True: 79.0k, False: 9.84k]
  ------------------
 3075|  79.0k|                    {
 3076|  79.0k|                        au1_avail_chroma[i] = 255;
 3077|  79.0k|                        au1_tile_slice_boundary[i] = 0;
 3078|  79.0k|                        au4_idx_c[i] = 0;
 3079|  79.0k|                        au4_ilf_across_tile_slice_enable[i] = 1;
 3080|  79.0k|                    }
 3081|  9.84k|                    {
 3082|  9.84k|                        if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (3082:28): [True: 195, False: 9.65k]
  |  Branch (3082:75): [True: 985, False: 8.66k]
  ------------------
 3083|  1.21k|                        {
 3084|  1.21k|                            ctbx_c_t = ps_sao_ctxt->i4_ctb_x;
 3085|  1.21k|                            ctby_c_t = ps_sao_ctxt->i4_ctb_y - 1;
 3086|       |
 3087|  1.21k|                            ctbx_c_l = ps_sao_ctxt->i4_ctb_x - 1;
 3088|  1.21k|                            ctby_c_l = ps_sao_ctxt->i4_ctb_y;
 3089|       |
 3090|  1.21k|                            ctbx_c_r = ps_sao_ctxt->i4_ctb_x;
 3091|  1.21k|                            ctby_c_r = ps_sao_ctxt->i4_ctb_y;
 3092|       |
 3093|  1.21k|                            ctbx_c_d =  ps_sao_ctxt->i4_ctb_x;
 3094|  1.21k|                            ctby_c_d =  ps_sao_ctxt->i4_ctb_y;
 3095|       |
 3096|  1.21k|                            ctbx_c = ps_sao_ctxt->i4_ctb_x;
 3097|  1.21k|                            ctby_c = ps_sao_ctxt->i4_ctb_y;
 3098|       |
 3099|  1.21k|                            if(!ps_slice_hdr->i1_first_slice_in_pic_flag)
  ------------------
  |  Branch (3099:32): [True: 234, False: 985]
  ------------------
 3100|    234|                            {
 3101|    234|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (3101:36): [True: 6, False: 228]
  ------------------
 3102|      6|                                {
 3103|      6|                                    au4_idx_c[0] = -1;
 3104|      6|                                    au4_idx_c[4] = -1;
 3105|      6|                                    au4_idx_c[6] = -1;
 3106|      6|                                }
 3107|    228|                                else
 3108|    228|                                {
 3109|    228|                                    au4_idx_c[0] =  au4_idx_c[6] = pu1_slice_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)];
 3110|    228|                                }
 3111|       |
 3112|    234|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (3112:36): [True: 144, False: 90]
  ------------------
 3113|    144|                                {
 3114|    144|                                    au4_idx_c[2] = -1;
 3115|    144|                                    au4_idx_c[4] = -1;
 3116|    144|                                    au4_idx_c[5] = -1;
 3117|    144|                                }
 3118|     90|                                else
 3119|     90|                                {
 3120|     90|                                    au4_idx_c[2] = au4_idx_c[5] = pu1_slice_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)];
 3121|     90|                                    au4_idx_c[4] =  pu1_slice_idx[ctbx_c_t - 1 + (ctby_c_t  * ps_sps->i2_pic_wd_in_ctb)];
 3122|     90|                                }
 3123|    234|                                idx_c = pu1_slice_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)];
 3124|    234|                                au4_idx_c[1] = au4_idx_c[7] = pu1_slice_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)];
 3125|    234|                                au4_idx_c[3] = pu1_slice_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)];
 3126|       |
 3127|    234|                                if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (3127:36): [True: 6, False: 228]
  ------------------
 3128|      6|                                {
 3129|      6|                                    au4_ilf_across_tile_slice_enable[0] = 0;
 3130|      6|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 3131|      6|                                    au4_ilf_across_tile_slice_enable[6] = 0;
 3132|      6|                                }
 3133|    228|                                else
 3134|    228|                                {
 3135|    228|                                    au4_ilf_across_tile_slice_enable[6] &= (ps_slice_hdr_base + au4_idx_c[6])->i1_slice_loop_filter_across_slices_enabled_flag;
 3136|    228|                                    au4_ilf_across_tile_slice_enable[0] &= (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;
 3137|    228|                                }
 3138|       |
 3139|    234|                                if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (3139:36): [True: 144, False: 90]
  ------------------
 3140|    144|                                {
 3141|    144|                                    au4_ilf_across_tile_slice_enable[2] = 0;
 3142|    144|                                    au4_ilf_across_tile_slice_enable[4] = 0;
 3143|    144|                                    au4_ilf_across_tile_slice_enable[5] = 0;
 3144|    144|                                }
 3145|     90|                                else
 3146|     90|                                {
 3147|     90|                                    au4_ilf_across_tile_slice_enable[2] &= (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;
 3148|     90|                                    au4_ilf_across_tile_slice_enable[5] = au4_ilf_across_tile_slice_enable[4] = au4_ilf_across_tile_slice_enable[2];
 3149|     90|                                }
 3150|       |
 3151|    234|                                au4_ilf_across_tile_slice_enable[1] &= (ps_slice_hdr_base + au4_idx_c[1])->i1_slice_loop_filter_across_slices_enabled_flag;
 3152|    234|                                au4_ilf_across_tile_slice_enable[3] &= (ps_slice_hdr_base + au4_idx_c[3])->i1_slice_loop_filter_across_slices_enabled_flag;
 3153|    234|                                au4_ilf_across_tile_slice_enable[7] &= (ps_slice_hdr_base + au4_idx_c[7])->i1_slice_loop_filter_across_slices_enabled_flag;
 3154|       |
 3155|    234|                                if(idx_c > au4_idx_c[6])
  ------------------
  |  Branch (3155:36): [True: 105, False: 129]
  ------------------
 3156|    105|                                {
 3157|    105|                                    au4_ilf_across_tile_slice_enable[6] = (ps_slice_hdr_base + idx_c)->i1_slice_loop_filter_across_slices_enabled_flag;
 3158|    105|                                }
 3159|       |
 3160|       |                                /*
 3161|       |                                 * Between each neighbor and the current CTB, the i1_slice_loop_filter_across_slices_enabled_flag
 3162|       |                                 * of the pixel having a greater address is checked. Accordingly, set the availability flags
 3163|       |                                 */
 3164|  2.10k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (3164:44): [True: 1.87k, False: 234]
  ------------------
 3165|  1.87k|                                {
 3166|       |                                    /*Sets the edges that lie on the slice/tile boundary*/
 3167|  1.87k|                                    if(au4_idx_c[i] != idx_c)
  ------------------
  |  Branch (3167:40): [True: 823, False: 1.04k]
  ------------------
 3168|    823|                                    {
 3169|    823|                                        au1_tile_slice_boundary[i] = 1;
 3170|    823|                                    }
 3171|  1.04k|                                    else
 3172|  1.04k|                                    {
 3173|  1.04k|                                        au4_ilf_across_tile_slice_enable[i] = 1;
 3174|  1.04k|                                    }
 3175|  1.87k|                                }
 3176|       |                                /*Reset indices*/
 3177|  2.10k|                                for(i = 0; i < 8; i++)
  ------------------
  |  Branch (3177:44): [True: 1.87k, False: 234]
  ------------------
 3178|  1.87k|                                {
 3179|  1.87k|                                    au4_idx_c[i] = 0;
 3180|  1.87k|                                }
 3181|    234|                            }
 3182|       |
 3183|  1.21k|                            if(ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (3183:32): [True: 1.06k, False: 159]
  ------------------
 3184|  1.06k|                            {
 3185|       |                                /* Calculate availability flags at slice boundary */
 3186|  1.06k|                                if(((ps_tile->u1_pos_x == ps_sao_ctxt->i4_ctb_x) || (ps_tile->u1_pos_y == ps_sao_ctxt->i4_ctb_y)) && (!((0 == ps_tile->u1_pos_x) && (0 == ps_tile->u1_pos_y))))
  ------------------
  |  Branch (3186:37): [True: 505, False: 555]
  |  Branch (3186:85): [True: 222, False: 333]
  |  Branch (3186:137): [True: 656, False: 72]
  |  Branch (3186:165): [True: 423, False: 233]
  ------------------
 3187|    305|                                {
 3188|       |                                    /*If ilf across tiles is enabled, boundary availability for tiles is not checked. */
 3189|    305|                                    if(!ps_pps->i1_loop_filter_across_tiles_enabled_flag)
  ------------------
  |  Branch (3189:40): [True: 217, False: 88]
  ------------------
 3190|    217|                                    {
 3191|    217|                                        if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (3191:44): [True: 121, False: 96]
  ------------------
 3192|    121|                                        {
 3193|    121|                                            au4_idx_c[6] = -1;
 3194|    121|                                            au4_idx_c[0] = -1;
 3195|    121|                                            au4_idx_c[4] = -1;
 3196|    121|                                        }
 3197|     96|                                        else
 3198|     96|                                        {
 3199|     96|                                            au4_idx_c[0] =  au4_idx_c[6] = pu1_tile_idx[ctbx_c_l + (ctby_c_l * ps_sps->i2_pic_wd_in_ctb)];
 3200|     96|                                        }
 3201|       |
 3202|    217|                                        if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (3202:44): [True: 0, False: 217]
  ------------------
 3203|      0|                                        {
 3204|      0|                                            au4_idx_c[2] = -1;
 3205|      0|                                            au4_idx_c[5] = -1;
 3206|      0|                                            au4_idx_c[4] = -1;
 3207|      0|                                        }
 3208|    217|                                        else
 3209|    217|                                        {
 3210|    217|                                            au4_idx_c[4] =  pu1_tile_idx[ctbx_c_t - 1 + (ctby_c_t  * ps_sps->i2_pic_wd_in_ctb)];
 3211|    217|                                            au4_idx_c[2] = au4_idx_c[5] = pu1_tile_idx[ctbx_c_t + (ctby_c_t * ps_sps->i2_pic_wd_in_ctb)];
 3212|    217|                                        }
 3213|    217|                                        idx_c   = pu1_tile_idx[ctbx_c + (ctby_c * ps_sps->i2_pic_wd_in_ctb)];
 3214|    217|                                        au4_idx_c[1] = au4_idx_c[7] = pu1_tile_idx[ctbx_c_r + (ctby_c_r * ps_sps->i2_pic_wd_in_ctb)];
 3215|    217|                                        au4_idx_c[3] = pu1_tile_idx[ctbx_c_d + (ctby_c_d * ps_sps->i2_pic_wd_in_ctb)];
 3216|       |
 3217|  1.95k|                                        for(i = 0; i < 8; i++)
  ------------------
  |  Branch (3217:52): [True: 1.73k, False: 217]
  ------------------
 3218|  1.73k|                                        {
 3219|       |                                            /*Sets the edges that lie on the slice/tile boundary*/
 3220|  1.73k|                                            if(au4_idx_c[i] != idx_c)
  ------------------
  |  Branch (3220:48): [True: 647, False: 1.08k]
  ------------------
 3221|    647|                                            {
 3222|    647|                                                au1_tile_slice_boundary[i] |= 1;
 3223|    647|                                                au4_ilf_across_tile_slice_enable[i] &= ps_pps->i1_loop_filter_across_tiles_enabled_flag; //=0
 3224|    647|                                            }
 3225|  1.73k|                                        }
 3226|    217|                                    }
 3227|    305|                                }
 3228|  1.06k|                            }
 3229|       |
 3230|  10.9k|                            for(i = 0; i < 8; i++)
  ------------------
  |  Branch (3230:40): [True: 9.76k, False: 1.21k]
  ------------------
 3231|  9.76k|                            {
 3232|       |                                /*Sets the edges that lie on the slice/tile boundary*/
 3233|  9.76k|                                if((au1_tile_slice_boundary[i]) && !(au4_ilf_across_tile_slice_enable[i]))
  ------------------
  |  Branch (3233:36): [True: 1.32k, False: 8.44k]
  |  Branch (3233:68): [True: 1.23k, False: 89]
  ------------------
 3234|  1.23k|                                {
 3235|  1.23k|                                    au1_avail_chroma[i] = 0;
 3236|  1.23k|                                }
 3237|  9.76k|                            }
 3238|  1.21k|                        }
 3239|  9.84k|                    }
 3240|       |
 3241|  9.84k|                    if(0 == ps_sao_ctxt->i4_ctb_x)
  ------------------
  |  Branch (3241:24): [True: 1.75k, False: 8.09k]
  ------------------
 3242|  1.75k|                    {
 3243|  1.75k|                        au1_avail_chroma[0] = 0;
 3244|  1.75k|                        au1_avail_chroma[4] = 0;
 3245|  1.75k|                        au1_avail_chroma[6] = 0;
 3246|  1.75k|                    }
 3247|       |
 3248|  9.84k|                    if(ps_sps->i2_pic_width_in_luma_samples - (ps_sao_ctxt->i4_ctb_x << log2_ctb_size) <= sao_wd_chroma)
  ------------------
  |  Branch (3248:24): [True: 1.33k, False: 8.51k]
  ------------------
 3249|  1.33k|                    {
 3250|  1.33k|                        au1_avail_chroma[1] = 0;
 3251|  1.33k|                        au1_avail_chroma[5] = 0;
 3252|  1.33k|                        au1_avail_chroma[7] = 0;
 3253|  1.33k|                    }
 3254|       |
 3255|  9.84k|                    if(0 == ps_sao_ctxt->i4_ctb_y)
  ------------------
  |  Branch (3255:24): [True: 2.42k, False: 7.41k]
  ------------------
 3256|  2.42k|                    {
 3257|  2.42k|                        au1_avail_chroma[2] = 0;
 3258|  2.42k|                        au1_avail_chroma[4] = 0;
 3259|  2.42k|                        au1_avail_chroma[5] = 0;
 3260|  2.42k|                    }
 3261|       |
 3262|  9.84k|                    if(ps_sps->i2_pic_height_in_luma_samples / 2 - (ps_sao_ctxt->i4_ctb_y  << (log2_ctb_size - 1)) <= sao_ht_chroma)
  ------------------
  |  Branch (3262:24): [True: 975, False: 8.87k]
  ------------------
 3263|    975|                    {
 3264|    975|                        au1_avail_chroma[3] = 0;
 3265|    975|                        au1_avail_chroma[6] = 0;
 3266|    975|                        au1_avail_chroma[7] = 0;
 3267|    975|                    }
 3268|       |
 3269|  9.84k|                    {
 3270|  9.84k|                        au1_src_top_right[0] = pu1_src_chroma[sao_wd_chroma - src_strd];
 3271|  9.84k|                        au1_src_top_right[1] = pu1_src_chroma[sao_wd_chroma - src_strd + 1];
 3272|       |
 3273|  9.84k|                        au1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[sao_ht_chroma * src_strd - 2];
 3274|  9.84k|                        au1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[sao_ht_chroma * src_strd - 1];
 3275|       |
 3276|  9.84k|                        if(chroma_yuv420sp_vu)
  ------------------
  |  Branch (3276:28): [True: 686, False: 9.16k]
  ------------------
 3277|    686|                        {
 3278|    686|                            ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 3279|    686|                                                                                 src_strd,
 3280|    686|                                                                                 pu1_src_left_chroma,
 3281|    686|                                                                                 pu1_src_top_chroma,
 3282|    686|                                                                                 pu1_sao_src_top_left_chroma_curr_ctb,
 3283|    686|                                                                                 au1_src_top_right,
 3284|    686|                                                                                 au1_sao_src_top_left_chroma_bot_left,
 3285|    686|                                                                                 au1_avail_chroma,
 3286|    686|                                                                                 ai1_offset_cr,
 3287|    686|                                                                                 ai1_offset_cb,
 3288|    686|                                                                                 sao_wd_chroma,
 3289|    686|                                                                                 sao_ht_chroma);
 3290|    686|                        }
 3291|  9.16k|                        else
 3292|  9.16k|                        {
 3293|  9.16k|                            ps_codec->apf_sao_chroma[ps_sao->b3_cb_type_idx - 2](pu1_src_chroma,
 3294|  9.16k|                                                                                 src_strd,
 3295|  9.16k|                                                                                 pu1_src_left_chroma,
 3296|  9.16k|                                                                                 pu1_src_top_chroma,
 3297|  9.16k|                                                                                 pu1_sao_src_top_left_chroma_curr_ctb,
 3298|  9.16k|                                                                                 au1_src_top_right,
 3299|  9.16k|                                                                                 au1_sao_src_top_left_chroma_bot_left,
 3300|  9.16k|                                                                                 au1_avail_chroma,
 3301|  9.16k|                                                                                 ai1_offset_cb,
 3302|  9.16k|                                                                                 ai1_offset_cr,
 3303|  9.16k|                                                                                 sao_wd_chroma,
 3304|  9.16k|                                                                                 sao_ht_chroma);
 3305|  9.16k|                        }
 3306|  9.84k|                    }
 3307|       |
 3308|  9.84k|                }
 3309|   166k|                pu1_sao_src_top_left_chroma_top_right[0] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma];
 3310|   166k|                pu1_sao_src_top_left_chroma_top_right[1] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma + 1];
 3311|       |
 3312|   166k|                pu1_sao_src_top_left_chroma_bot_left[0] = pu1_src_chroma[(sao_ht_chroma)*src_strd + sao_wd_chroma - 2];
 3313|   166k|                pu1_sao_src_top_left_chroma_bot_left[1] = pu1_src_chroma[(sao_ht_chroma)*src_strd + sao_wd_chroma - 1];
 3314|   166k|            }
 3315|  1.34M|            else if((!ps_slice_hdr->i1_first_slice_in_pic_flag) || (ps_pps->i1_tiles_enabled_flag))
  ------------------
  |  Branch (3315:21): [True: 19.2k, False: 1.32M]
  |  Branch (3315:68): [True: 76.3k, False: 1.25M]
  ------------------
 3316|  95.5k|            {
 3317|  2.24M|                for(row = 0; row < sao_ht_chroma; row++)
  ------------------
  |  Branch (3317:30): [True: 2.15M, False: 95.5k]
  ------------------
 3318|  2.15M|                {
 3319|  2.15M|                    pu1_src_left_chroma[2 * row] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 2)];
 3320|  2.15M|                    pu1_src_left_chroma[2 * row + 1] = pu1_src_chroma[row * src_strd + (sao_wd_chroma - 1)];
 3321|  2.15M|                }
 3322|  95.5k|                pu1_sao_src_top_left_chroma_curr_ctb[0] = pu1_src_top_chroma[sao_wd_chroma - 2];
 3323|  95.5k|                pu1_sao_src_top_left_chroma_curr_ctb[1] = pu1_src_top_chroma[sao_wd_chroma - 1];
 3324|       |
 3325|  95.5k|                ps_codec->s_func_selector.ihevc_memcpy_fptr(pu1_src_top_chroma, &pu1_src_chroma[(sao_ht_chroma - 1) * src_strd], sao_wd_chroma);
 3326|       |
 3327|  95.5k|                pu1_sao_src_top_left_chroma_top_right[0] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma];
 3328|  95.5k|                pu1_sao_src_top_left_chroma_top_right[1] = pu1_src_chroma[(sao_ht_chroma - 1) * src_strd + sao_wd_chroma + 1];
 3329|  95.5k|            }
 3330|       |
 3331|  1.51M|        }
 3332|  6.24M|    }
 3333|       |
 3334|       |
 3335|       |
 3336|       |
 3337|       |/* If no loop filter is enabled copy the backed up values */
 3338|  6.24M|    {
 3339|       |        /* Luma */
 3340|  6.24M|        if(no_loop_filter_enabled_luma)
  ------------------
  |  Branch (3340:12): [True: 18.0k, False: 6.22M]
  ------------------
 3341|  18.0k|        {
 3342|  18.0k|            UWORD32 u4_no_loop_filter_flag;
 3343|  18.0k|            WORD32 loop_filter_bit_pos;
 3344|  18.0k|            WORD32 log2_min_cu = 3;
 3345|  18.0k|            WORD32 min_cu = (1 << log2_min_cu);
 3346|  18.0k|            UWORD8 *pu1_src_tmp_luma = pu1_src_luma;
 3347|  18.0k|            WORD32 sao_blk_ht = ctb_size - SAO_SHIFT_CTB;
  ------------------
  |  |   78|  18.0k|#define SAO_SHIFT_CTB    8
  ------------------
 3348|  18.0k|            WORD32 sao_blk_wd = ctb_size;
 3349|  18.0k|            WORD32 remaining_rows;
 3350|  18.0k|            WORD32 remaining_cols;
 3351|       |
 3352|  18.0k|            remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB);
  ------------------
  |  |   78|  18.0k|#define SAO_SHIFT_CTB    8
  ------------------
 3353|  18.0k|            remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - SAO_SHIFT_CTB);
  ------------------
  |  |   78|  18.0k|#define SAO_SHIFT_CTB    8
  ------------------
 3354|  18.0k|            if(remaining_rows <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  18.0k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3354:16): [True: 1.24k, False: 16.8k]
  ------------------
 3355|  1.24k|                sao_blk_ht += remaining_rows;
 3356|  18.0k|            if(remaining_cols <= SAO_SHIFT_CTB)
  ------------------
  |  |   78|  18.0k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3356:16): [True: 2.05k, False: 16.0k]
  ------------------
 3357|  2.05k|                sao_blk_wd += remaining_cols;
 3358|       |
 3359|  18.0k|            pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB : 0;
  ------------------
  |  |   78|  14.7k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3359:33): [True: 14.7k, False: 3.34k]
  ------------------
 3360|  18.0k|            pu1_src_tmp_luma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0;
  ------------------
  |  |   78|  11.8k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3360:33): [True: 11.8k, False: 6.28k]
  ------------------
 3361|       |
 3362|  18.0k|            pu1_src_backup_luma = ps_sao_ctxt->pu1_tmp_buf_luma;
 3363|       |
 3364|  18.0k|            loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) +
 3365|  18.0k|                            (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3);
 3366|  18.0k|            if(ps_sao_ctxt->i4_ctb_x > 0)
  ------------------
  |  Branch (3366:16): [True: 14.7k, False: 3.34k]
  ------------------
 3367|  14.7k|                loop_filter_bit_pos -= 1;
 3368|       |
 3369|  18.0k|            pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag +
 3370|  18.0k|                            (loop_filter_bit_pos >> 3);
 3371|       |
 3372|  18.0k|            for(i = -(ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB : 0) >> log2_min_cu;
  ------------------
  |  |   78|  11.7k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3372:23): [True: 11.7k, False: 6.28k]
  ------------------
 3373|   144k|                            i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++)
  ------------------
  |  Branch (3373:29): [True: 126k, False: 18.0k]
  ------------------
 3374|   126k|            {
 3375|   126k|                WORD32 tmp_wd = sao_blk_wd;
 3376|       |
 3377|   126k|                u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >>
 3378|   126k|                                (loop_filter_bit_pos & 7);
 3379|   126k|                u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1;
 3380|       |
 3381|   126k|                if(u4_no_loop_filter_flag)
  ------------------
  |  Branch (3381:20): [True: 80.9k, False: 45.9k]
  ------------------
 3382|  80.9k|                {
 3383|   216k|                    while(tmp_wd > 0)
  ------------------
  |  Branch (3383:27): [True: 135k, False: 80.9k]
  ------------------
 3384|   135k|                    {
 3385|   135k|                        if(CTZ(u4_no_loop_filter_flag))
  ------------------
  |  Branch (3385:28): [True: 47.3k, False: 88.3k]
  ------------------
 3386|  47.3k|                        {
 3387|  47.3k|                            pu1_src_tmp_luma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  47.3k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 23.9k, False: 23.3k]
  |  |  ------------------
  ------------------
 3388|  47.3k|                            pu1_src_backup_luma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  47.3k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 23.9k, False: 23.3k]
  |  |  ------------------
  ------------------
 3389|  47.3k|                            tmp_wd -= (WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu);
 3390|  47.3k|                            u4_no_loop_filter_flag  >>= (CTZ(u4_no_loop_filter_flag));
 3391|  47.3k|                        }
 3392|  88.3k|                        else
 3393|  88.3k|                        {
 3394|   776k|                            for(row = 0; row < min_cu; row++)
  ------------------
  |  Branch (3394:42): [True: 688k, False: 88.3k]
  ------------------
 3395|   688k|                            {
 3396|  26.8M|                                for(col = 0; col < MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++)
  ------------------
  |  |   43|  26.8M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 3.94M, False: 22.8M]
  |  |  ------------------
  ------------------
  |  Branch (3396:46): [True: 26.1M, False: 688k]
  ------------------
 3397|  26.1M|                                {
 3398|  26.1M|                                    pu1_src_tmp_luma[row * src_strd + col] = pu1_src_backup_luma[row * backup_strd + col];
 3399|  26.1M|                                }
 3400|   688k|                            }
 3401|  88.3k|                            pu1_src_tmp_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  88.3k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 30.8k, False: 57.4k]
  |  |  ------------------
  ------------------
 3402|  88.3k|                            pu1_src_backup_luma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  88.3k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 30.8k, False: 57.4k]
  |  |  ------------------
  ------------------
 3403|  88.3k|                            tmp_wd -= (WORD32)(CTZ(~u4_no_loop_filter_flag) << log2_min_cu);
 3404|  88.3k|                            u4_no_loop_filter_flag  >>= (CTZ(~u4_no_loop_filter_flag));
 3405|  88.3k|                        }
 3406|   135k|                    }
 3407|       |
 3408|  80.9k|                    pu1_src_tmp_luma -= sao_blk_wd;
 3409|  80.9k|                    pu1_src_backup_luma -= sao_blk_wd;
 3410|  80.9k|                }
 3411|       |
 3412|   126k|                pu1_src_tmp_luma += (src_strd << log2_min_cu);
 3413|   126k|                pu1_src_backup_luma += (backup_strd << log2_min_cu);
 3414|   126k|            }
 3415|  18.0k|        }
 3416|       |
 3417|       |        /* Chroma */
 3418|  6.24M|        if(no_loop_filter_enabled_chroma)
  ------------------
  |  Branch (3418:12): [True: 17.8k, False: 6.22M]
  ------------------
 3419|  17.8k|        {
 3420|  17.8k|            UWORD32 u4_no_loop_filter_flag;
 3421|  17.8k|            WORD32 loop_filter_bit_pos;
 3422|  17.8k|            WORD32 log2_min_cu = 3;
 3423|  17.8k|            WORD32 min_cu = (1 << log2_min_cu);
 3424|  17.8k|            UWORD8 *pu1_src_tmp_chroma = pu1_src_chroma;
 3425|  17.8k|            WORD32 sao_blk_ht = ctb_size - 2 * SAO_SHIFT_CTB;
  ------------------
  |  |   78|  17.8k|#define SAO_SHIFT_CTB    8
  ------------------
 3426|  17.8k|            WORD32 sao_blk_wd = ctb_size;
 3427|  17.8k|            WORD32 remaining_rows;
 3428|  17.8k|            WORD32 remaining_cols;
 3429|       |
 3430|  17.8k|            remaining_rows = ps_sps->i2_pic_height_in_luma_samples - ((ps_sao_ctxt->i4_ctb_y << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB);
  ------------------
  |  |   78|  17.8k|#define SAO_SHIFT_CTB    8
  ------------------
 3431|  17.8k|            remaining_cols = ps_sps->i2_pic_width_in_luma_samples - ((ps_sao_ctxt->i4_ctb_x << log2_ctb_size) + ctb_size - 2 * SAO_SHIFT_CTB);
  ------------------
  |  |   78|  17.8k|#define SAO_SHIFT_CTB    8
  ------------------
 3432|  17.8k|            if(remaining_rows <= 2 * SAO_SHIFT_CTB)
  ------------------
  |  |   78|  17.8k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3432:16): [True: 1.25k, False: 16.6k]
  ------------------
 3433|  1.25k|                sao_blk_ht += remaining_rows;
 3434|  17.8k|            if(remaining_cols <= 2 * SAO_SHIFT_CTB)
  ------------------
  |  |   78|  17.8k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3434:16): [True: 2.01k, False: 15.8k]
  ------------------
 3435|  2.01k|                sao_blk_wd += remaining_cols;
 3436|       |
 3437|  17.8k|            pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_x ? SAO_SHIFT_CTB * 2 : 0;
  ------------------
  |  |   78|  14.5k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3437:35): [True: 14.5k, False: 3.31k]
  ------------------
 3438|  17.8k|            pu1_src_tmp_chroma -= ps_sao_ctxt->i4_ctb_y ? SAO_SHIFT_CTB * src_strd : 0;
  ------------------
  |  |   78|  11.7k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3438:35): [True: 11.7k, False: 6.14k]
  ------------------
 3439|       |
 3440|  17.8k|            pu1_src_backup_chroma = ps_sao_ctxt->pu1_tmp_buf_chroma;
 3441|       |
 3442|  17.8k|            loop_filter_bit_pos = (ps_sao_ctxt->i4_ctb_x << (log2_ctb_size - 3)) +
 3443|  17.8k|                            (ps_sao_ctxt->i4_ctb_y << (log2_ctb_size - 3)) * (loop_filter_strd << 3);
 3444|  17.8k|            if(ps_sao_ctxt->i4_ctb_x > 0)
  ------------------
  |  Branch (3444:16): [True: 14.5k, False: 3.31k]
  ------------------
 3445|  14.5k|                loop_filter_bit_pos -= 2;
 3446|       |
 3447|  17.8k|            pu1_no_loop_filter_flag = ps_sao_ctxt->pu1_pic_no_loop_filter_flag +
 3448|  17.8k|                            (loop_filter_bit_pos >> 3);
 3449|       |
 3450|  17.8k|            for(i = -(ps_sao_ctxt->i4_ctb_y ? 2 * SAO_SHIFT_CTB : 0) >> log2_min_cu;
  ------------------
  |  |   78|  11.7k|#define SAO_SHIFT_CTB    8
  ------------------
  |  Branch (3450:23): [True: 11.7k, False: 6.15k]
  ------------------
 3451|   139k|                            i < (sao_blk_ht + (min_cu - 1)) >> log2_min_cu; i++)
  ------------------
  |  Branch (3451:29): [True: 121k, False: 17.8k]
  ------------------
 3452|   121k|            {
 3453|   121k|                WORD32 tmp_wd = sao_blk_wd;
 3454|       |
 3455|   121k|                u4_no_loop_filter_flag = (*(UWORD32 *)(pu1_no_loop_filter_flag + i * loop_filter_strd)) >>
 3456|   121k|                                (loop_filter_bit_pos & 7);
 3457|   121k|                u4_no_loop_filter_flag &= (1 << ((tmp_wd + (min_cu - 1)) >> log2_min_cu)) - 1;
 3458|       |
 3459|   121k|                if(u4_no_loop_filter_flag)
  ------------------
  |  Branch (3459:20): [True: 80.4k, False: 40.8k]
  ------------------
 3460|  80.4k|                {
 3461|   211k|                    while(tmp_wd > 0)
  ------------------
  |  Branch (3461:27): [True: 130k, False: 80.4k]
  ------------------
 3462|   130k|                    {
 3463|   130k|                        if(CTZ(u4_no_loop_filter_flag))
  ------------------
  |  Branch (3463:28): [True: 44.7k, False: 86.0k]
  ------------------
 3464|  44.7k|                        {
 3465|  44.7k|                            pu1_src_tmp_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  44.7k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 21.6k, False: 23.0k]
  |  |  ------------------
  ------------------
 3466|  44.7k|                            pu1_src_backup_chroma += MIN(((WORD32)CTZ(u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  44.7k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 21.6k, False: 23.0k]
  |  |  ------------------
  ------------------
 3467|  44.7k|                            tmp_wd -= (WORD32)(CTZ(u4_no_loop_filter_flag) << log2_min_cu);
 3468|  44.7k|                            u4_no_loop_filter_flag  >>= (CTZ(u4_no_loop_filter_flag));
 3469|  44.7k|                        }
 3470|  86.0k|                        else
 3471|  86.0k|                        {
 3472|   426k|                            for(row = 0; row < min_cu / 2; row++)
  ------------------
  |  Branch (3472:42): [True: 340k, False: 86.0k]
  ------------------
 3473|   340k|                            {
 3474|  14.3M|                                for(col = 0; col < MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd); col++)
  ------------------
  |  |   43|  14.3M|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 2.33M, False: 11.9M]
  |  |  ------------------
  ------------------
  |  Branch (3474:46): [True: 13.9M, False: 340k]
  ------------------
 3475|  13.9M|                                {
 3476|  13.9M|                                    pu1_src_tmp_chroma[row * src_strd + col] = pu1_src_backup_chroma[row * backup_strd + col];
 3477|  13.9M|                                }
 3478|   340k|                            }
 3479|       |
 3480|  86.0k|                            pu1_src_tmp_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  86.0k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 28.7k, False: 57.2k]
  |  |  ------------------
  ------------------
 3481|  86.0k|                            pu1_src_backup_chroma += MIN(((WORD32)CTZ(~u4_no_loop_filter_flag) << log2_min_cu), tmp_wd);
  ------------------
  |  |   43|  86.0k|#define MIN(x,y)    (((x) < (y)) ? (x) :(y))
  |  |  ------------------
  |  |  |  Branch (43:22): [True: 28.7k, False: 57.2k]
  |  |  ------------------
  ------------------
 3482|  86.0k|                            tmp_wd -= (WORD32)(CTZ(~u4_no_loop_filter_flag) << log2_min_cu);
 3483|  86.0k|                            u4_no_loop_filter_flag  >>= (CTZ(~u4_no_loop_filter_flag));
 3484|  86.0k|                        }
 3485|   130k|                    }
 3486|       |
 3487|  80.4k|                    pu1_src_tmp_chroma -= sao_blk_wd;
 3488|  80.4k|                    pu1_src_backup_chroma -= sao_blk_wd;
 3489|  80.4k|                }
 3490|       |
 3491|   121k|                pu1_src_tmp_chroma += ((src_strd / 2) << log2_min_cu);
 3492|   121k|                pu1_src_backup_chroma += ((backup_strd / 2) << log2_min_cu);
 3493|   121k|            }
 3494|  17.8k|        }
 3495|  6.24M|    }
 3496|       |
 3497|  6.24M|}

ihevcd_get_total_pic_buf_size:
  195|    932|{
  196|    932|    WORD32 size;
  197|    932|    WORD32 num_luma_samples;
  198|    932|    WORD32 max_dpb_size;
  199|    932|    WORD32 num_samples;
  200|       |
  201|       |
  202|    932|    sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
  203|       |
  204|       |    /* Get maximum number of buffers for the current picture size */
  205|    932|    max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
  206|       |
  207|    932|    if(ps_codec->e_frm_out_mode != IVD_DECODE_FRAME_OUT)
  ------------------
  |  Branch (207:8): [True: 932, False: 0]
  ------------------
  208|    932|        max_dpb_size += ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1];
  209|       |
  210|    932|    max_dpb_size++;
  211|       |    /* Allocation is required for
  212|       |     * (Wd + horz_pad) * (Ht + vert_pad) * (2 * max_dpb_size + 1)
  213|       |     */
  214|       |
  215|       |    /* Account for padding area */
  216|    932|    num_luma_samples = (wd + PAD_WD) * (ht + PAD_HT);
  ------------------
  |  |   91|    932|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|    932|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|    932|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
                  num_luma_samples = (wd + PAD_WD) * (ht + PAD_HT);
  ------------------
  |  |   95|    932|#define PAD_HT      (PAD_TOP  + PAD_BOT)
  |  |  ------------------
  |  |  |  |   72|    932|#define PAD_TOP     80
  |  |  ------------------
  |  |               #define PAD_HT      (PAD_TOP  + PAD_BOT)
  |  |  ------------------
  |  |  |  |   77|    932|#define PAD_BOT     80
  |  |  ------------------
  ------------------
  217|       |
  218|       |    /* Account for chroma */
  219|    932|    num_samples = num_luma_samples * 3 / 2;
  220|       |
  221|       |    /* Number of bytes in reference pictures */
  222|    932|    size = num_samples * max_dpb_size;
  223|       |
  224|       |
  225|    932|    return size;
  226|    932|}
ihevcd_get_pic_mv_bank_size:
  248|  2.11k|{
  249|  2.11k|    WORD32 size;
  250|       |
  251|  2.11k|    WORD32 pic_size;
  252|       |
  253|  2.11k|    WORD32 mv_bank_size;
  254|  2.11k|    WORD32 num_pu;
  255|  2.11k|    WORD32 num_ctb;
  256|  2.11k|    pic_size = num_luma_samples;
  257|       |
  258|       |
  259|  2.11k|    num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
  ------------------
  |  |  357|  2.11k|#define MIN_PU_SIZE         4
  ------------------
                  num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
  ------------------
  |  |  357|  2.11k|#define MIN_PU_SIZE         4
  ------------------
  260|  2.11k|    num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  2.11k|#define MIN_CTB_SIZE        16
  ------------------
                  num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  2.11k|#define MIN_CTB_SIZE        16
  ------------------
  261|       |
  262|  2.11k|    mv_bank_size = 0;
  263|       |
  264|       |    /* Size for storing pu_t start index each CTB */
  265|       |    /* One extra entry is needed to compute number of PUs in the last CTB */
  266|  2.11k|    mv_bank_size += (num_ctb + 1) * sizeof(WORD32);
  267|       |
  268|       |    /* Size for pu_map */
  269|  2.11k|    mv_bank_size += num_pu;
  270|       |
  271|       |    /* Size for storing pu_t for each PU */
  272|  2.11k|    mv_bank_size += num_pu * sizeof(pu_t);
  273|       |
  274|       |    /* Size for storing slice_idx for each CTB */
  275|  2.11k|    mv_bank_size += ALIGN4(num_ctb * sizeof(UWORD16));
  ------------------
  |  |   54|  2.11k|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
  276|       |
  277|  2.11k|    size =  mv_bank_size;
  278|  2.11k|    return size;
  279|  2.11k|}
ihevcd_get_tu_data_size:
  302|    932|{
  303|       |
  304|       |
  305|    932|    WORD32 tu_data_size;
  306|    932|    WORD32 num_ctb;
  307|    932|    WORD32 num_luma_tu, num_chroma_tu, num_tu;
  308|    932|    num_ctb = num_luma_samples / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
                  num_ctb = num_luma_samples / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|    932|#define MIN_CTB_SIZE        16
  ------------------
  309|       |
  310|    932|    num_luma_tu = num_luma_samples / (MIN_TU_SIZE * MIN_TU_SIZE);
  ------------------
  |  |  348|    932|#define MIN_TU_SIZE         4
  ------------------
                  num_luma_tu = num_luma_samples / (MIN_TU_SIZE * MIN_TU_SIZE);
  ------------------
  |  |  348|    932|#define MIN_TU_SIZE         4
  ------------------
  311|    932|    num_chroma_tu = num_luma_tu >> 1;
  312|       |
  313|    932|    num_tu = num_luma_tu + num_chroma_tu;
  314|    932|    tu_data_size = 0;
  315|       |
  316|       |    /* Size for storing tu_t start index each CTB */
  317|       |    /* One extra entry is needed to compute number of TUs in the last CTB */
  318|    932|    tu_data_size += (num_ctb + 1) * sizeof(WORD32);
  319|       |
  320|       |    /* Size for storing tu map */
  321|    932|    tu_data_size += num_luma_tu * sizeof(UWORD8);
  322|       |
  323|       |    /* Size for storing tu_t for each TU */
  324|    932|    tu_data_size += num_tu * sizeof(tu_t);
  325|       |
  326|       |    /* Size for storing number of coded subblocks and scan_idx for each TU */
  327|    932|    tu_data_size += num_tu * (sizeof(WORD8) + sizeof(WORD8));
  328|       |
  329|       |    /* Size for storing coeff data for each TU */
  330|    932|    tu_data_size += num_tu * sizeof(tu_sblk_coeff_data_t);
  331|       |
  332|       |
  333|    932|    return tu_data_size;
  334|    932|}
ihevcd_nctb_cnt:
  338|  5.35k|{
  339|  5.35k|    WORD32 nctb = 1;
  340|  5.35k|    UNUSED(ps_codec);
  ------------------
  |  |   38|  5.35k|#define UNUSED(x) ((void)(x))
  ------------------
  341|       |    //TODO: Currently set to 1
  342|       |    /* If CTB size is less than 32 x 32 then set nCTB as 4 */
  343|  5.35k|    if(ps_sps->i1_log2_ctb_size < 5)
  ------------------
  |  Branch (343:8): [True: 372, False: 4.98k]
  ------------------
  344|    372|        nctb = 1;
  345|       |
  346|  5.35k|    return nctb;
  347|  5.35k|}
ihevcd_get_tile_pos:
  356|   149k|{
  357|       |
  358|   149k|    tile_t *ps_tile_tmp;
  359|   149k|    WORD32 i;
  360|   149k|    WORD32 tile_row, tile_col;
  361|       |
  362|   149k|    if(ctb_x < 0 || ctb_y < 0)
  ------------------
  |  Branch (362:8): [True: 0, False: 149k]
  |  Branch (362:21): [True: 0, False: 149k]
  ------------------
  363|      0|    {
  364|      0|        *pi4_ctb_tile_x = 0;
  365|      0|        *pi4_ctb_tile_y = 0;
  366|      0|        *pi4_tile_idx = 0;
  367|       |
  368|      0|        return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  369|      0|    }
  370|       |
  371|   149k|    tile_row = 0;
  372|   149k|    tile_col = 0;
  373|   149k|    ps_tile_tmp = ps_pps->ps_tile;
  374|   149k|    if(0 == ps_pps->i1_tiles_enabled_flag)
  ------------------
  |  Branch (374:8): [True: 112k, False: 36.5k]
  ------------------
  375|   112k|    {
  376|   112k|        *pi4_ctb_tile_x = ctb_x;
  377|   112k|        *pi4_ctb_tile_y = ctb_y;
  378|   112k|        *pi4_tile_idx = 0;
  379|   112k|    }
  380|  36.5k|    else
  381|  36.5k|    {
  382|  51.0k|        for(i = 0; i < ps_pps->i1_num_tile_columns; i++)
  ------------------
  |  Branch (382:20): [True: 51.0k, False: 18.4E]
  ------------------
  383|  51.0k|        {
  384|  51.0k|            WORD16 next_tile_ctb_x;
  385|  51.0k|            ps_tile_tmp = ps_pps->ps_tile + i; //* ps_pps->i1_num_tile_rows;
  386|  51.0k|            if((ps_pps->i1_num_tile_columns - 1) == i)
  ------------------
  |  Branch (386:16): [True: 27.2k, False: 23.8k]
  ------------------
  387|  27.2k|            {
  388|  27.2k|                next_tile_ctb_x = ps_sps->i2_pic_wd_in_ctb;
  389|  27.2k|            }
  390|  23.8k|            else
  391|  23.8k|            {
  392|  23.8k|                tile_t *ps_tile_next_tmp;
  393|  23.8k|                ps_tile_next_tmp = ps_pps->ps_tile + i + 1;
  394|  23.8k|                next_tile_ctb_x = ps_tile_next_tmp->u1_pos_x;
  395|  23.8k|            }
  396|  51.0k|            if((ctb_x >= ps_tile_tmp->u1_pos_x) && (ctb_x < next_tile_ctb_x))
  ------------------
  |  Branch (396:16): [True: 51.0k, False: 0]
  |  Branch (396:52): [True: 36.5k, False: 14.5k]
  ------------------
  397|  36.5k|            {
  398|  36.5k|                tile_col = i;
  399|  36.5k|                break;
  400|  36.5k|            }
  401|  51.0k|        }
  402|  36.5k|        *pi4_ctb_tile_x = ctb_x - ps_tile_tmp->u1_pos_x;
  403|       |
  404|   109k|        for(i = 0; i < ps_pps->i1_num_tile_rows; i++)
  ------------------
  |  Branch (404:20): [True: 109k, False: 18.4E]
  ------------------
  405|   109k|        {
  406|   109k|            WORD16 next_tile_ctb_y;
  407|   109k|            ps_tile_tmp = ps_pps->ps_tile + i * ps_pps->i1_num_tile_columns;
  408|   109k|            if((ps_pps->i1_num_tile_rows - 1) == i)
  ------------------
  |  Branch (408:16): [True: 26.5k, False: 82.4k]
  ------------------
  409|  26.5k|            {
  410|  26.5k|                next_tile_ctb_y = ps_sps->i2_pic_ht_in_ctb;
  411|  26.5k|            }
  412|  82.4k|            else
  413|  82.4k|            {
  414|  82.4k|                tile_t *ps_tile_next_tmp;
  415|  82.4k|                ps_tile_next_tmp = ps_pps->ps_tile + ((i + 1) * ps_pps->i1_num_tile_columns);
  416|  82.4k|                next_tile_ctb_y = ps_tile_next_tmp->u1_pos_y;
  417|  82.4k|            }
  418|   109k|            if((ctb_y >= ps_tile_tmp->u1_pos_y) && (ctb_y < next_tile_ctb_y))
  ------------------
  |  Branch (418:16): [True: 109k, False: 18.4E]
  |  Branch (418:52): [True: 36.5k, False: 72.4k]
  ------------------
  419|  36.5k|            {
  420|  36.5k|                tile_row = i;
  421|  36.5k|                break;
  422|  36.5k|            }
  423|       |
  424|   109k|        }
  425|  36.5k|        *pi4_ctb_tile_y = ctb_y - ps_tile_tmp->u1_pos_y;
  426|  36.5k|        *pi4_tile_idx = tile_row * ps_pps->i1_num_tile_columns
  427|  36.5k|                        + tile_col;
  428|  36.5k|    }
  429|   149k|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  430|   149k|}
ihevcd_pic_buf_mgr_add_bufs:
  454|    889|{
  455|    889|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  456|    889|    WORD32 i;
  457|    889|    WORD32 max_dpb_size;
  458|    889|    sps_t *ps_sps;
  459|    889|    UWORD8 *pu1_buf;
  460|    889|    pic_buf_t *ps_pic_buf;
  461|    889|    WORD32 pic_buf_size_allocated;
  462|       |
  463|       |
  464|       |
  465|       |
  466|       |    /* Initialize Pic buffer manager */
  467|    889|    ps_sps = ps_codec->s_parse.ps_sps;
  468|       |
  469|       |    /* Compute the number of Pic buffers needed */
  470|    889|    max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
  471|       |
  472|    889|    if(ps_codec->e_frm_out_mode != IVD_DECODE_FRAME_OUT)
  ------------------
  |  Branch (472:8): [True: 889, False: 0]
  ------------------
  473|    889|        max_dpb_size += ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1];
  474|       |
  475|       |    /* Allocate one extra picture to handle current frame
  476|       |     * In case of asynchronous parsing and processing, number of buffers should increase here
  477|       |     * based on when parsing and processing threads are synchronized
  478|       |     */
  479|    889|    max_dpb_size++;
  480|       |
  481|       |
  482|    889|    pu1_buf = (UWORD8 *)ps_codec->pu1_ref_pic_buf_base;
  483|       |
  484|    889|    ps_pic_buf = (pic_buf_t *)ps_codec->ps_pic_buf;
  485|       |
  486|       |    /* In case of non-shared mode, add picture buffers to buffer manager
  487|       |     * In case of shared mode buffers are added in the run-time
  488|       |     */
  489|    889|    if(0 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (489:8): [True: 889, False: 0]
  ------------------
  490|    889|    {
  491|    889|        WORD32 buf_ret;
  492|    889|        WORD32 luma_samples;
  493|    889|        WORD32 chroma_samples;
  494|    889|        pic_buf_size_allocated = ps_codec->i4_total_pic_buf_size;
  495|       |
  496|    889|        luma_samples = (ps_codec->i4_strd) *
  497|    889|                        (ps_sps->i2_pic_height_in_luma_samples + PAD_HT);
  ------------------
  |  |   95|    889|#define PAD_HT      (PAD_TOP  + PAD_BOT)
  |  |  ------------------
  |  |  |  |   72|    889|#define PAD_TOP     80
  |  |  ------------------
  |  |               #define PAD_HT      (PAD_TOP  + PAD_BOT)
  |  |  ------------------
  |  |  |  |   77|    889|#define PAD_BOT     80
  |  |  ------------------
  ------------------
  498|       |
  499|    889|        chroma_samples = luma_samples / 2;
  500|       |
  501|       |        /* Try to add as many buffers as possible since memory is already allocated */
  502|       |        /* If the number of buffers that can be added is less than max_num_bufs
  503|       |         * return with an error.
  504|       |         */
  505|  5.07k|        for(i = 0; i < max_dpb_size; i++)
  ------------------
  |  Branch (505:20): [True: 4.18k, False: 889]
  ------------------
  506|  4.18k|        {
  507|  4.18k|            pic_buf_size_allocated -= (luma_samples + chroma_samples);
  508|       |
  509|  4.18k|            if(pic_buf_size_allocated < 0)
  ------------------
  |  Branch (509:16): [True: 0, False: 4.18k]
  ------------------
  510|      0|            {
  511|      0|                ps_codec->s_parse.i4_error_code = IHEVCD_INSUFFICIENT_MEM_PICBUF;
  512|      0|                return IHEVCD_INSUFFICIENT_MEM_PICBUF;
  513|      0|            }
  514|       |
  515|  4.18k|            ps_pic_buf->pu1_luma = pu1_buf + ps_codec->i4_strd * PAD_TOP + PAD_LEFT;
  ------------------
  |  |   72|  4.18k|#define PAD_TOP     80
  ------------------
                          ps_pic_buf->pu1_luma = pu1_buf + ps_codec->i4_strd * PAD_TOP + PAD_LEFT;
  ------------------
  |  |   82|  4.18k|#define PAD_LEFT    80
  ------------------
  516|  4.18k|            pu1_buf += luma_samples;
  517|       |
  518|  4.18k|            ps_pic_buf->pu1_chroma = pu1_buf + ps_codec->i4_strd * (PAD_TOP / 2) + PAD_LEFT;
  ------------------
  |  |   72|  4.18k|#define PAD_TOP     80
  ------------------
                          ps_pic_buf->pu1_chroma = pu1_buf + ps_codec->i4_strd * (PAD_TOP / 2) + PAD_LEFT;
  ------------------
  |  |   82|  4.18k|#define PAD_LEFT    80
  ------------------
  519|  4.18k|            pu1_buf += chroma_samples;
  520|       |
  521|       |            /* Pad boundary pixels (one pixel on all sides) */
  522|       |            /* This ensures SAO does not read uninitialized pixels */
  523|       |            /* Note these are not used in actual processing */
  524|  4.18k|            {
  525|  4.18k|                UWORD8 *pu1_buf;
  526|  4.18k|                WORD32 strd, wd, ht;
  527|  4.18k|                WORD32 i;
  528|  4.18k|                strd = ps_codec->i4_strd;
  529|  4.18k|                wd = ps_codec->i4_wd;
  530|  4.18k|                ht = ps_codec->i4_ht;
  531|       |
  532|  4.18k|                pu1_buf = ps_pic_buf->pu1_luma;
  533|  1.73M|                for(i = 0; i < ht; i++)
  ------------------
  |  Branch (533:28): [True: 1.73M, False: 4.18k]
  ------------------
  534|  1.73M|                {
  535|  1.73M|                    pu1_buf[-1] = 0;
  536|  1.73M|                    pu1_buf[wd] = 0;
  537|  1.73M|                    pu1_buf += strd;
  538|  1.73M|                }
  539|  4.18k|                pu1_buf = ps_pic_buf->pu1_luma;
  540|  4.18k|                memset(pu1_buf - strd - 1, 0, wd + 2);
  541|       |
  542|  4.18k|                pu1_buf += strd * ht;
  543|  4.18k|                memset(pu1_buf - 1, 0, wd + 2);
  544|       |
  545|  4.18k|                pu1_buf = ps_pic_buf->pu1_chroma;
  546|  4.18k|                ht >>= 1;
  547|   870k|                for(i = 0; i < ht; i++)
  ------------------
  |  Branch (547:28): [True: 866k, False: 4.18k]
  ------------------
  548|   866k|                {
  549|   866k|                    pu1_buf[-1] = 0;
  550|   866k|                    pu1_buf[-2] = 0;
  551|   866k|                    pu1_buf[wd] = 0;
  552|   866k|                    pu1_buf[wd + 1] = 0;
  553|   866k|                    pu1_buf += strd;
  554|   866k|                }
  555|  4.18k|                pu1_buf = ps_pic_buf->pu1_chroma;
  556|  4.18k|                memset(pu1_buf - strd - 2, 0, wd + 4);
  557|       |
  558|  4.18k|                pu1_buf += strd * ht;
  559|  4.18k|                memset(pu1_buf - 2, 0, wd + 4);
  560|  4.18k|            }
  561|       |
  562|  4.18k|            buf_ret = ihevc_buf_mgr_add((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, ps_pic_buf, i);
  563|       |
  564|       |
  565|  4.18k|            if(0 != buf_ret)
  ------------------
  |  Branch (565:16): [True: 0, False: 4.18k]
  ------------------
  566|      0|            {
  567|      0|                ps_codec->s_parse.i4_error_code = IHEVCD_BUF_MGR_ERROR;
  568|      0|                return IHEVCD_BUF_MGR_ERROR;
  569|      0|            }
  570|  4.18k|            ps_pic_buf++;
  571|  4.18k|        }
  572|    889|    }
  573|      0|    else
  574|      0|    {
  575|       |        /* In case of shared mode, buffers are added without adjusting for padding.
  576|       |           Update luma and chroma pointers here to account for padding as per stride.
  577|       |           In some cases stride might not be available when set_display_frame is called.
  578|       |           Hence updated luma and chroma pointers here */
  579|       |
  580|      0|        for(i = 0; i < BUF_MGR_MAX_CNT; i++)
  ------------------
  |  |   37|      0|#define BUF_MGR_MAX_CNT 64
  ------------------
  |  Branch (580:20): [True: 0, False: 0]
  ------------------
  581|      0|        {
  582|      0|            ps_pic_buf = ihevc_buf_mgr_get_buf((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, i);
  583|      0|            if((NULL == ps_pic_buf) ||
  ------------------
  |  Branch (583:16): [True: 0, False: 0]
  ------------------
  584|      0|               (NULL == ps_pic_buf->pu1_luma) ||
  ------------------
  |  Branch (584:16): [True: 0, False: 0]
  ------------------
  585|      0|               (NULL == ps_pic_buf->pu1_chroma))
  ------------------
  |  Branch (585:16): [True: 0, False: 0]
  ------------------
  586|      0|            {
  587|      0|                break;
  588|      0|            }
  589|      0|            ps_pic_buf->pu1_luma += ps_codec->i4_strd * PAD_TOP + PAD_LEFT;
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                          ps_pic_buf->pu1_luma += ps_codec->i4_strd * PAD_TOP + PAD_LEFT;
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  590|      0|            ps_pic_buf->pu1_chroma += ps_codec->i4_strd * (PAD_TOP / 2) + PAD_LEFT;
  ------------------
  |  |   72|      0|#define PAD_TOP     80
  ------------------
                          ps_pic_buf->pu1_chroma += ps_codec->i4_strd * (PAD_TOP / 2) + PAD_LEFT;
  ------------------
  |  |   82|      0|#define PAD_LEFT    80
  ------------------
  591|      0|        }
  592|      0|    }
  593|       |
  594|    889|    return ret;
  595|    889|}
ihevcd_mv_buf_mgr_add_bufs:
  617|  1.18k|{
  618|  1.18k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  619|  1.18k|    WORD32 i;
  620|  1.18k|    WORD32 max_dpb_size;
  621|  1.18k|    WORD32 mv_bank_size_allocated;
  622|  1.18k|    WORD32 pic_mv_bank_size;
  623|       |
  624|  1.18k|    sps_t *ps_sps;
  625|  1.18k|    UWORD8 *pu1_buf;
  626|  1.18k|    mv_buf_t *ps_mv_buf;
  627|       |
  628|       |
  629|       |    /* Initialize MV Bank buffer manager */
  630|  1.18k|    ps_sps = ps_codec->s_parse.ps_sps;
  631|       |
  632|       |
  633|       |    /* Compute the number of MV Bank buffers needed */
  634|  1.18k|    max_dpb_size = ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1];
  635|       |
  636|       |    /* Allocate one extra MV Bank to handle current frame
  637|       |     * In case of asynchronous parsing and processing, number of buffers should increase here
  638|       |     * based on when parsing and processing threads are synchronized
  639|       |     */
  640|  1.18k|    max_dpb_size++;
  641|       |
  642|  1.18k|    ps_codec->i4_max_dpb_size = max_dpb_size;
  643|       |
  644|  1.18k|    pu1_buf = (UWORD8 *)ps_codec->pv_mv_bank_buf_base;
  645|       |
  646|  1.18k|    ps_mv_buf = (mv_buf_t *)pu1_buf;
  647|  1.18k|    pu1_buf += max_dpb_size * sizeof(mv_buf_t);
  648|  1.18k|    ps_codec->ps_mv_buf = ps_mv_buf;
  649|  1.18k|    mv_bank_size_allocated = ps_codec->i4_total_mv_bank_size - max_dpb_size  * sizeof(mv_buf_t);
  650|       |
  651|       |    /* Compute MV bank size per picture */
  652|  1.18k|    pic_mv_bank_size = ihevcd_get_pic_mv_bank_size(ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
  ------------------
  |  |   50|  1.18k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  653|  1.18k|                                                   ALIGN64(ps_sps->i2_pic_height_in_luma_samples));
  ------------------
  |  |   50|  1.18k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  654|       |
  655|  5.99k|    for(i = 0; i < max_dpb_size; i++)
  ------------------
  |  Branch (655:16): [True: 5.10k, False: 889]
  ------------------
  656|  5.10k|    {
  657|  5.10k|        WORD32 buf_ret;
  658|  5.10k|        WORD32 num_pu;
  659|  5.10k|        WORD32 num_ctb;
  660|  5.10k|        WORD32 pic_size;
  661|  5.10k|        pic_size = ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
  ------------------
  |  |   50|  5.10k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  662|  5.10k|                        ALIGN64(ps_sps->i2_pic_height_in_luma_samples);
  ------------------
  |  |   50|  5.10k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  663|       |
  664|       |
  665|  5.10k|        num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
  ------------------
  |  |  357|  5.10k|#define MIN_PU_SIZE         4
  ------------------
                      num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
  ------------------
  |  |  357|  5.10k|#define MIN_PU_SIZE         4
  ------------------
  666|  5.10k|        num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  5.10k|#define MIN_CTB_SIZE        16
  ------------------
                      num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  5.10k|#define MIN_CTB_SIZE        16
  ------------------
  667|       |
  668|       |
  669|  5.10k|        mv_bank_size_allocated -= pic_mv_bank_size;
  670|       |
  671|  5.10k|        if(mv_bank_size_allocated < 0)
  ------------------
  |  Branch (671:12): [True: 294, False: 4.81k]
  ------------------
  672|    294|        {
  673|    294|            ps_codec->s_parse.i4_error_code = IHEVCD_INSUFFICIENT_MEM_MVBANK;
  674|    294|            return IHEVCD_INSUFFICIENT_MEM_MVBANK;
  675|    294|        }
  676|       |
  677|  4.81k|        ps_mv_buf->pu4_pic_pu_idx = (UWORD32 *)pu1_buf;
  678|  4.81k|        pu1_buf += (num_ctb + 1) * sizeof(WORD32);
  679|       |
  680|  4.81k|        ps_mv_buf->pu1_pic_pu_map = pu1_buf;
  681|  4.81k|        pu1_buf += num_pu;
  682|       |
  683|  4.81k|        ps_mv_buf->pu1_pic_slice_map = (UWORD16 *)pu1_buf;
  684|  4.81k|        pu1_buf += ALIGN4(num_ctb * sizeof(UWORD16));
  ------------------
  |  |   54|  4.81k|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
  685|       |
  686|  4.81k|        ps_mv_buf->ps_pic_pu = (pu_t *)pu1_buf;
  687|  4.81k|        pu1_buf += num_pu * sizeof(pu_t);
  688|       |
  689|  4.81k|        buf_ret = ihevc_buf_mgr_add((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, ps_mv_buf, i);
  690|       |
  691|  4.81k|        if(0 != buf_ret)
  ------------------
  |  Branch (691:12): [True: 0, False: 4.81k]
  ------------------
  692|      0|        {
  693|      0|            ps_codec->s_parse.i4_error_code = IHEVCD_BUF_MGR_ERROR;
  694|      0|            return IHEVCD_BUF_MGR_ERROR;
  695|      0|        }
  696|       |
  697|  4.81k|        ps_mv_buf++;
  698|       |
  699|  4.81k|    }
  700|    889|    return ret;
  701|  1.18k|}
ihevcd_check_out_buf_size:
  722|  5.40k|{
  723|  5.40k|    ivd_out_bufdesc_t *ps_out_buffer = ps_codec->ps_out_buffer;
  724|  5.40k|    UWORD32 au4_min_out_buf_size[IVD_VIDDEC_MAX_IO_BUFFERS];
  725|  5.40k|    UWORD32 u4_min_num_out_bufs = 0, i;
  726|  5.40k|    UWORD32 wd, ht;
  727|       |
  728|  5.40k|    if(0 == ps_codec->i4_share_disp_buf)
  ------------------
  |  Branch (728:8): [True: 5.40k, False: 0]
  ------------------
  729|  5.40k|    {
  730|  5.40k|        wd = ps_codec->i4_disp_wd;
  731|  5.40k|        ht = ps_codec->i4_disp_ht;
  732|  5.40k|    }
  733|      0|    else
  734|      0|    {
  735|       |        /* In case of shared mode, do not check validity of ps_codec->ps_out_buffer */
  736|      0|        return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  737|      0|    }
  738|       |
  739|  5.40k|    if(ps_codec->i4_disp_strd > (WORD32)wd)
  ------------------
  |  Branch (739:8): [True: 0, False: 5.40k]
  ------------------
  740|      0|        wd = ps_codec->i4_disp_strd;
  741|       |
  742|  5.40k|    if(ps_codec->e_chroma_fmt == IV_YUV_420P)
  ------------------
  |  Branch (742:8): [True: 1.75k, False: 3.65k]
  ------------------
  743|  1.75k|        u4_min_num_out_bufs = MIN_OUT_BUFS_420;
  ------------------
  |  |  452|  1.75k|#define MIN_OUT_BUFS_420        3
  ------------------
  744|  3.65k|    else if(ps_codec->e_chroma_fmt == IV_YUV_422ILE)
  ------------------
  |  Branch (744:13): [True: 807, False: 2.84k]
  ------------------
  745|    807|        u4_min_num_out_bufs = MIN_OUT_BUFS_422ILE;
  ------------------
  |  |  453|    807|#define MIN_OUT_BUFS_422ILE     1
  ------------------
  746|  2.84k|    else if(ps_codec->e_chroma_fmt == IV_RGB_565)
  ------------------
  |  Branch (746:13): [True: 470, False: 2.37k]
  ------------------
  747|    470|        u4_min_num_out_bufs = MIN_OUT_BUFS_RGB565;
  ------------------
  |  |  454|    470|#define MIN_OUT_BUFS_RGB565     1
  ------------------
  748|  2.37k|    else if(ps_codec->e_chroma_fmt == IV_RGBA_8888)
  ------------------
  |  Branch (748:13): [True: 0, False: 2.37k]
  ------------------
  749|      0|        u4_min_num_out_bufs = MIN_OUT_BUFS_RGBA8888;
  ------------------
  |  |  455|      0|#define MIN_OUT_BUFS_RGBA8888   1
  ------------------
  750|  2.37k|    else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
  ------------------
  |  Branch (750:13): [True: 1.76k, False: 608]
  ------------------
  751|  2.37k|                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
  ------------------
  |  Branch (751:24): [True: 608, False: 0]
  ------------------
  752|  2.37k|        u4_min_num_out_bufs = MIN_OUT_BUFS_420SP;
  ------------------
  |  |  456|  2.37k|#define MIN_OUT_BUFS_420SP      2
  ------------------
  753|       |
  754|  5.40k|    if(ps_codec->e_chroma_fmt == IV_YUV_420P)
  ------------------
  |  Branch (754:8): [True: 1.75k, False: 3.65k]
  ------------------
  755|  1.75k|    {
  756|  1.75k|        au4_min_out_buf_size[0] = (wd * ht);
  757|  1.75k|        au4_min_out_buf_size[1] = (wd * ht) >> 2;
  758|  1.75k|        au4_min_out_buf_size[2] = (wd * ht) >> 2;
  759|  1.75k|    }
  760|  3.65k|    else if(ps_codec->e_chroma_fmt == IV_YUV_422ILE)
  ------------------
  |  Branch (760:13): [True: 807, False: 2.84k]
  ------------------
  761|    807|    {
  762|    807|        au4_min_out_buf_size[0] = (wd * ht) * 2;
  763|    807|        au4_min_out_buf_size[1] =
  764|    807|                        au4_min_out_buf_size[2] = 0;
  765|    807|    }
  766|  2.84k|    else if(ps_codec->e_chroma_fmt == IV_RGB_565)
  ------------------
  |  Branch (766:13): [True: 470, False: 2.37k]
  ------------------
  767|    470|    {
  768|    470|        au4_min_out_buf_size[0] = (wd * ht) * 2;
  769|    470|        au4_min_out_buf_size[1] =
  770|    470|                        au4_min_out_buf_size[2] = 0;
  771|    470|    }
  772|  2.37k|    else if(ps_codec->e_chroma_fmt == IV_RGBA_8888)
  ------------------
  |  Branch (772:13): [True: 0, False: 2.37k]
  ------------------
  773|      0|    {
  774|      0|        au4_min_out_buf_size[0] = (wd * ht) * 4;
  775|      0|        au4_min_out_buf_size[1] =
  776|      0|                        au4_min_out_buf_size[2] = 0;
  777|      0|    }
  778|  2.37k|    else if((ps_codec->e_chroma_fmt == IV_YUV_420SP_UV)
  ------------------
  |  Branch (778:13): [True: 1.76k, False: 608]
  ------------------
  779|  2.37k|                    || (ps_codec->e_chroma_fmt == IV_YUV_420SP_VU))
  ------------------
  |  Branch (779:24): [True: 608, False: 0]
  ------------------
  780|  2.37k|    {
  781|  2.37k|        au4_min_out_buf_size[0] = (wd * ht);
  782|  2.37k|        au4_min_out_buf_size[1] = (wd * ht) >> 1;
  783|  2.37k|        au4_min_out_buf_size[2] = 0;
  784|  2.37k|    }
  785|       |
  786|  5.40k|    if(ps_out_buffer->u4_num_bufs < u4_min_num_out_bufs)
  ------------------
  |  Branch (786:8): [True: 0, False: 5.40k]
  ------------------
  787|      0|    {
  788|      0|        return (IHEVCD_ERROR_T)IV_FAIL;
  789|      0|    }
  790|       |
  791|  16.6k|    for (i = 0 ; i < u4_min_num_out_bufs; i++)
  ------------------
  |  Branch (791:18): [True: 11.2k, False: 5.39k]
  ------------------
  792|  11.2k|    {
  793|  11.2k|        if(ps_out_buffer->u4_min_out_buf_size[i] < au4_min_out_buf_size[i])
  ------------------
  |  Branch (793:12): [True: 12, False: 11.2k]
  ------------------
  794|     12|        {
  795|     12|            return (IHEVCD_ERROR_T)IV_FAIL;
  796|     12|        }
  797|  11.2k|    }
  798|       |
  799|  5.39k|    return (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  800|  5.40k|}
ihevcd_parse_pic_init:
  823|  5.69k|{
  824|  5.69k|    IHEVCD_ERROR_T ret = (IHEVCD_ERROR_T)IHEVCD_SUCCESS;
  825|  5.69k|    mv_buf_t *ps_mv_buf;
  826|  5.69k|    sps_t *ps_sps;
  827|  5.69k|    WORD32 num_min_cu;
  828|  5.69k|    WORD32 cur_pic_buf_id;
  829|  5.69k|    WORD32 cur_mv_bank_buf_id;
  830|  5.69k|    pic_buf_t *ps_cur_pic;
  831|  5.69k|    slice_header_t *ps_slice_hdr;
  832|  5.69k|    UWORD8 *pu1_cur_pic_luma, *pu1_cur_pic_chroma;
  833|  5.69k|    WORD32 i;
  834|       |
  835|  5.69k|    ps_codec->s_parse.i4_error_code = IHEVCD_SUCCESS;
  836|  5.69k|    ps_sps = ps_codec->s_parse.ps_sps;
  837|  5.69k|    ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
  838|       |
  839|       |    /* Memset picture level intra map and transquant bypass map to zero */
  840|  5.69k|    num_min_cu = ((ps_sps->i2_pic_height_in_luma_samples + 7) / 8) * ((ps_sps->i2_pic_width_in_luma_samples + 63) / 64);
  841|  5.69k|    memset(ps_codec->s_parse.pu1_pic_intra_flag, 0, num_min_cu);
  842|  5.69k|    memset(ps_codec->s_parse.pu1_pic_no_loop_filter_flag, 0, num_min_cu);
  843|       |
  844|       |
  845|       |
  846|  5.69k|    if(0 == ps_codec->s_parse.i4_first_pic_init)
  ------------------
  |  Branch (846:8): [True: 1.18k, False: 4.51k]
  ------------------
  847|  1.18k|    {
  848|  1.18k|        ret = ihevcd_mv_buf_mgr_add_bufs(ps_codec);
  849|  1.18k|        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  1.18k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 294, False: 889]
  |  |  ------------------
  ------------------
  850|       |
  851|    889|        ret = ihevcd_pic_buf_mgr_add_bufs(ps_codec);
  852|    889|        RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|    889|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 0, False: 889]
  |  |  ------------------
  ------------------
  853|       |
  854|    889|        ps_codec->s_parse.i4_first_pic_init = 1;
  855|    889|    }
  856|       |
  857|       |    /* Output buffer check */
  858|  5.40k|    ret = ihevcd_check_out_buf_size(ps_codec);
  859|  5.40k|    RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
  ------------------
  |  |   37|  5.40k|#define RETURN_IF(cond, retval) if(cond) {return (retval);}
  |  |  ------------------
  |  |  |  Branch (37:36): [True: 12, False: 5.39k]
  |  |  ------------------
  ------------------
  860|       |
  861|       |    /* Initialize all the slice headers' slice addresses to zero */
  862|  5.39k|    {
  863|  5.39k|        WORD32 slice_idx;
  864|  5.39k|        WORD32 slice_start_idx;
  865|       |
  866|  5.39k|        slice_start_idx = ps_codec->i4_slice_error ? 2 : 1;
  ------------------
  |  Branch (866:27): [True: 519, False: 4.87k]
  ------------------
  867|       |
  868|  1.37M|        for(slice_idx = slice_start_idx; slice_idx < MAX_SLICE_HDR_CNT; slice_idx++)
  ------------------
  |  |  153|  1.37M|#define MAX_SLICE_HDR_CNT (1 << LOG2_MAX_SLICE_HDR_CNT)
  |  |  ------------------
  |  |  |  |  152|  1.37M|#define LOG2_MAX_SLICE_HDR_CNT 8
  |  |  ------------------
  ------------------
  |  Branch (868:42): [True: 1.37M, False: 5.39k]
  ------------------
  869|  1.37M|        {
  870|  1.37M|            slice_header_t *ps_slice_hdr_tmp = ps_codec->ps_slice_hdr_base + slice_idx;
  871|  1.37M|            ps_slice_hdr_tmp->i2_ctb_x = -1;
  872|  1.37M|            ps_slice_hdr_tmp->i2_ctb_y = -1;
  873|       |
  874|  1.37M|        }
  875|  5.39k|    }
  876|       |
  877|       |    /* Get free MV Bank to hold current picture's motion vector data */
  878|  5.39k|    {
  879|  5.39k|        ps_mv_buf = (mv_buf_t *)ihevc_buf_mgr_get_next_free((buf_mgr_t *)ps_codec->pv_mv_buf_mgr, &cur_mv_bank_buf_id);
  880|       |
  881|       |        /* If there are no free buffers then return with an error code.
  882|       |         * If the buffer is to be freed by another thread , change the
  883|       |         * following to call thread yield and wait for buffer to be freed
  884|       |         */
  885|  5.39k|        if(NULL == ps_mv_buf)
  ------------------
  |  Branch (885:12): [True: 13, False: 5.37k]
  ------------------
  886|     13|        {
  887|     13|            ps_codec->s_parse.i4_error_code = IHEVCD_NO_FREE_MVBANK;
  888|     13|            ps_codec->i4_error_code = IHEVCD_NO_FREE_MVBANK;
  889|     13|            return IHEVCD_NO_FREE_MVBANK;
  890|     13|        }
  891|       |
  892|  5.37k|        ps_codec->s_parse.ps_cur_mv_buf = ps_mv_buf;
  893|       |        /* Set current ABS poc to ps_mv_buf, so that while freeing a reference buffer
  894|       |         * corresponding mv buffer can be found by looping through ps_codec->ps_mv_buf array
  895|       |         * and getting a buffer id to free
  896|       |         */
  897|  5.37k|        ps_mv_buf->i4_abs_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
  898|  5.37k|    }
  899|       |
  900|       |    /* Get free picture buffer to hold current picture recon data */
  901|       |    /* TODO: For asynchronous api the following initializations related to picture
  902|       |     * buffer should be moved to processing side
  903|       |     */
  904|      0|    {
  905|       |
  906|  5.37k|        UWORD8 *pu1_buf;
  907|  5.37k|        ps_cur_pic = (pic_buf_t *)ihevc_buf_mgr_get_next_free((buf_mgr_t *)ps_codec->pv_pic_buf_mgr, &cur_pic_buf_id);
  908|       |
  909|       |        /* If there are no free buffers then return with an error code.
  910|       |         * TODO: If the buffer is to be freed by another thread , change the
  911|       |         * following to call thread yield and wait for buffer to be freed
  912|       |         */
  913|  5.37k|        if(NULL == ps_cur_pic)
  ------------------
  |  Branch (913:12): [True: 22, False: 5.35k]
  ------------------
  914|     22|        {
  915|     22|            ps_codec->s_parse.i4_error_code = IHEVCD_NO_FREE_PICBUF;
  916|     22|            ps_codec->i4_error_code = IHEVCD_NO_FREE_PICBUF;
  917|     22|            return IHEVCD_NO_FREE_PICBUF;
  918|     22|        }
  919|       |
  920|       |        /* Store input timestamp sent with input buffer */
  921|  5.35k|        ps_cur_pic->u4_ts = ps_codec->u4_ts;
  922|  5.35k|        ps_cur_pic->i4_abs_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
  923|  5.35k|        ps_cur_pic->i4_poc_lsb = ps_slice_hdr->i4_pic_order_cnt_lsb;
  924|  5.35k|        pu1_buf = ps_cur_pic->pu1_luma;
  925|  5.35k|        pu1_cur_pic_luma = pu1_buf;
  926|       |
  927|  5.35k|        pu1_buf = ps_cur_pic->pu1_chroma;
  928|       |
  929|  5.35k|        pu1_cur_pic_chroma = pu1_buf;
  930|       |
  931|  5.35k|        ps_cur_pic->s_sei_params.i1_sei_parameters_present_flag = 0;
  932|  5.35k|        if(ps_codec->s_parse.s_sei_params.i1_sei_parameters_present_flag)
  ------------------
  |  Branch (932:12): [True: 56, False: 5.30k]
  ------------------
  933|     56|        {
  934|     56|            sei_params_t *ps_sei = &ps_codec->s_parse.s_sei_params;
  935|     56|            ps_cur_pic->s_sei_params = ps_codec->s_parse.s_sei_params;
  936|       |
  937|       |            /* Once sei_params is copied to pic_buf,
  938|       |             * mark sei_params in s_parse as not present,
  939|       |             * this ensures that future frames do not use this data again.
  940|       |             */
  941|     56|            ps_sei->i1_sei_parameters_present_flag = 0;
  942|     56|            ps_sei->i1_user_data_registered_present_flag = 0;
  943|     56|            ps_sei->i1_aud_present_flag = 0;
  944|     56|            ps_sei->i1_time_code_present_flag = 0;
  945|     56|            ps_sei->i1_buf_period_params_present_flag = 0;
  946|     56|            ps_sei->i1_pic_timing_params_present_flag = 0;
  947|     56|            ps_sei->i1_recovery_point_params_present_flag = 0;
  948|     56|            ps_sei->i1_active_parameter_set = 0;
  949|     56|            ps_sei->i4_sei_mastering_disp_colour_vol_params_present_flags = 0;
  950|     56|        }
  951|  5.35k|    }
  952|       |
  953|  5.35k|    if(0 == ps_codec->u4_pic_cnt)
  ------------------
  |  Branch (953:8): [True: 885, False: 4.47k]
  ------------------
  954|    885|    {
  955|    885|        memset(ps_cur_pic->pu1_luma, 128, (ps_sps->i2_pic_width_in_luma_samples + PAD_WD) * ps_sps->i2_pic_height_in_luma_samples);
  ------------------
  |  |   91|    885|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|    885|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|    885|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
  956|    885|        memset(ps_cur_pic->pu1_chroma, 128, (ps_sps->i2_pic_width_in_luma_samples + PAD_WD) * ps_sps->i2_pic_height_in_luma_samples / 2);
  ------------------
  |  |   91|    885|#define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   82|    885|#define PAD_LEFT    80
  |  |  ------------------
  |  |               #define PAD_WD      (PAD_LEFT + PAD_RIGHT)
  |  |  ------------------
  |  |  |  |   87|    885|#define PAD_RIGHT   80
  |  |  ------------------
  ------------------
  957|    885|    }
  958|       |
  959|       |    /* Fill the remaining entries of the reference lists with the nearest POC
  960|       |     * This is done to handle cases where there is a corruption in the reference index */
  961|  5.35k|    {
  962|  5.35k|        pic_buf_t *ps_pic_buf_ref;
  963|  5.35k|        mv_buf_t *ps_mv_buf_ref;
  964|  5.35k|        WORD32 r_idx;
  965|  5.35k|        dpb_mgr_t *ps_dpb_mgr = (dpb_mgr_t *)ps_codec->pv_dpb_mgr;
  966|  5.35k|        buf_mgr_t *ps_mv_buf_mgr = (buf_mgr_t *)ps_codec->pv_mv_buf_mgr;
  967|       |
  968|  5.35k|        ps_pic_buf_ref = ihevc_dpb_mgr_get_ref_by_nearest_poc(ps_dpb_mgr, ps_slice_hdr->i4_abs_pic_order_cnt);
  969|  5.35k|        if(NULL == ps_pic_buf_ref)
  ------------------
  |  Branch (969:12): [True: 4.21k, False: 1.14k]
  ------------------
  970|  4.21k|        {
  971|  4.21k|            WORD32 size;
  972|       |
  973|  4.21k|            WORD32 num_pu;
  974|  4.21k|            WORD32 num_ctb;
  975|  4.21k|            WORD32 pic_size;
  976|       |            /* In case current mv buffer itself is being used as reference mv buffer for colocated
  977|       |             * calculations, then memset all the buffers to zero.
  978|       |             */
  979|  4.21k|            pic_size = ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
  ------------------
  |  |   50|  4.21k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  980|  4.21k|                            ALIGN64(ps_sps->i2_pic_height_in_luma_samples);
  ------------------
  |  |   50|  4.21k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
  981|       |
  982|  4.21k|            num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
  ------------------
  |  |  357|  4.21k|#define MIN_PU_SIZE         4
  ------------------
                          num_pu = pic_size / (MIN_PU_SIZE * MIN_PU_SIZE);
  ------------------
  |  |  357|  4.21k|#define MIN_PU_SIZE         4
  ------------------
  983|  4.21k|            num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  4.21k|#define MIN_CTB_SIZE        16
  ------------------
                          num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  4.21k|#define MIN_CTB_SIZE        16
  ------------------
  984|       |
  985|  4.21k|            memset(ps_mv_buf->ai4_l0_collocated_poc, 0, sizeof(ps_mv_buf->ai4_l0_collocated_poc));
  986|  4.21k|            memset(ps_mv_buf->ai1_l0_collocated_poc_lt, 0, sizeof(ps_mv_buf->ai1_l0_collocated_poc_lt));
  987|  4.21k|            memset(ps_mv_buf->ai4_l1_collocated_poc, 0, sizeof(ps_mv_buf->ai4_l1_collocated_poc));
  988|  4.21k|            memset(ps_mv_buf->ai1_l1_collocated_poc_lt, 0, sizeof(ps_mv_buf->ai1_l1_collocated_poc_lt));
  989|       |
  990|  4.21k|            size = (num_ctb + 1) * sizeof(WORD32);
  991|  4.21k|            memset(ps_mv_buf->pu4_pic_pu_idx, 0, size);
  992|       |
  993|  4.21k|            size = num_pu;
  994|  4.21k|            memset(ps_mv_buf->pu1_pic_pu_map, 0, size);
  995|  4.21k|            size = ALIGN4(num_ctb * sizeof(UWORD16));
  ------------------
  |  |   54|  4.21k|#define ALIGN4(x)   ((((x) + 3) >> 2) << 2)
  ------------------
  996|  4.21k|            memset(ps_mv_buf->pu1_pic_slice_map, 0, size);
  997|  4.21k|            size = num_pu * sizeof(pu_t);
  998|  4.21k|            memset(ps_mv_buf->ps_pic_pu, 0, size);
  999|       |
 1000|  4.21k|            ps_pic_buf_ref = ps_cur_pic;
 1001|  4.21k|            ps_mv_buf_ref = ps_mv_buf;
 1002|  4.21k|        }
 1003|  1.14k|        else
 1004|  1.14k|        {
 1005|  1.14k|            ps_mv_buf_ref = ihevcd_mv_mgr_get_poc(ps_mv_buf_mgr, ps_pic_buf_ref->i4_abs_poc);
 1006|  1.14k|        }
 1007|       |
 1008|  8.24k|        for(r_idx = 0; r_idx < ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx++)
  ------------------
  |  Branch (1008:24): [True: 2.89k, False: 5.35k]
  ------------------
 1009|  2.89k|        {
 1010|  2.89k|            if(NULL == ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf)
  ------------------
  |  Branch (1010:16): [True: 248, False: 2.64k]
  ------------------
 1011|    248|            {
 1012|    248|                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1013|    248|                ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1014|    248|            }
 1015|  2.89k|        }
 1016|       |
 1017|  88.1k|        for(r_idx = ps_slice_hdr->i1_num_ref_idx_l0_active; r_idx < MAX_DPB_SIZE; r_idx++)
  ------------------
  |  |  281|  88.1k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (1017:61): [True: 82.8k, False: 5.35k]
  ------------------
 1018|  82.8k|        {
 1019|  82.8k|            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1020|  82.8k|            ps_slice_hdr->as_ref_pic_list0[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1021|  82.8k|        }
 1022|       |
 1023|  9.04k|        for(r_idx = 0; r_idx < ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx++)
  ------------------
  |  Branch (1023:24): [True: 3.68k, False: 5.35k]
  ------------------
 1024|  3.68k|        {
 1025|  3.68k|            if(NULL == ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf)
  ------------------
  |  Branch (1025:16): [True: 461, False: 3.22k]
  ------------------
 1026|    461|            {
 1027|    461|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1028|    461|                ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1029|    461|            }
 1030|  3.68k|        }
 1031|       |
 1032|  87.3k|        for(r_idx = ps_slice_hdr->i1_num_ref_idx_l1_active; r_idx < MAX_DPB_SIZE; r_idx++)
  ------------------
  |  |  281|  87.3k|#define MAX_DPB_SIZE 16
  ------------------
  |  Branch (1032:61): [True: 82.0k, False: 5.35k]
  ------------------
 1033|  82.0k|        {
 1034|  82.0k|            ps_slice_hdr->as_ref_pic_list1[r_idx].pv_pic_buf = (void *)ps_pic_buf_ref;
 1035|  82.0k|            ps_slice_hdr->as_ref_pic_list1[r_idx].pv_mv_buf = (void *)ps_mv_buf_ref;
 1036|  82.0k|        }
 1037|  5.35k|    }
 1038|       |
 1039|       |
 1040|       |    /* Reset the jobq to start of the jobq buffer */
 1041|  5.35k|    ihevcd_jobq_reset((jobq_t *)ps_codec->pv_proc_jobq);
 1042|       |
 1043|       |#ifdef KEEP_THREADS_ACTIVE
 1044|       |    ps_codec->i4_break_threads = 0;
 1045|       |#endif
 1046|  5.35k|    ps_codec->s_parse.i4_pic_pu_idx = 0;
 1047|  5.35k|    ps_codec->s_parse.i4_pic_tu_idx = 0;
 1048|       |
 1049|  5.35k|    ps_codec->s_parse.pu1_pic_pu_map = ps_mv_buf->pu1_pic_pu_map;
 1050|  5.35k|    ps_codec->s_parse.ps_pic_pu      = ps_mv_buf->ps_pic_pu;
 1051|  5.35k|    ps_codec->s_parse.pu4_pic_pu_idx = ps_mv_buf->pu4_pic_pu_idx;
 1052|  5.35k|    ps_codec->s_parse.pu1_slice_idx = (UWORD16 *)ps_mv_buf->pu1_pic_slice_map;
 1053|  48.2k|    for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  48.2k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  48.2k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1053:16): [True: 42.8k, False: 5.35k]
  ------------------
 1054|  42.8k|    {
 1055|  42.8k|        ps_codec->as_process[i].pu1_slice_idx = (UWORD16 *)ps_mv_buf->pu1_pic_slice_map;
 1056|  42.8k|    }
 1057|  5.35k|    ps_codec->s_parse.pu1_pu_map = ps_codec->s_parse.pu1_pic_pu_map;
 1058|  5.35k|    ps_codec->s_parse.ps_pu = ps_codec->s_parse.ps_pic_pu;
 1059|       |
 1060|  5.35k|    {
 1061|  5.35k|        UWORD8 *pu1_buf;
 1062|  5.35k|        WORD32 ctb_luma_min_tu_cnt, ctb_chroma_min_tu_cnt, ctb_min_tu_cnt;
 1063|  5.35k|        WORD32 pic_size;
 1064|  5.35k|        WORD32 num_ctb;
 1065|       |
 1066|  5.35k|        pic_size = ALIGN64(ps_sps->i2_pic_width_in_luma_samples) *
  ------------------
  |  |   50|  5.35k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1067|  5.35k|                        ALIGN64(ps_sps->i2_pic_height_in_luma_samples);
  ------------------
  |  |   50|  5.35k|#define ALIGN64(x)  ((((x) + 63) >> 6) << 6)
  ------------------
 1068|       |
 1069|  5.35k|        ctb_luma_min_tu_cnt = pic_size / (MIN_TU_SIZE * MIN_TU_SIZE);
  ------------------
  |  |  348|  5.35k|#define MIN_TU_SIZE         4
  ------------------
                      ctb_luma_min_tu_cnt = pic_size / (MIN_TU_SIZE * MIN_TU_SIZE);
  ------------------
  |  |  348|  5.35k|#define MIN_TU_SIZE         4
  ------------------
 1070|       |
 1071|  5.35k|        ctb_chroma_min_tu_cnt = ctb_luma_min_tu_cnt >> 1;
 1072|       |
 1073|  5.35k|        ctb_min_tu_cnt = ctb_luma_min_tu_cnt + ctb_chroma_min_tu_cnt;
 1074|       |
 1075|  5.35k|        num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  5.35k|#define MIN_CTB_SIZE        16
  ------------------
                      num_ctb = pic_size / (MIN_CTB_SIZE * MIN_CTB_SIZE);
  ------------------
  |  |  342|  5.35k|#define MIN_CTB_SIZE        16
  ------------------
 1076|  5.35k|        pu1_buf  = (UWORD8 *)ps_codec->pv_tu_data;
 1077|  5.35k|        ps_codec->s_parse.pu4_pic_tu_idx = (UWORD32 *)pu1_buf;
 1078|  5.35k|        pu1_buf += (num_ctb + 1) * sizeof(WORD32);
 1079|       |
 1080|  5.35k|        ps_codec->s_parse.pu1_pic_tu_map = pu1_buf;
 1081|  5.35k|        pu1_buf += ctb_min_tu_cnt;
 1082|       |
 1083|  5.35k|        ps_codec->s_parse.ps_pic_tu = (tu_t *)pu1_buf;
 1084|  5.35k|        pu1_buf += ctb_min_tu_cnt * sizeof(tu_t);
 1085|       |
 1086|  5.35k|        ps_codec->s_parse.pv_pic_tu_coeff_data = pu1_buf;
 1087|       |
 1088|  5.35k|        ps_codec->s_parse.pu1_tu_map = ps_codec->s_parse.pu1_pic_tu_map;
 1089|  5.35k|        ps_codec->s_parse.ps_tu = ps_codec->s_parse.ps_pic_tu;
 1090|  5.35k|        ps_codec->s_parse.pv_tu_coeff_data = ps_codec->s_parse.pv_pic_tu_coeff_data;
 1091|  5.35k|    }
 1092|       |
 1093|  5.35k|    ps_codec->s_parse.s_bs_ctxt.ps_pic_pu = ps_codec->s_parse.ps_pic_pu;
 1094|  5.35k|    ps_codec->s_parse.s_bs_ctxt.pu4_pic_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx;
 1095|  5.35k|    ps_codec->s_parse.s_bs_ctxt.pu4_pic_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx;
 1096|       |
 1097|       |
 1098|       |    /* Set number of CTBs to be processed simultaneously */
 1099|  5.35k|    ps_codec->i4_proc_nctb = ihevcd_nctb_cnt(ps_codec, ps_sps);
 1100|       |
 1101|       |    /* Memset Parse Map and process map at the start of frame */
 1102|       |    //TODO: In case of asynchronous API proc_map can not be set to zero here
 1103|  5.35k|    {
 1104|  5.35k|        WORD32 num_ctb;
 1105|       |
 1106|  5.35k|        num_ctb = ps_sps->i4_pic_size_in_ctb;
 1107|       |
 1108|  5.35k|        memset(ps_codec->pu1_parse_map, 0, num_ctb);
 1109|       |
 1110|  5.35k|        memset(ps_codec->pu1_proc_map, 0, num_ctb);
 1111|  5.35k|    }
 1112|       |
 1113|       |
 1114|       |
 1115|       |    /* Initialize disp buf id to -1, this will be updated at the end of frame if there is
 1116|       |     * buffer to be displayed
 1117|       |     */
 1118|  5.35k|    ps_codec->i4_disp_buf_id = -1;
 1119|  5.35k|    ps_codec->ps_disp_buf = NULL;
 1120|       |
 1121|  5.35k|    ps_codec->i4_disable_deblk_pic  = 0;
 1122|  5.35k|    ps_codec->i4_disable_sao_pic    = 0;
 1123|  5.35k|    ps_codec->i4_fullpel_inter_pred = 0;
 1124|  5.35k|    ps_codec->i4_mv_frac_mask       = 0x7FFFFFFF;
 1125|       |
 1126|       |    /* If degrade is enabled, set the degrade flags appropriately */
 1127|  5.35k|    if(ps_codec->i4_degrade_type && ps_codec->i4_degrade_pics)
  ------------------
  |  Branch (1127:8): [True: 0, False: 5.35k]
  |  Branch (1127:37): [True: 0, False: 0]
  ------------------
 1128|      0|    {
 1129|      0|        WORD32 degrade_pic;
 1130|      0|        ps_codec->i4_degrade_pic_cnt++;
 1131|      0|        degrade_pic = 0;
 1132|       |
 1133|       |        /* If degrade is to be done in all frames, then do not check further */
 1134|      0|        switch(ps_codec->i4_degrade_pics)
  ------------------
  |  Branch (1134:16): [True: 0, False: 0]
  ------------------
 1135|      0|        {
 1136|      0|            case 4:
  ------------------
  |  Branch (1136:13): [True: 0, False: 0]
  ------------------
 1137|      0|            {
 1138|      0|                degrade_pic = 1;
 1139|      0|                break;
 1140|      0|            }
 1141|      0|            case 3:
  ------------------
  |  Branch (1141:13): [True: 0, False: 0]
  ------------------
 1142|      0|            {
 1143|      0|                if(ps_slice_hdr->i1_slice_type != ISLICE)
  ------------------
  |  Branch (1143:20): [True: 0, False: 0]
  ------------------
 1144|      0|                    degrade_pic = 1;
 1145|       |
 1146|      0|                break;
 1147|      0|            }
 1148|      0|            case 2:
  ------------------
  |  Branch (1148:13): [True: 0, False: 0]
  ------------------
 1149|      0|            {
 1150|       |
 1151|       |                /* If pic count hits non-degrade interval or it is an islice, then do not degrade */
 1152|      0|                if((ps_slice_hdr->i1_slice_type != ISLICE) &&
  ------------------
  |  Branch (1152:20): [True: 0, False: 0]
  ------------------
 1153|      0|                   (ps_codec->i4_degrade_pic_cnt != ps_codec->i4_nondegrade_interval))
  ------------------
  |  Branch (1153:20): [True: 0, False: 0]
  ------------------
 1154|      0|                    degrade_pic = 1;
 1155|       |
 1156|      0|                break;
 1157|      0|            }
 1158|      0|            case 1:
  ------------------
  |  Branch (1158:13): [True: 0, False: 0]
  ------------------
 1159|      0|            {
 1160|       |                /* Check if the current picture is non-ref */
 1161|      0|                if((ps_slice_hdr->i1_nal_unit_type < NAL_BLA_W_LP) &&
  ------------------
  |  Branch (1161:20): [True: 0, False: 0]
  ------------------
 1162|      0|                   (ps_slice_hdr->i1_nal_unit_type % 2 == 0))
  ------------------
  |  Branch (1162:20): [True: 0, False: 0]
  ------------------
 1163|      0|                {
 1164|      0|                    degrade_pic = 1;
 1165|      0|                }
 1166|      0|                break;
 1167|      0|            }
 1168|       |
 1169|       |
 1170|      0|        }
 1171|      0|        if(degrade_pic)
  ------------------
  |  Branch (1171:12): [True: 0, False: 0]
  ------------------
 1172|      0|        {
 1173|      0|            if(ps_codec->i4_degrade_type & 0x1)
  ------------------
  |  Branch (1173:16): [True: 0, False: 0]
  ------------------
 1174|      0|                ps_codec->i4_disable_sao_pic = 1;
 1175|       |
 1176|      0|            if(ps_codec->i4_degrade_type & 0x2)
  ------------------
  |  Branch (1176:16): [True: 0, False: 0]
  ------------------
 1177|      0|                ps_codec->i4_disable_deblk_pic = 1;
 1178|       |
 1179|       |            /* MC degrading is done only for non-ref pictures */
 1180|      0|            if((ps_slice_hdr->i1_nal_unit_type < NAL_BLA_W_LP) &&
  ------------------
  |  Branch (1180:16): [True: 0, False: 0]
  ------------------
 1181|      0|               (ps_slice_hdr->i1_nal_unit_type % 2 == 0))
  ------------------
  |  Branch (1181:16): [True: 0, False: 0]
  ------------------
 1182|      0|            {
 1183|      0|                if(ps_codec->i4_degrade_type & 0x4)
  ------------------
  |  Branch (1183:20): [True: 0, False: 0]
  ------------------
 1184|      0|                    ps_codec->i4_mv_frac_mask = 0;
 1185|       |
 1186|      0|                if(ps_codec->i4_degrade_type & 0x8)
  ------------------
  |  Branch (1186:20): [True: 0, False: 0]
  ------------------
 1187|      0|                    ps_codec->i4_mv_frac_mask = 0;
 1188|      0|            }
 1189|      0|        }
 1190|      0|        else
 1191|      0|            ps_codec->i4_degrade_pic_cnt = 0;
 1192|      0|    }
 1193|       |
 1194|       |
 1195|  5.35k|    {
 1196|  5.35k|        WORD32 i;
 1197|  48.2k|        for(i = 0; i < MAX_PROCESS_THREADS; i++)
  ------------------
  |  |  121|  48.2k|#define MAX_PROCESS_THREADS MAX_NUM_CORES
  |  |  ------------------
  |  |  |  |  116|  48.2k|#define MAX_NUM_CORES       8
  |  |  ------------------
  ------------------
  |  Branch (1197:20): [True: 42.8k, False: 5.35k]
  ------------------
 1198|  42.8k|        {
 1199|  42.8k|            ps_codec->as_process[i].pu4_pic_pu_idx = ps_codec->s_parse.pu4_pic_pu_idx;
 1200|  42.8k|            ps_codec->as_process[i].ps_pic_pu = ps_codec->s_parse.ps_pic_pu;
 1201|  42.8k|            ps_codec->as_process[i].pu1_pic_pu_map = ps_codec->s_parse.pu1_pic_pu_map;
 1202|  42.8k|            ps_codec->as_process[i].pu4_pic_tu_idx = ps_codec->s_parse.pu4_pic_tu_idx;
 1203|  42.8k|            ps_codec->as_process[i].ps_pic_tu = ps_codec->s_parse.ps_pic_tu;
 1204|  42.8k|            ps_codec->as_process[i].pu1_pic_tu_map = ps_codec->s_parse.pu1_pic_tu_map;
 1205|  42.8k|            ps_codec->as_process[i].pv_pic_tu_coeff_data = ps_codec->s_parse.pv_pic_tu_coeff_data;
 1206|  42.8k|            ps_codec->as_process[i].i4_cur_mv_bank_buf_id = cur_mv_bank_buf_id;
 1207|  42.8k|            ps_codec->as_process[i].s_sao_ctxt.pu1_slice_idx = ps_codec->as_process[i].pu1_slice_idx;
 1208|  42.8k|            ps_codec->as_process[i].s_sao_ctxt.pu1_tile_idx = ps_codec->as_process[i].pu1_tile_idx;
 1209|       |
 1210|       |            /* TODO: For asynchronous api the following initializations related to picture
 1211|       |             * buffer should be moved to processing side
 1212|       |             */
 1213|  42.8k|            ps_codec->as_process[i].pu1_cur_pic_luma = pu1_cur_pic_luma;
 1214|  42.8k|            ps_codec->as_process[i].pu1_cur_pic_chroma = pu1_cur_pic_chroma;
 1215|  42.8k|            ps_codec->as_process[i].ps_cur_pic = ps_cur_pic;
 1216|  42.8k|            ps_codec->as_process[i].i4_cur_pic_buf_id = cur_pic_buf_id;
 1217|       |
 1218|  42.8k|            ps_codec->as_process[i].ps_out_buffer = ps_codec->ps_out_buffer;
 1219|  42.8k|            if(1 < ps_codec->i4_num_cores)
  ------------------
  |  Branch (1219:16): [True: 31.9k, False: 10.9k]
  ------------------
 1220|  31.9k|            {
 1221|  31.9k|                ps_codec->as_process[i].i4_check_parse_status = 1;
 1222|  31.9k|                ps_codec->as_process[i].i4_check_proc_status = 1;
 1223|  31.9k|            }
 1224|  10.9k|            else
 1225|  10.9k|            {
 1226|  10.9k|                ps_codec->as_process[i].i4_check_parse_status = 0;
 1227|  10.9k|                ps_codec->as_process[i].i4_check_proc_status = 0;
 1228|  10.9k|            }
 1229|  42.8k|            ps_codec->as_process[i].pu1_pic_intra_flag = ps_codec->s_parse.pu1_pic_intra_flag;
 1230|  42.8k|            ps_codec->as_process[i].pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
 1231|  42.8k|            ps_codec->as_process[i].i4_init_done = 0;
 1232|       |
 1233|  42.8k|            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_tu_idx = ps_codec->as_process[i].pu4_pic_tu_idx;
 1234|  42.8k|            ps_codec->as_process[i].s_bs_ctxt.pu4_pic_pu_idx = ps_codec->as_process[i].pu4_pic_pu_idx;
 1235|  42.8k|            ps_codec->as_process[i].s_bs_ctxt.ps_pic_pu = ps_codec->as_process[i].ps_pic_pu;
 1236|  42.8k|            ps_codec->as_process[i].s_deblk_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
 1237|  42.8k|            ps_codec->as_process[i].s_deblk_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
 1238|  42.8k|            ps_codec->as_process[i].s_deblk_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
 1239|  42.8k|            ps_codec->as_process[i].s_sao_ctxt.pu1_pic_no_loop_filter_flag = ps_codec->s_parse.pu1_pic_no_loop_filter_flag;
 1240|  42.8k|            ps_codec->as_process[i].s_sao_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
 1241|  42.8k|            ps_codec->as_process[i].s_sao_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
 1242|  42.8k|            if(i < (ps_codec->i4_num_cores - 1))
  ------------------
  |  Branch (1242:16): [True: 6.69k, False: 36.1k]
  ------------------
 1243|  6.69k|            {
 1244|  6.69k|                if (!ps_codec->ai4_process_thread_created[i])
  ------------------
  |  Branch (1244:21): [True: 6.69k, False: 0]
  ------------------
 1245|  6.69k|                {
 1246|  6.69k|                    ithread_create(ps_codec->apv_process_thread_handle[i], NULL,
 1247|  6.69k|                                (void *)ihevcd_process_thread,
 1248|  6.69k|                                (void *)&ps_codec->as_process[i]);
 1249|  6.69k|                    ps_codec->ai4_process_thread_created[i] = 1;
 1250|  6.69k|                }
 1251|       |#ifdef KEEP_THREADS_ACTIVE
 1252|       |                ret = ithread_mutex_lock(ps_codec->apv_proc_start_mutex[i]);
 1253|       |                RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1254|       |
 1255|       |                ps_codec->ai4_process_start[i] = 1;
 1256|       |                ithread_cond_signal(ps_codec->apv_proc_start_condition[i]);
 1257|       |
 1258|       |                ret = ithread_mutex_unlock(ps_codec->apv_proc_start_mutex[i]);
 1259|       |                RETURN_IF((ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS), ret);
 1260|       |#endif
 1261|  6.69k|            }
 1262|  36.1k|            else
 1263|  36.1k|            {
 1264|  36.1k|                ps_codec->ai4_process_thread_created[i] = 0;
 1265|  36.1k|            }
 1266|       |
 1267|  42.8k|        }
 1268|  5.35k|        if(ps_codec->u1_enable_cu_info)
  ------------------
  |  Branch (1268:12): [True: 0, False: 5.35k]
  ------------------
 1269|      0|        {
 1270|      0|            ps_codec->as_buf_id_info_map[cur_pic_buf_id].pu1_qp_map =
 1271|      0|                ps_codec->pu1_qp_map_base + (cur_pic_buf_id * ps_codec->u4_num_8x8_blks);
 1272|      0|            ps_codec->as_buf_id_info_map[cur_pic_buf_id].pu1_cu_type_map =
 1273|      0|                ps_codec->pu1_cu_type_map_base + (cur_pic_buf_id * ps_codec->u4_num_8x8_blks);
 1274|      0|            memset(ps_codec->as_buf_id_info_map[cur_pic_buf_id].pu1_qp_map,
 1275|      0|                0, ps_codec->u4_num_8x8_blks);
 1276|      0|            memset(ps_codec->as_buf_id_info_map[cur_pic_buf_id].pu1_qp_map,
 1277|      0|                0, ps_codec->u4_num_8x8_blks);
 1278|      0|        }
 1279|       |
 1280|  5.35k|        ps_codec->s_parse.s_deblk_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
 1281|  5.35k|        ps_codec->s_parse.s_deblk_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
 1282|       |
 1283|  5.35k|        ps_codec->s_parse.s_sao_ctxt.pu1_cur_pic_luma = pu1_cur_pic_luma;
 1284|  5.35k|        ps_codec->s_parse.s_sao_ctxt.pu1_cur_pic_chroma = pu1_cur_pic_chroma;
 1285|  5.35k|    }
 1286|       |    /* Since any input bitstream buffer that contains slice data will be sent to output(even in
 1287|       |     * case of error, this buffer is added to display queue and next buffer in the display queue
 1288|       |     * will be returned as the display buffer.
 1289|       |     * Note: If format conversion (or frame copy) is used and is scheduled
 1290|       |     * in a different thread then it has to check if the processing for the current row is complete before
 1291|       |     * it copies/converts a given row. In case of low delay or in case of B pictures, current frame being decoded has to be
 1292|       |     * returned, which requires a status check to ensure that the current row is reconstructed before copying.
 1293|       |     */
 1294|       |    /* Add current picture to display manager */
 1295|  5.35k|    {
 1296|  5.35k|        WORD32 abs_poc;
 1297|  5.35k|        slice_header_t *ps_slice_hdr;
 1298|  5.35k|        ps_slice_hdr = ps_codec->s_parse.ps_slice_hdr;
 1299|  5.35k|        abs_poc = ps_slice_hdr->i4_abs_pic_order_cnt;
 1300|  5.35k|        ihevc_disp_mgr_add((disp_mgr_t *)ps_codec->pv_disp_buf_mgr,
 1301|  5.35k|                           ps_codec->as_process[0].i4_cur_pic_buf_id,
 1302|  5.35k|                           abs_poc,
 1303|  5.35k|                           ps_codec->as_process[0].ps_cur_pic);
 1304|  5.35k|    }
 1305|  5.35k|    ps_codec->ps_disp_buf = NULL;
 1306|       |    /* Get picture to be displayed if number of pictures decoded is more than max allowed reorder */
 1307|       |    /* Since the current will be decoded, check is fore >= instead of > */
 1308|  5.35k|    if(((WORD32)(ps_codec->u4_pic_cnt - ps_codec->u4_disp_cnt) >= ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1]) ||
  ------------------
  |  Branch (1308:8): [True: 4.85k, False: 503]
  ------------------
 1309|  5.35k|       (ps_codec->e_frm_out_mode == IVD_DECODE_FRAME_OUT))
  ------------------
  |  Branch (1309:8): [True: 0, False: 503]
  ------------------
 1310|       |
 1311|  4.85k|    {
 1312|  4.85k|        ps_codec->ps_disp_buf = (pic_buf_t *)ihevc_disp_mgr_get((disp_mgr_t *)ps_codec->pv_disp_buf_mgr, &ps_codec->i4_disp_buf_id);
 1313|  4.85k|        ps_codec->u4_disp_cnt++;
 1314|  4.85k|    }
 1315|       |
 1316|  5.35k|    ps_codec->s_fmt_conv.i4_cur_row = 0;
 1317|       |    /* Set number of rows to be processed at a time */
 1318|  5.35k|    ps_codec->s_fmt_conv.i4_num_rows = 4;
 1319|       |
 1320|  5.35k|    if(ps_codec->u4_enable_fmt_conv_ahead && (ps_codec->i4_num_cores > 1))
  ------------------
  |  Branch (1320:8): [True: 0, False: 5.35k]
  |  Branch (1320:46): [True: 0, False: 0]
  ------------------
 1321|      0|    {
 1322|      0|        process_ctxt_t *ps_proc;
 1323|       |
 1324|       |        /* i4_num_cores - 1 contexts are currently being used by other threads */
 1325|      0|        ps_proc = &ps_codec->as_process[ps_codec->i4_num_cores - 1];
 1326|       |
 1327|       |        /* If the frame being decoded and displayed are different, schedule format conversion jobs
 1328|       |         * this will keep the proc threads busy and lets parse thread decode few CTBs ahead
 1329|       |         * If the frame being decoded and displayed are same, then format conversion is scheduled later.
 1330|       |         */
 1331|      0|        if((ps_codec->ps_disp_buf) && (ps_codec->i4_disp_buf_id != ps_proc->i4_cur_pic_buf_id) &&
  ------------------
  |  Branch (1331:12): [True: 0, False: 0]
  |  Branch (1331:39): [True: 0, False: 0]
  ------------------
 1332|      0|           ((0 == ps_codec->i4_share_disp_buf) || (IV_YUV_420P == ps_codec->e_chroma_fmt)))
  ------------------
  |  Branch (1332:13): [True: 0, False: 0]
  |  Branch (1332:51): [True: 0, False: 0]
  ------------------
 1333|      0|        {
 1334|       |
 1335|      0|            for(i = 0; i < ps_sps->i2_pic_ht_in_ctb; i++)
  ------------------
  |  Branch (1335:24): [True: 0, False: 0]
  ------------------
 1336|      0|            {
 1337|      0|                proc_job_t s_job;
 1338|      0|                IHEVCD_ERROR_T ret;
 1339|      0|                s_job.i4_cmd = CMD_FMTCONV;
 1340|      0|                s_job.i2_ctb_cnt = 0;
 1341|      0|                s_job.i2_ctb_x = 0;
 1342|      0|                s_job.i2_ctb_y = i;
 1343|      0|                s_job.i2_slice_idx = 0;
 1344|      0|                s_job.i4_tu_coeff_data_ofst = 0;
 1345|      0|                ret = ihevcd_jobq_queue((jobq_t *)ps_codec->s_parse.pv_proc_jobq,
 1346|      0|                                        &s_job, sizeof(proc_job_t), 1);
 1347|      0|                if(ret != (IHEVCD_ERROR_T)IHEVCD_SUCCESS)
  ------------------
  |  Branch (1347:20): [True: 0, False: 0]
  ------------------
 1348|      0|                    return ret;
 1349|      0|            }
 1350|      0|        }
 1351|      0|    }
 1352|       |
 1353|       |    /* If parse_pic_init is called, then slice data is present in the input bitstrea stream */
 1354|  5.35k|    ps_codec->i4_pic_present = 1;
 1355|       |
 1356|  5.35k|    return ret;
 1357|  5.35k|}

ihevcd_fmt_conv_420sp_to_420p_ssse3:
   60|    186|{
   61|    186|    UWORD8 *pu1_src, *pu1_dst;
   62|    186|    UWORD8 *pu1_u_src, *pu1_v_src;
   63|    186|    WORD32 num_rows, num_cols, src_strd, dst_strd, cols, rows;
   64|    186|    WORD32 i, j;
   65|       |
   66|    186|    cols = 0;
   67|    186|    pu1_u_src = (UWORD8 *)pu1_uv_src;
   68|    186|    pu1_v_src = (UWORD8 *)pu1_uv_src + 1;
   69|    186|    if(0 == disable_luma_copy)
  ------------------
  |  Branch (69:8): [True: 0, False: 186]
  ------------------
   70|      0|    {
   71|       |        /* copy luma */
   72|      0|        pu1_src = (UWORD8 *)pu1_y_src;
   73|      0|        pu1_dst = (UWORD8 *)pu1_y_dst;
   74|       |
   75|      0|        num_rows = ht;
   76|      0|        num_cols = wd;
   77|       |
   78|      0|        src_strd = src_y_strd;
   79|      0|        dst_strd = dst_y_strd;
   80|      0|        for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (80:20): [True: 0, False: 0]
  ------------------
   81|      0|        {
   82|      0|            memcpy(pu1_dst, pu1_src, num_cols);
   83|      0|            pu1_dst += dst_strd;
   84|      0|            pu1_src += src_strd;
   85|      0|        }
   86|      0|    }
   87|       |
   88|       |    /* de-interleave U and V and copy to destination */
   89|    186|    if(!is_u_first)
  ------------------
  |  Branch (89:8): [True: 0, False: 186]
  ------------------
   90|      0|    {
   91|      0|        UWORD8 *temp = pu1_u_dst;
   92|      0|        pu1_u_dst = pu1_v_dst;
   93|      0|        pu1_v_dst = temp;
   94|       |
   95|      0|        pu1_u_src = (UWORD8 *)pu1_uv_src + 1;
   96|      0|        pu1_v_src = (UWORD8 *)pu1_uv_src;
   97|      0|    }
   98|       |
   99|    186|    {
  100|    186|        __m128i src_uv0_8x16b, src_uv1_8x16b, src_u_8x16b, src_v_8x16b;
  101|    186|        __m128i temp0_8x16b, temp1_8x16b, alt_first_mask;
  102|       |
  103|    186|        UWORD8 FIRST_ALT_SHUFFLE[16] = {
  104|    186|            0x00, 0x02, 0x04, 0x06,
  105|    186|            0x08, 0x0A, 0x0C, 0x0E,
  106|    186|            0x01, 0x03, 0x05, 0x07,
  107|    186|            0x09, 0x0B, 0x0D, 0x0F };
  108|       |
  109|    186|        PREFETCH((char const *)(pu1_uv_src + (0 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  110|    186|        PREFETCH((char const *)(pu1_uv_src + (1 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  111|    186|        PREFETCH((char const *)(pu1_uv_src + (2 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  112|    186|        PREFETCH((char const *)(pu1_uv_src + (3 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  113|    186|        PREFETCH((char const *)(pu1_uv_src + (4 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  114|    186|        PREFETCH((char const *)(pu1_uv_src + (5 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  115|    186|        PREFETCH((char const *)(pu1_uv_src + (6 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  116|    186|        PREFETCH((char const *)(pu1_uv_src + (7 * src_uv_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|    186|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  117|       |
  118|    186|        num_rows = ht >> 1;
  119|    186|        num_cols = wd >> 1;
  120|       |
  121|    186|        src_strd = src_uv_strd;
  122|    186|        dst_strd = dst_uv_strd;
  123|       |
  124|    186|        alt_first_mask = _mm_loadu_si128((__m128i *)&FIRST_ALT_SHUFFLE[0]);
  125|       |
  126|    186|        if(num_cols > 15)
  ------------------
  |  Branch (126:12): [True: 186, False: 0]
  ------------------
  127|    186|        {
  128|    186|            cols = num_cols >> 4;
  129|       |
  130|  33.2k|            for(i = 0; i < (num_rows >> 2); i++)
  ------------------
  |  Branch (130:24): [True: 33.0k, False: 186]
  ------------------
  131|  33.0k|            {
  132|  33.0k|                UWORD8 *pu1_uv_src_temp, *pu1_u_dst_temp, *pu1_v_dst_temp;
  133|       |
  134|  33.0k|                PREFETCH((char const *)(pu1_uv_src + (8 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  135|  33.0k|                PREFETCH((char const *)(pu1_uv_src + (9 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  136|  33.0k|                PREFETCH((char const *)(pu1_uv_src + (10 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  137|  33.0k|                PREFETCH((char const *)(pu1_uv_src + (11 * src_strd)), _MM_HINT_T0)
  ------------------
  |  |  186|  33.0k|#define PREFETCH(ptr, type) _mm_prefetch(ptr, type);
  ------------------
  138|       |
  139|  33.0k|                pu1_uv_src_temp = pu1_uv_src;
  140|  33.0k|                pu1_u_dst_temp =  pu1_u_dst;
  141|  33.0k|                pu1_v_dst_temp =  pu1_v_dst;
  142|       |
  143|  2.72M|                for(j = 0; j < cols; j++)
  ------------------
  |  Branch (143:28): [True: 2.69M, False: 33.0k]
  ------------------
  144|  2.69M|                {
  145|       |
  146|       |                    /**** Row 0 ***/
  147|  2.69M|                    src_uv0_8x16b = _mm_loadu_si128((__m128i *)pu1_uv_src_temp);
  148|  2.69M|                    src_uv1_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + 16));
  149|       |
  150|  2.69M|                    temp0_8x16b = _mm_shuffle_epi8(src_uv0_8x16b, alt_first_mask);
  151|  2.69M|                    temp1_8x16b = _mm_shuffle_epi8(src_uv1_8x16b, alt_first_mask);
  152|       |
  153|  2.69M|                    src_u_8x16b = _mm_unpacklo_epi64(temp0_8x16b, temp1_8x16b);
  154|  2.69M|                    src_v_8x16b = _mm_unpackhi_epi64(temp0_8x16b, temp1_8x16b);
  155|       |
  156|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_u_dst_temp), src_u_8x16b);
  157|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_v_dst_temp), src_v_8x16b);
  158|       |
  159|       |                    /**** Row 1 ***/
  160|  2.69M|                    src_uv0_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + (1 * src_strd)));
  161|  2.69M|                    src_uv1_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + (1 * src_strd) + 16));
  162|       |
  163|  2.69M|                    temp0_8x16b = _mm_shuffle_epi8(src_uv0_8x16b, alt_first_mask);
  164|  2.69M|                    temp1_8x16b = _mm_shuffle_epi8(src_uv1_8x16b, alt_first_mask);
  165|       |
  166|  2.69M|                    src_u_8x16b = _mm_unpacklo_epi64(temp0_8x16b, temp1_8x16b);
  167|  2.69M|                    src_v_8x16b = _mm_unpackhi_epi64(temp0_8x16b, temp1_8x16b);
  168|       |
  169|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_u_dst_temp + (1 * dst_strd)), src_u_8x16b);
  170|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_v_dst_temp + (1 * dst_strd)), src_v_8x16b);
  171|       |
  172|       |                    /**** Row 2 ***/
  173|  2.69M|                    src_uv0_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + (2 * src_strd)));
  174|  2.69M|                    src_uv1_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + (2 * src_strd) + 16));
  175|       |
  176|  2.69M|                    temp0_8x16b = _mm_shuffle_epi8(src_uv0_8x16b, alt_first_mask);
  177|  2.69M|                    temp1_8x16b = _mm_shuffle_epi8(src_uv1_8x16b, alt_first_mask);
  178|       |
  179|  2.69M|                    src_u_8x16b = _mm_unpacklo_epi64(temp0_8x16b, temp1_8x16b);
  180|  2.69M|                    src_v_8x16b = _mm_unpackhi_epi64(temp0_8x16b, temp1_8x16b);
  181|       |
  182|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_u_dst_temp + (2 * dst_strd)), src_u_8x16b);
  183|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_v_dst_temp + (2 * dst_strd)), src_v_8x16b);
  184|       |
  185|       |                    /**** Row 3 ***/
  186|  2.69M|                    src_uv0_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + (3 * src_strd)));
  187|  2.69M|                    src_uv1_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + (3 * src_strd) + 16));
  188|       |
  189|  2.69M|                    temp0_8x16b = _mm_shuffle_epi8(src_uv0_8x16b, alt_first_mask);
  190|  2.69M|                    temp1_8x16b = _mm_shuffle_epi8(src_uv1_8x16b, alt_first_mask);
  191|       |
  192|  2.69M|                    src_u_8x16b = _mm_unpacklo_epi64(temp0_8x16b, temp1_8x16b);
  193|  2.69M|                    src_v_8x16b = _mm_unpackhi_epi64(temp0_8x16b, temp1_8x16b);
  194|       |
  195|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_u_dst_temp + (3 * dst_strd)), src_u_8x16b);
  196|  2.69M|                    _mm_storeu_si128((__m128i *)(pu1_v_dst_temp + (3 * dst_strd)), src_v_8x16b);
  197|       |
  198|  2.69M|                    pu1_u_dst_temp += 16;
  199|  2.69M|                    pu1_v_dst_temp += 16;
  200|  2.69M|                    pu1_uv_src_temp += 32;
  201|  2.69M|                }
  202|       |
  203|  33.0k|                pu1_u_dst += 4 * dst_strd;
  204|  33.0k|                pu1_v_dst += 4 * dst_strd;
  205|  33.0k|                pu1_uv_src += 4 * src_strd;
  206|       |                //pu1_v_src += src_strd;
  207|  33.0k|            }
  208|    186|            rows = num_rows & 0x3;
  209|    186|            if(rows)
  ------------------
  |  Branch (209:16): [True: 80, False: 106]
  ------------------
  210|     80|            {
  211|    245|                for(i = 0; i < rows; i++)
  ------------------
  |  Branch (211:28): [True: 165, False: 80]
  ------------------
  212|    165|                {
  213|    165|                    UWORD8 *pu1_uv_src_temp, *pu1_u_dst_temp, *pu1_v_dst_temp;
  214|       |
  215|    165|                    pu1_uv_src_temp = pu1_uv_src;
  216|    165|                    pu1_u_dst_temp =  pu1_u_dst;
  217|    165|                    pu1_v_dst_temp =  pu1_v_dst;
  218|       |
  219|  13.9k|                    for(j = 0; j < cols; j++)
  ------------------
  |  Branch (219:32): [True: 13.7k, False: 165]
  ------------------
  220|  13.7k|                    {
  221|       |
  222|  13.7k|                        src_uv0_8x16b = _mm_loadu_si128((__m128i *)pu1_uv_src_temp);
  223|  13.7k|                        src_uv1_8x16b = _mm_loadu_si128((__m128i *)(pu1_uv_src_temp + 16));
  224|       |
  225|  13.7k|                        temp0_8x16b = _mm_shuffle_epi8(src_uv0_8x16b, alt_first_mask);
  226|  13.7k|                        temp1_8x16b = _mm_shuffle_epi8(src_uv1_8x16b, alt_first_mask);
  227|       |
  228|  13.7k|                        src_u_8x16b = _mm_unpacklo_epi64(temp0_8x16b, temp1_8x16b);
  229|  13.7k|                        src_v_8x16b = _mm_unpackhi_epi64(temp0_8x16b, temp1_8x16b);
  230|       |
  231|  13.7k|                        _mm_storeu_si128((__m128i *)(pu1_u_dst_temp), src_u_8x16b);
  232|  13.7k|                        _mm_storeu_si128((__m128i *)(pu1_v_dst_temp), src_v_8x16b);
  233|       |
  234|  13.7k|                        pu1_u_dst_temp += 16;
  235|  13.7k|                        pu1_v_dst_temp += 16;
  236|  13.7k|                        pu1_uv_src_temp += 32;
  237|  13.7k|                    }
  238|       |
  239|    165|                    pu1_u_dst += dst_strd;
  240|    165|                    pu1_v_dst += dst_strd;
  241|    165|                    pu1_uv_src += src_strd;
  242|    165|                }
  243|     80|            }
  244|    186|            pu1_u_dst -= (num_rows * dst_strd);
  245|    186|            pu1_v_dst -= (num_rows * dst_strd);
  246|    186|            num_cols &= 0x0F;
  247|    186|        }
  248|    186|        if(num_cols)
  ------------------
  |  Branch (248:12): [True: 152, False: 34]
  ------------------
  249|    152|        {
  250|    152|            pu1_u_dst += (cols << 4);
  251|    152|            pu1_v_dst += (cols << 4);
  252|    152|            pu1_u_src += 2 * (cols << 4);
  253|    152|            pu1_v_src += 2 * (cols << 4);
  254|   120k|            for(i = 0; i < num_rows; i++)
  ------------------
  |  Branch (254:24): [True: 120k, False: 152]
  ------------------
  255|   120k|            {
  256|   591k|                for(j = 0; j < num_cols; j++)
  ------------------
  |  Branch (256:28): [True: 470k, False: 120k]
  ------------------
  257|   470k|                {
  258|   470k|                    pu1_u_dst[j] = pu1_u_src[j * 2];
  259|   470k|                    pu1_v_dst[j] = pu1_v_src[j * 2];
  260|   470k|                }
  261|       |
  262|   120k|                pu1_u_dst += dst_strd;
  263|   120k|                pu1_v_dst += dst_strd;
  264|   120k|                pu1_u_src += src_strd;
  265|   120k|                pu1_v_src += src_strd;
  266|   120k|            }
  267|    152|        }
  268|    186|    }
  269|    186|    return;
  270|    186|}

ihevcd_init_function_ptr:
   62|  1.64k|{
   63|  1.64k|    codec_t *ps_codec = (codec_t *)pv_codec;
   64|  1.64k|    switch(ps_codec->e_processor_arch)
   65|  1.64k|    {
   66|    510|        case ARCH_X86_GENERIC:
  ------------------
  |  Branch (66:9): [True: 510, False: 1.13k]
  ------------------
   67|    510|            ihevcd_init_function_ptr_generic(pv_codec);
   68|    510|            break;
   69|      7|        case ARCH_X86_SSSE3:
  ------------------
  |  Branch (69:9): [True: 7, False: 1.64k]
  ------------------
   70|      7|            ihevcd_init_function_ptr_ssse3(pv_codec);
   71|      7|            break;
   72|  1.01k|        case ARCH_X86_SSE42:
  ------------------
  |  Branch (72:9): [True: 1.01k, False: 637]
  ------------------
   73|  1.01k|            ihevcd_init_function_ptr_sse42(pv_codec);
   74|  1.01k|            break;
   75|      0|        case ARCH_X86_AVX2:
  ------------------
  |  Branch (75:9): [True: 0, False: 1.64k]
  ------------------
   76|       |#ifndef DISABLE_AVX2
   77|       |            ihevcd_init_function_ptr_avx2(pv_codec);
   78|       |#else
   79|      0|            ihevcd_init_function_ptr_sse42(pv_codec);
   80|      0|#endif
   81|      0|            break;
   82|    120|        default:
  ------------------
  |  Branch (82:9): [True: 120, False: 1.52k]
  ------------------
   83|    120|            ihevcd_init_function_ptr_ssse3(pv_codec);
   84|    120|            break;
   85|  1.64k|    }
   86|  1.64k|}
ihevcd_init_arch:
   89|    985|{
   90|    985|    codec_t *ps_codec = (codec_t *)pv_codec;
   91|       |
   92|    985|#ifdef DEFAULT_ARCH
   93|       |#if DEFAULT_ARCH == D_ARCH_X86_GENERIC
   94|       |    ps_codec->e_processor_arch = ARCH_X86_GENERIC;
   95|       |#elif DEFAULT_ARCH == D_ARCH_X86_SSE42
   96|    985|    ps_codec->e_processor_arch = ARCH_X86_SSE42;
   97|       |#elif DEFAULT_ARCH == D_ARCH_X86_AVX2
   98|       |    ps_codec->e_processor_arch = ARCH_X86_AVX2;
   99|       |#else
  100|       |    ps_codec->e_processor_arch = ARCH_X86_SSSE3;
  101|       |#endif
  102|       |#else
  103|       |    ps_codec->e_processor_arch = ARCH_X86_SSSE3;
  104|       |#endif
  105|    985|}

ihevcd_init_function_ptr_generic:
   62|    510|{
   63|    510|    codec_t *ps_codec = (codec_t *)pv_codec;
   64|       |
   65|    510|    ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr                      =  &ihevc_deblk_chroma_horz;
   66|    510|    ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr                      =  &ihevc_deblk_chroma_vert;
   67|    510|    ps_codec->s_func_selector.ihevc_deblk_luma_vert_fptr                        =  &ihevc_deblk_luma_vert;
   68|    510|    ps_codec->s_func_selector.ihevc_deblk_luma_horz_fptr                        =  &ihevc_deblk_luma_horz;
   69|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_fptr                 =  &ihevc_inter_pred_chroma_copy;
   70|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_w16out_fptr          =  &ihevc_inter_pred_chroma_copy_w16out;
   71|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_fptr                 =  &ihevc_inter_pred_chroma_horz;
   72|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr          =  &ihevc_inter_pred_chroma_horz_w16out;
   73|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_fptr                 =  &ihevc_inter_pred_chroma_vert;
   74|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_fptr          =  &ihevc_inter_pred_chroma_vert_w16inp;
   75|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr   =  &ihevc_inter_pred_chroma_vert_w16inp_w16out;
   76|    510|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16out_fptr          =  &ihevc_inter_pred_chroma_vert_w16out;
   77|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_fptr                   =  &ihevc_inter_pred_luma_horz;
   78|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_fptr                   =  &ihevc_inter_pred_luma_vert;
   79|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16out_fptr            =  &ihevc_inter_pred_luma_vert_w16out;
   80|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_fptr            =  &ihevc_inter_pred_luma_vert_w16inp;
   81|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_fptr                   =  &ihevc_inter_pred_luma_copy;
   82|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_w16out_fptr            =  &ihevc_inter_pred_luma_copy_w16out;
   83|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr            =  &ihevc_inter_pred_luma_horz_w16out;
   84|    510|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_w16out_fptr     =  &ihevc_inter_pred_luma_vert_w16inp_w16out;
   85|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_ref_substitution_fptr     =  &ihevc_intra_pred_chroma_ref_substitution;
   86|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_substitution_fptr       =  &ihevc_intra_pred_luma_ref_substitution;
   87|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_subst_all_avlble_fptr   =  &ihevc_intra_pred_luma_ref_subst_all_avlble;
   88|    510|    ps_codec->s_func_selector.ihevc_intra_pred_ref_filtering_fptr               =  &ihevc_intra_pred_ref_filtering;
   89|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_dc_fptr                   =  &ihevc_intra_pred_chroma_dc;
   90|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_horz_fptr                 =  &ihevc_intra_pred_chroma_horz;
   91|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode2_fptr                =  &ihevc_intra_pred_chroma_mode2;
   92|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_18_34_fptr           =  &ihevc_intra_pred_chroma_mode_18_34;
   93|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_27_to_33_fptr        =  &ihevc_intra_pred_chroma_mode_27_to_33;
   94|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_3_to_9_fptr          =  &ihevc_intra_pred_chroma_mode_3_to_9;
   95|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_planar_fptr               =  &ihevc_intra_pred_chroma_planar;
   96|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_ver_fptr                  =  &ihevc_intra_pred_chroma_ver;
   97|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_11_to_17_fptr        =  &ihevc_intra_pred_chroma_mode_11_to_17;
   98|    510|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_19_to_25_fptr        =  &ihevc_intra_pred_chroma_mode_19_to_25;
   99|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_11_to_17_fptr          =  &ihevc_intra_pred_luma_mode_11_to_17;
  100|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_19_to_25_fptr          =  &ihevc_intra_pred_luma_mode_19_to_25;
  101|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_dc_fptr                     =  &ihevc_intra_pred_luma_dc;
  102|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_horz_fptr                   =  &ihevc_intra_pred_luma_horz;
  103|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode2_fptr                  =  &ihevc_intra_pred_luma_mode2;
  104|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_18_34_fptr             =  &ihevc_intra_pred_luma_mode_18_34;
  105|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_27_to_33_fptr          =  &ihevc_intra_pred_luma_mode_27_to_33;
  106|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_3_to_9_fptr            =  &ihevc_intra_pred_luma_mode_3_to_9;
  107|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_planar_fptr                 =  &ihevc_intra_pred_luma_planar;
  108|    510|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ver_fptr                    =  &ihevc_intra_pred_luma_ver;
  109|    510|    ps_codec->s_func_selector.ihevc_itrans_4x4_ttype1_fptr                      =  &ihevc_itrans_4x4_ttype1;
  110|    510|    ps_codec->s_func_selector.ihevc_itrans_4x4_fptr                             =  &ihevc_itrans_4x4;
  111|    510|    ps_codec->s_func_selector.ihevc_itrans_8x8_fptr                             =  &ihevc_itrans_8x8;
  112|    510|    ps_codec->s_func_selector.ihevc_itrans_16x16_fptr                           =  &ihevc_itrans_16x16;
  113|    510|    ps_codec->s_func_selector.ihevc_itrans_32x32_fptr                           =  &ihevc_itrans_32x32;
  114|    510|    ps_codec->s_func_selector.ihevc_itrans_recon_4x4_ttype1_fptr                =  &ihevc_itrans_recon_4x4_ttype1;
  115|    510|    ps_codec->s_func_selector.ihevc_itrans_recon_4x4_fptr                       =  &ihevc_itrans_recon_4x4;
  116|    510|    ps_codec->s_func_selector.ihevc_itrans_recon_8x8_fptr                       =  &ihevc_itrans_recon_8x8;
  117|    510|    ps_codec->s_func_selector.ihevc_itrans_recon_16x16_fptr                     =  &ihevc_itrans_recon_16x16;
  118|    510|    ps_codec->s_func_selector.ihevc_itrans_recon_32x32_fptr                     =  &ihevc_itrans_recon_32x32;
  119|    510|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_4x4_fptr                =  &ihevc_chroma_itrans_recon_4x4;
  120|    510|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_8x8_fptr                =  &ihevc_chroma_itrans_recon_8x8;
  121|    510|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_16x16_fptr              =  &ihevc_chroma_itrans_recon_16x16;
  122|    510|    ps_codec->s_func_selector.ihevc_recon_4x4_ttype1_fptr                       =  &ihevc_recon_4x4_ttype1;
  123|    510|    ps_codec->s_func_selector.ihevc_recon_4x4_fptr                              =  &ihevc_recon_4x4;
  124|    510|    ps_codec->s_func_selector.ihevc_recon_8x8_fptr                              =  &ihevc_recon_8x8;
  125|    510|    ps_codec->s_func_selector.ihevc_recon_16x16_fptr                            =  &ihevc_recon_16x16;
  126|    510|    ps_codec->s_func_selector.ihevc_recon_32x32_fptr                            =  &ihevc_recon_32x32;
  127|    510|    ps_codec->s_func_selector.ihevc_chroma_recon_4x4_fptr                       =  &ihevc_chroma_recon_4x4;
  128|    510|    ps_codec->s_func_selector.ihevc_chroma_recon_8x8_fptr                       =  &ihevc_chroma_recon_8x8;
  129|    510|    ps_codec->s_func_selector.ihevc_chroma_recon_16x16_fptr                     =  &ihevc_chroma_recon_16x16;
  130|    510|    ps_codec->s_func_selector.ihevc_memcpy_mul_8_fptr                           =  &ihevc_memcpy_mul_8;
  131|    510|    ps_codec->s_func_selector.ihevc_memcpy_fptr                                 =  &ihevc_memcpy;
  132|    510|    ps_codec->s_func_selector.ihevc_memset_mul_8_fptr                           =  &ihevc_memset_mul_8;
  133|    510|    ps_codec->s_func_selector.ihevc_memset_fptr                                 =  &ihevc_memset;
  134|    510|    ps_codec->s_func_selector.ihevc_memset_16bit_mul_8_fptr                     =  &ihevc_memset_16bit_mul_8;
  135|    510|    ps_codec->s_func_selector.ihevc_memset_16bit_fptr                           =  &ihevc_memset_16bit;
  136|    510|    ps_codec->s_func_selector.ihevc_pad_left_luma_fptr                          =  &ihevc_pad_left_luma;
  137|    510|    ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr                        =  &ihevc_pad_left_chroma;
  138|    510|    ps_codec->s_func_selector.ihevc_pad_right_luma_fptr                         =  &ihevc_pad_right_luma;
  139|    510|    ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr                       =  &ihevc_pad_right_chroma;
  140|    510|    ps_codec->s_func_selector.ihevc_weighted_pred_bi_fptr                       =  &ihevc_weighted_pred_bi;
  141|    510|    ps_codec->s_func_selector.ihevc_weighted_pred_bi_default_fptr               =  &ihevc_weighted_pred_bi_default;
  142|    510|    ps_codec->s_func_selector.ihevc_weighted_pred_uni_fptr                      =  &ihevc_weighted_pred_uni;
  143|    510|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_fptr                =  &ihevc_weighted_pred_chroma_bi;
  144|    510|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_default_fptr        =  &ihevc_weighted_pred_chroma_bi_default;
  145|    510|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_uni_fptr               =  &ihevc_weighted_pred_chroma_uni;
  146|    510|    ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr                   =  &ihevc_sao_band_offset_luma;
  147|    510|    ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr                 =  &ihevc_sao_band_offset_chroma;
  148|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_fptr                 =  &ihevc_sao_edge_offset_class0;
  149|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_chroma_fptr          =  &ihevc_sao_edge_offset_class0_chroma;
  150|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_fptr                 =  &ihevc_sao_edge_offset_class1;
  151|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_chroma_fptr          =  &ihevc_sao_edge_offset_class1_chroma;
  152|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_fptr                 =  &ihevc_sao_edge_offset_class2;
  153|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_chroma_fptr          =  &ihevc_sao_edge_offset_class2_chroma;
  154|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_fptr                 =  &ihevc_sao_edge_offset_class3;
  155|    510|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_chroma_fptr          =  &ihevc_sao_edge_offset_class3_chroma;
  156|    510|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgba8888_fptr            =  &ihevcd_fmt_conv_420sp_to_rgba8888;
  157|    510|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgb565_fptr              =  &ihevcd_fmt_conv_420sp_to_rgb565;
  158|    510|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420sp_fptr               =  &ihevcd_fmt_conv_420sp_to_420sp;
  159|    510|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420p_fptr                =  &ihevcd_fmt_conv_420sp_to_420p;
  160|    510|    ps_codec->s_func_selector.ihevcd_itrans_recon_dc_luma_fptr                  =  &ihevcd_itrans_recon_dc_luma;
  161|    510|    ps_codec->s_func_selector.ihevcd_itrans_recon_dc_chroma_fptr                =  &ihevcd_itrans_recon_dc_chroma;
  162|    510|}

ihevcd_init_function_ptr_sse42:
   62|  1.01k|{
   63|  1.01k|    codec_t *ps_codec = (codec_t *)pv_codec;
   64|       |
   65|  1.01k|    ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr                      =  &ihevc_deblk_chroma_horz_ssse3;
   66|  1.01k|    ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr                      =  &ihevc_deblk_chroma_vert_ssse3;
   67|  1.01k|    ps_codec->s_func_selector.ihevc_deblk_luma_vert_fptr                        =  &ihevc_deblk_luma_vert_ssse3;
   68|  1.01k|    ps_codec->s_func_selector.ihevc_deblk_luma_horz_fptr                        =  &ihevc_deblk_luma_horz_ssse3;
   69|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_fptr                 =  &ihevc_inter_pred_chroma_copy_sse42;
   70|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_w16out_fptr          =  &ihevc_inter_pred_chroma_copy_w16out_sse42;
   71|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_fptr                 =  &ihevc_inter_pred_chroma_horz_ssse3;
   72|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr          =  &ihevc_inter_pred_chroma_horz_w16out_ssse3;
   73|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_fptr                 =  &ihevc_inter_pred_chroma_vert_ssse3;
   74|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_fptr          =  &ihevc_inter_pred_chroma_vert_w16inp_ssse3;
   75|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr   =  &ihevc_inter_pred_chroma_vert_w16inp_w16out_ssse3;
   76|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16out_fptr          =  &ihevc_inter_pred_chroma_vert_w16out_ssse3;
   77|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_fptr                   =  &ihevc_inter_pred_luma_horz_ssse3;
   78|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_fptr                   =  &ihevc_inter_pred_luma_vert_ssse3;
   79|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16out_fptr            =  &ihevc_inter_pred_luma_vert_w16out_ssse3;
   80|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_fptr            =  &ihevc_inter_pred_luma_vert_w16inp_ssse3;
   81|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_fptr                   =  &ihevc_inter_pred_luma_copy_ssse3;
   82|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_w16out_fptr            =  &ihevc_inter_pred_luma_copy_w16out_sse42;
   83|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr            =  &ihevc_inter_pred_luma_horz_w16out_ssse3;
   84|  1.01k|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_w16out_fptr     =  &ihevc_inter_pred_luma_vert_w16inp_w16out_ssse3;
   85|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_ref_substitution_fptr     =  &ihevc_intra_pred_chroma_ref_substitution;
   86|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_substitution_fptr       =  &ihevc_intra_pred_luma_ref_substitution;
   87|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_subst_all_avlble_fptr   =  &ihevc_intra_pred_luma_ref_subst_all_avlble;
   88|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_ref_filtering_fptr               =  &ihevc_intra_pred_ref_filtering_sse42;
   89|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_dc_fptr                   =  &ihevc_intra_pred_chroma_dc_sse42;
   90|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_horz_fptr                 =  &ihevc_intra_pred_chroma_horz_ssse3;
   91|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode2_fptr                =  &ihevc_intra_pred_chroma_mode2_ssse3;
   92|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_18_34_fptr           =  &ihevc_intra_pred_chroma_mode_18_34_ssse3;
   93|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_27_to_33_fptr        =  &ihevc_intra_pred_chroma_mode_27_to_33_ssse3;
   94|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_3_to_9_fptr          =  &ihevc_intra_pred_chroma_mode_3_to_9_ssse3;
   95|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_planar_fptr               =  &ihevc_intra_pred_chroma_planar_sse42;
   96|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_ver_fptr                  =  &ihevc_intra_pred_chroma_ver_ssse3;
   97|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_11_to_17_fptr        =  &ihevc_intra_pred_chroma_mode_11_to_17_ssse3;
   98|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_19_to_25_fptr        =  &ihevc_intra_pred_chroma_mode_19_to_25_ssse3;
   99|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_11_to_17_fptr          =  &ihevc_intra_pred_luma_mode_11_to_17_sse42;
  100|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_19_to_25_fptr          =  &ihevc_intra_pred_luma_mode_19_to_25_sse42;
  101|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_dc_fptr                     =  &ihevc_intra_pred_luma_dc_sse42;
  102|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_horz_fptr                   =  &ihevc_intra_pred_luma_horz_sse42;
  103|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode2_fptr                  =  &ihevc_intra_pred_luma_mode2_ssse3;
  104|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_18_34_fptr             =  &ihevc_intra_pred_luma_mode_18_34_ssse3;
  105|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_27_to_33_fptr          =  &ihevc_intra_pred_luma_mode_27_to_33_sse42;
  106|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_3_to_9_fptr            =  &ihevc_intra_pred_luma_mode_3_to_9_sse42;
  107|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_planar_fptr                 =  &ihevc_intra_pred_luma_planar_ssse3;
  108|  1.01k|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ver_fptr                    =  &ihevc_intra_pred_luma_ver_sse42;
  109|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_4x4_ttype1_fptr                      =  &ihevc_itrans_4x4_ttype1;
  110|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_4x4_fptr                             =  &ihevc_itrans_4x4;
  111|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_8x8_fptr                             =  &ihevc_itrans_8x8;
  112|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_16x16_fptr                           =  &ihevc_itrans_16x16;
  113|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_32x32_fptr                           =  &ihevc_itrans_32x32;
  114|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_recon_4x4_ttype1_fptr                =  &ihevc_itrans_recon_4x4_ttype1_sse42;
  115|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_recon_4x4_fptr                       =  &ihevc_itrans_recon_4x4_sse42;
  116|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_recon_8x8_fptr                       =  &ihevc_itrans_recon_8x8_sse42;
  117|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_recon_16x16_fptr                     =  &ihevc_itrans_recon_16x16_ssse3;
  118|  1.01k|    ps_codec->s_func_selector.ihevc_itrans_recon_32x32_fptr                     =  &ihevc_itrans_recon_32x32_sse42;
  119|  1.01k|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_4x4_fptr                =  &ihevc_chroma_itrans_recon_4x4;
  120|  1.01k|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_8x8_fptr                =  &ihevc_chroma_itrans_recon_8x8;
  121|  1.01k|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_16x16_fptr              =  &ihevc_chroma_itrans_recon_16x16;
  122|  1.01k|    ps_codec->s_func_selector.ihevc_recon_4x4_ttype1_fptr                       =  &ihevc_recon_4x4_ttype1;
  123|  1.01k|    ps_codec->s_func_selector.ihevc_recon_4x4_fptr                              =  &ihevc_recon_4x4;
  124|  1.01k|    ps_codec->s_func_selector.ihevc_recon_8x8_fptr                              =  &ihevc_recon_8x8;
  125|  1.01k|    ps_codec->s_func_selector.ihevc_recon_16x16_fptr                            =  &ihevc_recon_16x16;
  126|  1.01k|    ps_codec->s_func_selector.ihevc_recon_32x32_fptr                            =  &ihevc_recon_32x32;
  127|  1.01k|    ps_codec->s_func_selector.ihevc_chroma_recon_4x4_fptr                       =  &ihevc_chroma_recon_4x4;
  128|  1.01k|    ps_codec->s_func_selector.ihevc_chroma_recon_8x8_fptr                       =  &ihevc_chroma_recon_8x8;
  129|  1.01k|    ps_codec->s_func_selector.ihevc_chroma_recon_16x16_fptr                     =  &ihevc_chroma_recon_16x16;
  130|  1.01k|    ps_codec->s_func_selector.ihevc_memcpy_mul_8_fptr                           =  &ihevc_memcpy_mul_8;
  131|  1.01k|    ps_codec->s_func_selector.ihevc_memcpy_fptr                                 =  &ihevc_memcpy;
  132|  1.01k|    ps_codec->s_func_selector.ihevc_memset_mul_8_fptr                           =  &ihevc_memset_mul_8;
  133|  1.01k|    ps_codec->s_func_selector.ihevc_memset_fptr                                 =  &ihevc_memset;
  134|  1.01k|    ps_codec->s_func_selector.ihevc_memset_16bit_mul_8_fptr                     =  &ihevc_memset_16bit_mul_8;
  135|  1.01k|    ps_codec->s_func_selector.ihevc_memset_16bit_fptr                           =  &ihevc_memset_16bit;
  136|  1.01k|    ps_codec->s_func_selector.ihevc_pad_left_luma_fptr                          =  &ihevc_pad_left_luma;
  137|  1.01k|    ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr                        =  &ihevc_pad_left_chroma;
  138|  1.01k|    ps_codec->s_func_selector.ihevc_pad_right_luma_fptr                         =  &ihevc_pad_right_luma;
  139|  1.01k|    ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr                       =  &ihevc_pad_right_chroma;
  140|  1.01k|    ps_codec->s_func_selector.ihevc_weighted_pred_bi_fptr                       =  &ihevc_weighted_pred_bi_sse42;
  141|  1.01k|    ps_codec->s_func_selector.ihevc_weighted_pred_bi_default_fptr               =  &ihevc_weighted_pred_bi_default_sse42;
  142|  1.01k|    ps_codec->s_func_selector.ihevc_weighted_pred_uni_fptr                      =  &ihevc_weighted_pred_uni_sse42;
  143|  1.01k|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_fptr                =  &ihevc_weighted_pred_chroma_bi_sse42;
  144|  1.01k|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_default_fptr        =  &ihevc_weighted_pred_chroma_bi_default_ssse3;
  145|  1.01k|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_uni_fptr               =  &ihevc_weighted_pred_chroma_uni_sse42;
  146|  1.01k|    ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr                   =  &ihevc_sao_band_offset_luma_ssse3;
  147|  1.01k|    ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr                 =  &ihevc_sao_band_offset_chroma_ssse3;
  148|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_fptr                 =  &ihevc_sao_edge_offset_class0_ssse3;
  149|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_chroma_fptr          =  &ihevc_sao_edge_offset_class0_chroma_ssse3;
  150|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_fptr                 =  &ihevc_sao_edge_offset_class1_ssse3;
  151|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_chroma_fptr          =  &ihevc_sao_edge_offset_class1_chroma_ssse3;
  152|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_fptr                 =  &ihevc_sao_edge_offset_class2_ssse3;
  153|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_chroma_fptr          =  &ihevc_sao_edge_offset_class2_chroma_ssse3;
  154|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_fptr                 =  &ihevc_sao_edge_offset_class3_ssse3;
  155|  1.01k|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_chroma_fptr          =  &ihevc_sao_edge_offset_class3_chroma_ssse3;
  156|  1.01k|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgba8888_fptr            =  &ihevcd_fmt_conv_420sp_to_rgba8888;
  157|  1.01k|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgb565_fptr              =  &ihevcd_fmt_conv_420sp_to_rgb565;
  158|  1.01k|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420sp_fptr               =  &ihevcd_fmt_conv_420sp_to_420sp;
  159|  1.01k|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420p_fptr                =  &ihevcd_fmt_conv_420sp_to_420p_ssse3;
  160|  1.01k|    ps_codec->s_func_selector.ihevcd_itrans_recon_dc_luma_fptr                  =  &ihevcd_itrans_recon_dc_luma_sse42;
  161|  1.01k|    ps_codec->s_func_selector.ihevcd_itrans_recon_dc_chroma_fptr                =  &ihevcd_itrans_recon_dc_chroma_sse42;
  162|  1.01k|}

ihevcd_init_function_ptr_ssse3:
   62|    127|{
   63|    127|    codec_t *ps_codec = (codec_t *)pv_codec;
   64|       |
   65|    127|    ps_codec->s_func_selector.ihevc_deblk_chroma_horz_fptr                      =  &ihevc_deblk_chroma_horz_ssse3;
   66|    127|    ps_codec->s_func_selector.ihevc_deblk_chroma_vert_fptr                      =  &ihevc_deblk_chroma_vert_ssse3;
   67|    127|    ps_codec->s_func_selector.ihevc_deblk_luma_vert_fptr                        =  &ihevc_deblk_luma_vert_ssse3;
   68|    127|    ps_codec->s_func_selector.ihevc_deblk_luma_horz_fptr                        =  &ihevc_deblk_luma_horz_ssse3;
   69|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_fptr                 =  &ihevc_inter_pred_chroma_copy_ssse3;
   70|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_copy_w16out_fptr          =  &ihevc_inter_pred_chroma_copy_w16out_ssse3;
   71|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_fptr                 =  &ihevc_inter_pred_chroma_horz_ssse3;
   72|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_horz_w16out_fptr          =  &ihevc_inter_pred_chroma_horz_w16out_ssse3;
   73|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_fptr                 =  &ihevc_inter_pred_chroma_vert_ssse3;
   74|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_fptr          =  &ihevc_inter_pred_chroma_vert_w16inp_ssse3;
   75|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr   =  &ihevc_inter_pred_chroma_vert_w16inp_w16out_ssse3;
   76|    127|    ps_codec->s_func_selector.ihevc_inter_pred_chroma_vert_w16out_fptr          =  &ihevc_inter_pred_chroma_vert_w16out_ssse3;
   77|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_fptr                   =  &ihevc_inter_pred_luma_horz_ssse3;
   78|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_fptr                   =  &ihevc_inter_pred_luma_vert_ssse3;
   79|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16out_fptr            =  &ihevc_inter_pred_luma_vert_w16out_ssse3;
   80|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_fptr            =  &ihevc_inter_pred_luma_vert_w16inp_ssse3;
   81|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_fptr                   =  &ihevc_inter_pred_luma_copy_ssse3;
   82|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_copy_w16out_fptr            =  &ihevc_inter_pred_luma_copy_w16out_ssse3;
   83|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_horz_w16out_fptr            =  &ihevc_inter_pred_luma_horz_w16out_ssse3;
   84|    127|    ps_codec->s_func_selector.ihevc_inter_pred_luma_vert_w16inp_w16out_fptr     =  &ihevc_inter_pred_luma_vert_w16inp_w16out_ssse3;
   85|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_ref_substitution_fptr     =  &ihevc_intra_pred_chroma_ref_substitution;
   86|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_substitution_fptr       =  &ihevc_intra_pred_luma_ref_substitution;
   87|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ref_subst_all_avlble_fptr   =  &ihevc_intra_pred_luma_ref_subst_all_avlble;
   88|    127|    ps_codec->s_func_selector.ihevc_intra_pred_ref_filtering_fptr               =  &ihevc_intra_pred_ref_filtering_ssse3;
   89|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_dc_fptr                   =  &ihevc_intra_pred_chroma_dc_ssse3;
   90|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_horz_fptr                 =  &ihevc_intra_pred_chroma_horz_ssse3;
   91|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode2_fptr                =  &ihevc_intra_pred_chroma_mode2_ssse3;
   92|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_18_34_fptr           =  &ihevc_intra_pred_chroma_mode_18_34_ssse3;
   93|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_27_to_33_fptr        =  &ihevc_intra_pred_chroma_mode_27_to_33_ssse3;
   94|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_3_to_9_fptr          =  &ihevc_intra_pred_chroma_mode_3_to_9_ssse3;
   95|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_planar_fptr               =  &ihevc_intra_pred_chroma_planar_ssse3;
   96|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_ver_fptr                  =  &ihevc_intra_pred_chroma_ver_ssse3;
   97|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_11_to_17_fptr        =  &ihevc_intra_pred_chroma_mode_11_to_17_ssse3;
   98|    127|    ps_codec->s_func_selector.ihevc_intra_pred_chroma_mode_19_to_25_fptr        =  &ihevc_intra_pred_chroma_mode_19_to_25_ssse3;
   99|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_11_to_17_fptr          =  &ihevc_intra_pred_luma_mode_11_to_17_ssse3;
  100|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_19_to_25_fptr          =  &ihevc_intra_pred_luma_mode_19_to_25_ssse3;
  101|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_dc_fptr                     =  &ihevc_intra_pred_luma_dc_ssse3;
  102|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_horz_fptr                   =  &ihevc_intra_pred_luma_horz_ssse3;
  103|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode2_fptr                  =  &ihevc_intra_pred_luma_mode2_ssse3;
  104|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_18_34_fptr             =  &ihevc_intra_pred_luma_mode_18_34_ssse3;
  105|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_27_to_33_fptr          =  &ihevc_intra_pred_luma_mode_27_to_33_ssse3;
  106|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_mode_3_to_9_fptr            =  &ihevc_intra_pred_luma_mode_3_to_9_ssse3;
  107|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_planar_fptr                 =  &ihevc_intra_pred_luma_planar_ssse3;
  108|    127|    ps_codec->s_func_selector.ihevc_intra_pred_luma_ver_fptr                    =  &ihevc_intra_pred_luma_ver_ssse3;
  109|    127|    ps_codec->s_func_selector.ihevc_itrans_4x4_ttype1_fptr                      =  &ihevc_itrans_4x4_ttype1;
  110|    127|    ps_codec->s_func_selector.ihevc_itrans_4x4_fptr                             =  &ihevc_itrans_4x4;
  111|    127|    ps_codec->s_func_selector.ihevc_itrans_8x8_fptr                             =  &ihevc_itrans_8x8;
  112|    127|    ps_codec->s_func_selector.ihevc_itrans_16x16_fptr                           =  &ihevc_itrans_16x16;
  113|    127|    ps_codec->s_func_selector.ihevc_itrans_32x32_fptr                           =  &ihevc_itrans_32x32;
  114|    127|    ps_codec->s_func_selector.ihevc_itrans_recon_4x4_ttype1_fptr                =  &ihevc_itrans_recon_4x4_ttype1_ssse3;
  115|    127|    ps_codec->s_func_selector.ihevc_itrans_recon_4x4_fptr                       =  &ihevc_itrans_recon_4x4_ssse3;
  116|    127|    ps_codec->s_func_selector.ihevc_itrans_recon_8x8_fptr                       =  &ihevc_itrans_recon_8x8_ssse3;
  117|    127|    ps_codec->s_func_selector.ihevc_itrans_recon_16x16_fptr                     =  &ihevc_itrans_recon_16x16_ssse3;
  118|    127|    ps_codec->s_func_selector.ihevc_itrans_recon_32x32_fptr                     =  &ihevc_itrans_recon_32x32_ssse3;
  119|    127|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_4x4_fptr                =  &ihevc_chroma_itrans_recon_4x4;
  120|    127|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_8x8_fptr                =  &ihevc_chroma_itrans_recon_8x8;
  121|    127|    ps_codec->s_func_selector.ihevc_chroma_itrans_recon_16x16_fptr              =  &ihevc_chroma_itrans_recon_16x16;
  122|    127|    ps_codec->s_func_selector.ihevc_recon_4x4_ttype1_fptr                       =  &ihevc_recon_4x4_ttype1;
  123|    127|    ps_codec->s_func_selector.ihevc_recon_4x4_fptr                              =  &ihevc_recon_4x4;
  124|    127|    ps_codec->s_func_selector.ihevc_recon_8x8_fptr                              =  &ihevc_recon_8x8;
  125|    127|    ps_codec->s_func_selector.ihevc_recon_16x16_fptr                            =  &ihevc_recon_16x16;
  126|    127|    ps_codec->s_func_selector.ihevc_recon_32x32_fptr                            =  &ihevc_recon_32x32;
  127|    127|    ps_codec->s_func_selector.ihevc_chroma_recon_4x4_fptr                       =  &ihevc_chroma_recon_4x4;
  128|    127|    ps_codec->s_func_selector.ihevc_chroma_recon_8x8_fptr                       =  &ihevc_chroma_recon_8x8;
  129|    127|    ps_codec->s_func_selector.ihevc_chroma_recon_16x16_fptr                     =  &ihevc_chroma_recon_16x16;
  130|    127|    ps_codec->s_func_selector.ihevc_memcpy_mul_8_fptr                           =  &ihevc_memcpy_mul_8;
  131|    127|    ps_codec->s_func_selector.ihevc_memcpy_fptr                                 =  &ihevc_memcpy;
  132|    127|    ps_codec->s_func_selector.ihevc_memset_mul_8_fptr                           =  &ihevc_memset_mul_8;
  133|    127|    ps_codec->s_func_selector.ihevc_memset_fptr                                 =  &ihevc_memset;
  134|    127|    ps_codec->s_func_selector.ihevc_memset_16bit_mul_8_fptr                     =  &ihevc_memset_16bit_mul_8;
  135|    127|    ps_codec->s_func_selector.ihevc_memset_16bit_fptr                           =  &ihevc_memset_16bit;
  136|    127|    ps_codec->s_func_selector.ihevc_pad_left_luma_fptr                          =  &ihevc_pad_left_luma;
  137|    127|    ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr                        =  &ihevc_pad_left_chroma;
  138|    127|    ps_codec->s_func_selector.ihevc_pad_right_luma_fptr                         =  &ihevc_pad_right_luma;
  139|    127|    ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr                       =  &ihevc_pad_right_chroma;
  140|    127|    ps_codec->s_func_selector.ihevc_weighted_pred_bi_fptr                       =  &ihevc_weighted_pred_bi_ssse3;
  141|    127|    ps_codec->s_func_selector.ihevc_weighted_pred_bi_default_fptr               =  &ihevc_weighted_pred_bi_default_ssse3;
  142|    127|    ps_codec->s_func_selector.ihevc_weighted_pred_uni_fptr                      =  &ihevc_weighted_pred_uni_ssse3;
  143|    127|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_fptr                =  &ihevc_weighted_pred_chroma_bi_ssse3;
  144|    127|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_bi_default_fptr        =  &ihevc_weighted_pred_chroma_bi_default_ssse3;
  145|    127|    ps_codec->s_func_selector.ihevc_weighted_pred_chroma_uni_fptr               =  &ihevc_weighted_pred_chroma_uni_ssse3;
  146|    127|    ps_codec->s_func_selector.ihevc_sao_band_offset_luma_fptr                   =  &ihevc_sao_band_offset_luma_ssse3;
  147|    127|    ps_codec->s_func_selector.ihevc_sao_band_offset_chroma_fptr                 =  &ihevc_sao_band_offset_chroma_ssse3;
  148|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_fptr                 =  &ihevc_sao_edge_offset_class0_ssse3;
  149|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class0_chroma_fptr          =  &ihevc_sao_edge_offset_class0_chroma_ssse3;
  150|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_fptr                 =  &ihevc_sao_edge_offset_class1_ssse3;
  151|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class1_chroma_fptr          =  &ihevc_sao_edge_offset_class1_chroma_ssse3;
  152|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_fptr                 =  &ihevc_sao_edge_offset_class2_ssse3;
  153|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class2_chroma_fptr          =  &ihevc_sao_edge_offset_class2_chroma_ssse3;
  154|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_fptr                 =  &ihevc_sao_edge_offset_class3_ssse3;
  155|    127|    ps_codec->s_func_selector.ihevc_sao_edge_offset_class3_chroma_fptr          =  &ihevc_sao_edge_offset_class3_chroma_ssse3;
  156|    127|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgba8888_fptr            =  &ihevcd_fmt_conv_420sp_to_rgba8888;
  157|    127|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_rgb565_fptr              =  &ihevcd_fmt_conv_420sp_to_rgb565;
  158|    127|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420sp_fptr               =  &ihevcd_fmt_conv_420sp_to_420sp;
  159|    127|    ps_codec->s_func_selector.ihevcd_fmt_conv_420sp_to_420p_fptr                =  &ihevcd_fmt_conv_420sp_to_420p;
  160|    127|    ps_codec->s_func_selector.ihevcd_itrans_recon_dc_luma_fptr                  =  &ihevcd_itrans_recon_dc_luma_ssse3;
  161|    127|    ps_codec->s_func_selector.ihevcd_itrans_recon_dc_chroma_fptr                =  &ihevcd_itrans_recon_dc_chroma_ssse3;
  162|    127|}

ihevcd_itrans_recon_dc_luma_sse42:
   49|  24.5k|{
   50|  24.5k|    __m128i m_temp_reg_0;
   51|  24.5k|    __m128i m_temp_reg_1;
   52|  24.5k|    __m128i m_temp_reg_2;
   53|  24.5k|    __m128i m_temp_reg_3;
   54|  24.5k|    __m128i m_temp_reg_4;
   55|  24.5k|    __m128i m_temp_reg_5;
   56|  24.5k|    __m128i m_temp_reg_6;
   57|  24.5k|    __m128i m_temp_reg_7;
   58|  24.5k|    __m128i m_temp_reg_8;
   59|  24.5k|    __m128i m_temp_reg_9;
   60|  24.5k|    __m128i m_temp_reg_10;
   61|  24.5k|    __m128i m_temp_reg_11;
   62|  24.5k|    __m128i m_temp_reg_12;
   63|  24.5k|    __m128i m_temp_reg_13;
   64|  24.5k|    __m128i m_temp_reg_14;
   65|  24.5k|    __m128i m_temp_reg_15;
   66|  24.5k|    __m128i m_temp_reg_20, zero_8x16b;
   67|  24.5k|    __m128i *pi4_dst = (__m128i *)pu1_dst;
   68|       |
   69|       |
   70|       |    //WORD32 row,col;
   71|  24.5k|    WORD32 add, shift;
   72|  24.5k|    WORD32 dc_value, quant_out;
   73|  24.5k|    WORD32 trans_size;
   74|       |
   75|       |
   76|       |
   77|       |
   78|  24.5k|    trans_size = (1 << log2_trans_size);
   79|       |
   80|  24.5k|    quant_out = i2_coeff_value;
   81|       |
   82|  24.5k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  24.5k|#define IT_SHIFT_STAGE_1 7
  ------------------
   83|  24.5k|    add = 1 << (shift - 1);
   84|  24.5k|    dc_value = CLIP_S16((quant_out * 64 + add) >> shift);
  ------------------
  |  |   53|  24.5k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  24.5k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 24.5k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 24.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|  24.5k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  24.5k|#define IT_SHIFT_STAGE_2 12
  ------------------
   86|  24.5k|    add = 1 << (shift - 1);
   87|  24.5k|    dc_value = CLIP_S16((dc_value * 64 + add) >> shift);
  ------------------
  |  |   53|  24.5k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  24.5k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 24.5k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 24.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|       |
   89|       |    /*Replicate the DC value within 16 bits in 128 bit register*/
   90|  24.5k|    m_temp_reg_20 = _mm_set1_epi16(dc_value);
   91|  24.5k|    zero_8x16b = _mm_setzero_si128();
   92|       |
   93|  24.5k|    if(trans_size == 4)
  ------------------
  |  Branch (93:8): [True: 125, False: 24.3k]
  ------------------
   94|    125|    {
   95|    125|        WORD32 *pi4_dst = (WORD32 *)pu1_dst;
   96|       |
   97|    125|        m_temp_reg_0 = _mm_loadl_epi64((__m128i *)(pu1_pred));
   98|    125|        m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_pred + pred_strd));
   99|    125|        m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_pred + 2 * pred_strd));
  100|    125|        m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_pred + 3 * pred_strd));
  101|       |
  102|    125|        m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_0, m_temp_reg_1);
  103|    125|        m_temp_reg_5 = _mm_unpacklo_epi32(m_temp_reg_2, m_temp_reg_3);
  104|       |
  105|    125|        m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, zero_8x16b);
  106|    125|        m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, zero_8x16b);
  107|       |
  108|    125|        m_temp_reg_6 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  109|    125|        m_temp_reg_7 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  110|       |
  111|    125|        m_temp_reg_8 = _mm_packus_epi16(m_temp_reg_6, m_temp_reg_7);
  112|       |
  113|       |
  114|    125|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_8);
  115|    125|        m_temp_reg_1 = _mm_srli_si128(m_temp_reg_8, 4);
  116|    125|        m_temp_reg_2 = _mm_srli_si128(m_temp_reg_8, 8);
  117|    125|        m_temp_reg_3 = _mm_srli_si128(m_temp_reg_8, 12);
  118|    125|        pu1_dst += dst_strd;
  119|    125|        pi4_dst = (WORD32 *)(pu1_dst);
  120|       |
  121|    125|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_1);
  122|    125|        pu1_dst += dst_strd;
  123|    125|        pi4_dst = (WORD32 *)(pu1_dst);
  124|       |
  125|    125|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_2);
  126|    125|        pu1_dst += dst_strd;
  127|    125|        pi4_dst = (WORD32 *)(pu1_dst);
  128|       |
  129|    125|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_3);
  130|    125|    }
  131|  24.3k|    else
  132|  24.3k|    {
  133|  24.3k|        WORD32 i, j;
  134|       |
  135|   126k|        for(i = 1; i <= trans_size; i += 4)
  ------------------
  |  Branch (135:20): [True: 101k, False: 24.3k]
  ------------------
  136|   101k|        {
  137|   360k|            for(j = 1; j <= trans_size; j += 8)
  ------------------
  |  Branch (137:24): [True: 258k, False: 101k]
  ------------------
  138|   258k|            {
  139|       |
  140|   258k|                m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
  141|   258k|                m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_pred + pred_strd));
  142|   258k|                m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_pred + 2 * pred_strd));
  143|   258k|                m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_pred + 3 * pred_strd));
  144|       |
  145|       |
  146|   258k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_0, zero_8x16b);
  147|   258k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_1, zero_8x16b);
  148|   258k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_2, zero_8x16b);
  149|   258k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_3, zero_8x16b);
  150|       |
  151|   258k|                m_temp_reg_8 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  152|   258k|                m_temp_reg_9 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  153|   258k|                m_temp_reg_10 = _mm_add_epi16(m_temp_reg_6, m_temp_reg_20);
  154|   258k|                m_temp_reg_11 = _mm_add_epi16(m_temp_reg_7, m_temp_reg_20);
  155|       |
  156|   258k|                pi4_dst = (__m128i *)(pu1_dst);
  157|       |
  158|   258k|                m_temp_reg_12 = _mm_packus_epi16(m_temp_reg_8, m_temp_reg_9);
  159|   258k|                _mm_storel_epi64(pi4_dst, m_temp_reg_12);
  160|       |
  161|   258k|                pi4_dst = (__m128i *)(pu1_dst + dst_strd);
  162|       |
  163|   258k|                m_temp_reg_13 = _mm_srli_si128(m_temp_reg_12, 8);
  164|   258k|                _mm_storel_epi64(pi4_dst, m_temp_reg_13);
  165|       |
  166|   258k|                pi4_dst = (__m128i *)(pu1_dst + 2 * dst_strd);
  167|       |
  168|   258k|                m_temp_reg_14 = _mm_packus_epi16(m_temp_reg_10, m_temp_reg_11);
  169|   258k|                _mm_storel_epi64(pi4_dst, m_temp_reg_14);
  170|       |
  171|   258k|                pi4_dst = (__m128i *)(pu1_dst + 3 * dst_strd);
  172|       |
  173|   258k|                m_temp_reg_15 = _mm_srli_si128(m_temp_reg_14, 8);
  174|   258k|                _mm_storel_epi64(pi4_dst, m_temp_reg_15);
  175|       |
  176|   258k|                pu1_pred += 8;
  177|   258k|                pu1_dst += 8;
  178|   258k|            }
  179|   101k|            pu1_pred += 4 * pred_strd - trans_size;
  180|   101k|            pu1_dst += 4 * dst_strd - trans_size;
  181|   101k|        }
  182|  24.3k|    }
  183|       |
  184|       |
  185|  24.5k|}
ihevcd_itrans_recon_dc_chroma_sse42:
  189|  14.6k|{
  190|  14.6k|    __m128i m_temp_reg_0;
  191|  14.6k|    __m128i m_temp_reg_1;
  192|  14.6k|    __m128i m_temp_reg_2;
  193|  14.6k|    __m128i m_temp_reg_3;
  194|  14.6k|    __m128i m_temp_reg_4;
  195|  14.6k|    __m128i m_temp_reg_5;
  196|  14.6k|    __m128i m_temp_reg_6;
  197|  14.6k|    __m128i m_temp_reg_7;
  198|  14.6k|    __m128i m_temp_reg_8;
  199|  14.6k|    __m128i m_temp_reg_9;
  200|  14.6k|    __m128i m_temp_reg_10;
  201|  14.6k|    __m128i m_temp_reg_11;
  202|  14.6k|    __m128i m_temp_reg_12;
  203|  14.6k|    __m128i m_temp_reg_13;
  204|  14.6k|    __m128i m_temp_reg_14;
  205|  14.6k|    __m128i m_temp_reg_15;
  206|  14.6k|    __m128i m_temp_reg_20, zero_8x16b;
  207|  14.6k|    __m128i *pi4_dst = (__m128i *)pu1_dst;
  208|       |
  209|       |
  210|       |    //WORD32 row,col;
  211|  14.6k|    WORD32 add, shift;
  212|  14.6k|    WORD32 dc_value, quant_out;
  213|  14.6k|    WORD32 trans_size;
  214|       |
  215|       |
  216|  14.6k|    WORD32 shuffle_mask_4x4 = 0x06040200;
  217|  14.6k|    WORD32 unchanged_mask_4x4 = 0x07050301;
  218|  14.6k|    LWORD64 shuffle_mask = 0x0E0C0A0806040200LL;
  219|  14.6k|    LWORD64 unchanged_mask = 0x0F0D0B0907050301LL;
  220|       |
  221|  14.6k|    trans_size = (1 << log2_trans_size);
  222|       |
  223|  14.6k|    quant_out = i2_coeff_value;
  224|       |
  225|  14.6k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  14.6k|#define IT_SHIFT_STAGE_1 7
  ------------------
  226|  14.6k|    add = 1 << (shift - 1);
  227|  14.6k|    dc_value = CLIP_S16((quant_out * 64 + add) >> shift);
  ------------------
  |  |   53|  14.6k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  14.6k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 14.6k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 14.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  228|  14.6k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  14.6k|#define IT_SHIFT_STAGE_2 12
  ------------------
  229|  14.6k|    add = 1 << (shift - 1);
  230|  14.6k|    dc_value = CLIP_S16((dc_value * 64 + add) >> shift);
  ------------------
  |  |   53|  14.6k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  14.6k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 14.6k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 14.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|       |    /*Replicate the DC value within 16 bits in 128 bit register*/
  233|  14.6k|    m_temp_reg_20 = _mm_set1_epi16(dc_value);
  234|  14.6k|    zero_8x16b = _mm_setzero_si128();
  235|       |
  236|  14.6k|    if(trans_size == 4)
  ------------------
  |  Branch (236:8): [True: 8.89k, False: 5.79k]
  ------------------
  237|  8.89k|    {
  238|  8.89k|        __m128i chroma_shuffle_mask_16x8b;
  239|  8.89k|        __m128i chroma_unchanged_mask_16x8b;
  240|  8.89k|        chroma_shuffle_mask_16x8b = _mm_cvtsi32_si128(shuffle_mask_4x4);
  241|  8.89k|        chroma_unchanged_mask_16x8b = _mm_cvtsi32_si128(unchanged_mask_4x4);
  242|       |
  243|       |        /*Load the prediction data*/
  244|  8.89k|        m_temp_reg_0 = _mm_loadl_epi64((__m128i *)(pu1_pred));
  245|  8.89k|        m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_pred + pred_strd));
  246|  8.89k|        m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_pred + 2 * pred_strd));
  247|  8.89k|        m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_pred + 3 * pred_strd));
  248|       |
  249|  8.89k|        m_temp_reg_10  = _mm_shuffle_epi8(m_temp_reg_0, chroma_shuffle_mask_16x8b);
  250|  8.89k|        m_temp_reg_11  = _mm_shuffle_epi8(m_temp_reg_1, chroma_shuffle_mask_16x8b);
  251|  8.89k|        m_temp_reg_12  = _mm_shuffle_epi8(m_temp_reg_2, chroma_shuffle_mask_16x8b);
  252|  8.89k|        m_temp_reg_13  = _mm_shuffle_epi8(m_temp_reg_3, chroma_shuffle_mask_16x8b);
  253|       |
  254|  8.89k|        m_temp_reg_14 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
  255|  8.89k|        m_temp_reg_15 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
  256|       |
  257|  8.89k|        m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_14, zero_8x16b);
  258|  8.89k|        m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_15, zero_8x16b);
  259|       |
  260|  8.89k|        m_temp_reg_6 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  261|  8.89k|        m_temp_reg_7 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  262|       |
  263|       |        /*Load the recon data to make sure that 'v' is not corrupted when 'u' is called and vice versa*/
  264|  8.89k|        m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_dst);
  265|  8.89k|        m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
  266|  8.89k|        m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_dst + 2 * dst_strd));
  267|  8.89k|        m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_dst + 3 * dst_strd));
  268|       |
  269|  8.89k|        m_temp_reg_0  = _mm_shuffle_epi8(m_temp_reg_0, chroma_unchanged_mask_16x8b);
  270|  8.89k|        m_temp_reg_1  = _mm_shuffle_epi8(m_temp_reg_1, chroma_unchanged_mask_16x8b);
  271|  8.89k|        m_temp_reg_2  = _mm_shuffle_epi8(m_temp_reg_2, chroma_unchanged_mask_16x8b);
  272|  8.89k|        m_temp_reg_3  = _mm_shuffle_epi8(m_temp_reg_3, chroma_unchanged_mask_16x8b);
  273|       |
  274|       |
  275|  8.89k|        m_temp_reg_8 = _mm_packus_epi16(m_temp_reg_6, m_temp_reg_7);
  276|  8.89k|        m_temp_reg_9 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_0);
  277|  8.89k|        m_temp_reg_8 = _mm_srli_si128(m_temp_reg_8, 4);
  278|  8.89k|        m_temp_reg_10 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_1);
  279|  8.89k|        m_temp_reg_8 = _mm_srli_si128(m_temp_reg_8, 4);
  280|  8.89k|        m_temp_reg_11 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_2);
  281|  8.89k|        m_temp_reg_8 = _mm_srli_si128(m_temp_reg_8, 4);
  282|  8.89k|        m_temp_reg_12 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_3);
  283|       |
  284|       |        /*Store the result in the destination*/
  285|  8.89k|        _mm_storel_epi64(pi4_dst, m_temp_reg_9);
  286|  8.89k|        pu1_dst += dst_strd;
  287|  8.89k|        pi4_dst = (__m128i *)(pu1_dst);
  288|       |
  289|       |
  290|  8.89k|        _mm_storel_epi64(pi4_dst, m_temp_reg_10);
  291|  8.89k|        pu1_dst += dst_strd;
  292|  8.89k|        pi4_dst = (__m128i *)(pu1_dst);
  293|       |
  294|  8.89k|        _mm_storel_epi64(pi4_dst, m_temp_reg_11);
  295|  8.89k|        pu1_dst += dst_strd;
  296|  8.89k|        pi4_dst = (__m128i *)(pu1_dst);
  297|       |
  298|  8.89k|        _mm_storel_epi64(pi4_dst, m_temp_reg_12);
  299|  8.89k|    }
  300|  5.79k|    else
  301|  5.79k|    {
  302|  5.79k|        WORD32 i, j;
  303|  5.79k|        __m128i chroma_shuffle_mask_16x8b;
  304|  5.79k|        __m128i chroma_unchanged_mask_16x8b;
  305|  5.79k|        chroma_shuffle_mask_16x8b = _mm_loadl_epi64((__m128i *)(&shuffle_mask));
  306|  5.79k|        chroma_unchanged_mask_16x8b =
  307|  5.79k|                        _mm_loadl_epi64((__m128i *)(&unchanged_mask));
  308|       |
  309|  19.2k|        for(i = 0; i < trans_size; i += 4)
  ------------------
  |  Branch (309:20): [True: 13.4k, False: 5.79k]
  ------------------
  310|  13.4k|        {
  311|  30.7k|            for(j = 0; j < trans_size; j += 8)
  ------------------
  |  Branch (311:24): [True: 17.2k, False: 13.4k]
  ------------------
  312|  17.2k|            {
  313|       |
  314|  17.2k|                m_temp_reg_0 = _mm_loadu_si128((__m128i *)pu1_pred);
  315|  17.2k|                m_temp_reg_1 = _mm_loadu_si128((__m128i *)(pu1_pred + pred_strd));
  316|  17.2k|                m_temp_reg_2 = _mm_loadu_si128((__m128i *)(pu1_pred + 2 * pred_strd));
  317|  17.2k|                m_temp_reg_3 = _mm_loadu_si128((__m128i *)(pu1_pred + 3 * pred_strd));
  318|       |
  319|       |                /*Retain only one chroma component*/
  320|  17.2k|                m_temp_reg_4  = _mm_shuffle_epi8(m_temp_reg_0, chroma_shuffle_mask_16x8b);
  321|  17.2k|                m_temp_reg_5  = _mm_shuffle_epi8(m_temp_reg_1, chroma_shuffle_mask_16x8b);
  322|  17.2k|                m_temp_reg_6  = _mm_shuffle_epi8(m_temp_reg_2, chroma_shuffle_mask_16x8b);
  323|  17.2k|                m_temp_reg_7  = _mm_shuffle_epi8(m_temp_reg_3, chroma_shuffle_mask_16x8b);
  324|       |
  325|  17.2k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, zero_8x16b);
  326|  17.2k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, zero_8x16b);
  327|  17.2k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_6, zero_8x16b);
  328|  17.2k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_7, zero_8x16b);
  329|       |
  330|  17.2k|                m_temp_reg_8 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  331|  17.2k|                m_temp_reg_9 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  332|  17.2k|                m_temp_reg_10 = _mm_add_epi16(m_temp_reg_6, m_temp_reg_20);
  333|  17.2k|                m_temp_reg_11 = _mm_add_epi16(m_temp_reg_7, m_temp_reg_20);
  334|       |
  335|       |
  336|       |                /*Load the recon data to make sure that 'v' is not corrupted when 'u' is called and vice versa*/
  337|  17.2k|                m_temp_reg_0 = _mm_loadu_si128((__m128i *)pu1_dst);
  338|  17.2k|                m_temp_reg_1 = _mm_loadu_si128((__m128i *)(pu1_dst + dst_strd));
  339|  17.2k|                m_temp_reg_2 = _mm_loadu_si128((__m128i *)(pu1_dst + 2 * dst_strd));
  340|  17.2k|                m_temp_reg_3 = _mm_loadu_si128((__m128i *)(pu1_dst + 3 * dst_strd));
  341|       |
  342|  17.2k|                m_temp_reg_0  = _mm_shuffle_epi8(m_temp_reg_0, chroma_unchanged_mask_16x8b);
  343|  17.2k|                m_temp_reg_1  = _mm_shuffle_epi8(m_temp_reg_1, chroma_unchanged_mask_16x8b);
  344|  17.2k|                m_temp_reg_2  = _mm_shuffle_epi8(m_temp_reg_2, chroma_unchanged_mask_16x8b);
  345|  17.2k|                m_temp_reg_3  = _mm_shuffle_epi8(m_temp_reg_3, chroma_unchanged_mask_16x8b);
  346|       |
  347|  17.2k|                m_temp_reg_4 = _mm_packus_epi16(m_temp_reg_8, m_temp_reg_9);
  348|  17.2k|                m_temp_reg_5 = _mm_packus_epi16(m_temp_reg_10, m_temp_reg_11);
  349|       |
  350|  17.2k|                m_temp_reg_12 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_0);
  351|  17.2k|                m_temp_reg_4 = _mm_srli_si128(m_temp_reg_4, 8);
  352|  17.2k|                m_temp_reg_13 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_1);
  353|       |
  354|  17.2k|                m_temp_reg_14 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_2);
  355|  17.2k|                m_temp_reg_5 = _mm_srli_si128(m_temp_reg_5, 8);
  356|  17.2k|                m_temp_reg_15 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_3);
  357|       |
  358|       |                /*Store the result in the destination*/
  359|  17.2k|                pi4_dst = (__m128i *)(pu1_dst);
  360|       |
  361|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_12);
  362|  17.2k|                m_temp_reg_8 = _mm_srli_si128(m_temp_reg_12, 8);
  363|       |
  364|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + 8);
  365|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_8);
  366|       |
  367|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + dst_strd);
  368|       |
  369|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_13);
  370|  17.2k|                m_temp_reg_9 = _mm_srli_si128(m_temp_reg_13, 8);
  371|       |
  372|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + dst_strd + 8);
  373|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_9);
  374|       |
  375|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + 2 * dst_strd);
  376|       |
  377|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_14);
  378|  17.2k|                m_temp_reg_10 = _mm_srli_si128(m_temp_reg_14, 8);
  379|       |
  380|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + 2 * dst_strd + 8);
  381|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_10);
  382|       |
  383|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + 3 * dst_strd);
  384|       |
  385|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_15);
  386|  17.2k|                m_temp_reg_11 = _mm_srli_si128(m_temp_reg_15, 8);
  387|       |
  388|  17.2k|                pi4_dst = (__m128i *)(pu1_dst + 3 * dst_strd + 8);
  389|  17.2k|                _mm_storel_epi64(pi4_dst, m_temp_reg_11);
  390|       |
  391|  17.2k|                pu1_pred += 16;
  392|  17.2k|                pu1_dst += 16;
  393|  17.2k|            }
  394|       |
  395|  13.4k|            pu1_pred += 4 * pred_strd - 2 * trans_size;
  396|  13.4k|            pu1_dst += 4 * dst_strd - 2 * trans_size;
  397|  13.4k|        }
  398|  5.79k|    }
  399|       |
  400|       |
  401|  14.6k|}

ihevcd_itrans_recon_dc_luma_ssse3:
   51|  46.3k|{
   52|  46.3k|    __m128i m_temp_reg_0;
   53|  46.3k|    __m128i m_temp_reg_1;
   54|  46.3k|    __m128i m_temp_reg_2;
   55|  46.3k|    __m128i m_temp_reg_3;
   56|  46.3k|    __m128i m_temp_reg_4;
   57|  46.3k|    __m128i m_temp_reg_5;
   58|  46.3k|    __m128i m_temp_reg_6;
   59|  46.3k|    __m128i m_temp_reg_7;
   60|  46.3k|    __m128i m_temp_reg_8;
   61|  46.3k|    __m128i m_temp_reg_9;
   62|  46.3k|    __m128i m_temp_reg_10;
   63|  46.3k|    __m128i m_temp_reg_11;
   64|  46.3k|    __m128i m_temp_reg_12;
   65|  46.3k|    __m128i m_temp_reg_13;
   66|  46.3k|    __m128i m_temp_reg_14;
   67|  46.3k|    __m128i m_temp_reg_15;
   68|  46.3k|    __m128i m_temp_reg_20, zero_8x16b;
   69|  46.3k|    __m128i *pi4_dst = (__m128i *)pu1_dst;
   70|       |
   71|       |
   72|       |
   73|  46.3k|    WORD32 add, shift;
   74|  46.3k|    WORD32 dc_value, quant_out;
   75|  46.3k|    WORD32 trans_size;
   76|       |
   77|       |
   78|       |
   79|  46.3k|    trans_size = (1 << log2_trans_size);
   80|       |
   81|  46.3k|    quant_out = i2_coeff_value;
   82|       |
   83|  46.3k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  46.3k|#define IT_SHIFT_STAGE_1 7
  ------------------
   84|  46.3k|    add = 1 << (shift - 1);
   85|  46.3k|    dc_value = CLIP_S16((quant_out * 64 + add) >> shift);
  ------------------
  |  |   53|  46.3k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  46.3k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 46.3k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 46.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|  46.3k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  46.3k|#define IT_SHIFT_STAGE_2 12
  ------------------
   87|  46.3k|    add = 1 << (shift - 1);
   88|  46.3k|    dc_value = CLIP_S16((dc_value * 64 + add) >> shift);
  ------------------
  |  |   53|  46.3k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  46.3k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 46.3k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 46.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|       |
   90|       |    /*Replicate the DC value within 16 bits in 128 bit register*/
   91|  46.3k|    m_temp_reg_20 = _mm_set1_epi16(dc_value);
   92|  46.3k|    zero_8x16b = _mm_setzero_si128();
   93|       |
   94|  46.3k|    if(trans_size == 4)
  ------------------
  |  Branch (94:8): [True: 92, False: 46.3k]
  ------------------
   95|     92|    {
   96|     92|        WORD32 *pi4_dst = (WORD32 *)pu1_dst;
   97|       |
   98|     92|        m_temp_reg_0 = _mm_loadl_epi64((__m128i *)(pu1_pred));
   99|     92|        m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_pred + pred_strd));
  100|     92|        m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_pred + 2 * pred_strd));
  101|     92|        m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_pred + 3 * pred_strd));
  102|       |
  103|     92|        m_temp_reg_4 = _mm_unpacklo_epi32(m_temp_reg_0, m_temp_reg_1);
  104|     92|        m_temp_reg_5 = _mm_unpacklo_epi32(m_temp_reg_2, m_temp_reg_3);
  105|       |
  106|     92|        m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, zero_8x16b);
  107|     92|        m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, zero_8x16b);
  108|       |
  109|     92|        m_temp_reg_6 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  110|     92|        m_temp_reg_7 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  111|       |
  112|     92|        m_temp_reg_8 = _mm_packus_epi16(m_temp_reg_6, m_temp_reg_7);
  113|       |
  114|       |
  115|     92|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_8);
  116|     92|        m_temp_reg_1 = _mm_srli_si128(m_temp_reg_8, 4);
  117|     92|        m_temp_reg_2 = _mm_srli_si128(m_temp_reg_8, 8);
  118|     92|        m_temp_reg_3 = _mm_srli_si128(m_temp_reg_8, 12);
  119|     92|        pu1_dst += dst_strd;
  120|     92|        pi4_dst = (WORD32 *)(pu1_dst);
  121|       |
  122|     92|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_1);
  123|     92|        pu1_dst += dst_strd;
  124|     92|        pi4_dst = (WORD32 *)(pu1_dst);
  125|       |
  126|     92|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_2);
  127|     92|        pu1_dst += dst_strd;
  128|     92|        pi4_dst = (WORD32 *)(pu1_dst);
  129|       |
  130|     92|        *pi4_dst = _mm_cvtsi128_si32(m_temp_reg_3);
  131|     92|    }
  132|  46.3k|    else
  133|  46.3k|    {
  134|  46.3k|        WORD32 i, j;
  135|       |
  136|   223k|        for(i = 1; i <= trans_size; i += 4)
  ------------------
  |  Branch (136:20): [True: 177k, False: 46.3k]
  ------------------
  137|   177k|        {
  138|   577k|            for(j = 1; j <= trans_size; j += 8)
  ------------------
  |  Branch (138:24): [True: 400k, False: 177k]
  ------------------
  139|   400k|            {
  140|       |
  141|   400k|                m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_pred);
  142|   400k|                m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_pred + pred_strd));
  143|   400k|                m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_pred + 2 * pred_strd));
  144|   400k|                m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_pred + 3 * pred_strd));
  145|       |
  146|       |
  147|   400k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_0, zero_8x16b);
  148|   400k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_1, zero_8x16b);
  149|   400k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_2, zero_8x16b);
  150|   400k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_3, zero_8x16b);
  151|       |
  152|   400k|                m_temp_reg_8 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  153|   400k|                m_temp_reg_9 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  154|   400k|                m_temp_reg_10 = _mm_add_epi16(m_temp_reg_6, m_temp_reg_20);
  155|   400k|                m_temp_reg_11 = _mm_add_epi16(m_temp_reg_7, m_temp_reg_20);
  156|       |
  157|   400k|                pi4_dst = (__m128i *)(pu1_dst);
  158|       |
  159|   400k|                m_temp_reg_12 = _mm_packus_epi16(m_temp_reg_8, m_temp_reg_9);
  160|   400k|                _mm_storel_epi64(pi4_dst, m_temp_reg_12);
  161|       |
  162|   400k|                pi4_dst = (__m128i *)(pu1_dst + dst_strd);
  163|       |
  164|   400k|                m_temp_reg_13 = _mm_srli_si128(m_temp_reg_12, 8);
  165|   400k|                _mm_storel_epi64(pi4_dst, m_temp_reg_13);
  166|       |
  167|   400k|                pi4_dst = (__m128i *)(pu1_dst + 2 * dst_strd);
  168|       |
  169|   400k|                m_temp_reg_14 = _mm_packus_epi16(m_temp_reg_10, m_temp_reg_11);
  170|   400k|                _mm_storel_epi64(pi4_dst, m_temp_reg_14);
  171|       |
  172|   400k|                pi4_dst = (__m128i *)(pu1_dst + 3 * dst_strd);
  173|       |
  174|   400k|                m_temp_reg_15 = _mm_srli_si128(m_temp_reg_14, 8);
  175|   400k|                _mm_storel_epi64(pi4_dst, m_temp_reg_15);
  176|       |
  177|   400k|                pu1_pred += 8;
  178|   400k|                pu1_dst += 8;
  179|   400k|            }
  180|   177k|            pu1_pred += 4 * pred_strd - trans_size;
  181|   177k|            pu1_dst += 4 * dst_strd - trans_size;
  182|   177k|        }
  183|  46.3k|    }
  184|       |
  185|       |
  186|  46.3k|}
ihevcd_itrans_recon_dc_chroma_ssse3:
  190|  38.0k|{
  191|  38.0k|    __m128i m_temp_reg_0;
  192|  38.0k|    __m128i m_temp_reg_1;
  193|  38.0k|    __m128i m_temp_reg_2;
  194|  38.0k|    __m128i m_temp_reg_3;
  195|  38.0k|    __m128i m_temp_reg_4;
  196|  38.0k|    __m128i m_temp_reg_5;
  197|  38.0k|    __m128i m_temp_reg_6;
  198|  38.0k|    __m128i m_temp_reg_7;
  199|  38.0k|    __m128i m_temp_reg_8;
  200|  38.0k|    __m128i m_temp_reg_9;
  201|  38.0k|    __m128i m_temp_reg_10;
  202|  38.0k|    __m128i m_temp_reg_11;
  203|  38.0k|    __m128i m_temp_reg_12;
  204|  38.0k|    __m128i m_temp_reg_13;
  205|  38.0k|    __m128i m_temp_reg_14;
  206|  38.0k|    __m128i m_temp_reg_15;
  207|  38.0k|    __m128i m_temp_reg_20, zero_8x16b;
  208|  38.0k|    __m128i *pi4_dst = (__m128i *)pu1_dst;
  209|       |
  210|       |
  211|  38.0k|    WORD32 add, shift;
  212|  38.0k|    WORD32 dc_value, quant_out;
  213|  38.0k|    WORD32 trans_size;
  214|       |
  215|       |
  216|  38.0k|    WORD32 shuffle_mask_4x4 = 0x06040200;
  217|  38.0k|    WORD32 unchanged_mask_4x4 = 0x07050301;
  218|  38.0k|    LWORD64 shuffle_mask = 0x0E0C0A0806040200LL;
  219|  38.0k|    LWORD64 unchanged_mask = 0x0F0D0B0907050301LL;
  220|       |
  221|  38.0k|    trans_size = (1 << log2_trans_size);
  222|       |
  223|  38.0k|    quant_out = i2_coeff_value;
  224|       |
  225|  38.0k|    shift = IT_SHIFT_STAGE_1;
  ------------------
  |  |  425|  38.0k|#define IT_SHIFT_STAGE_1 7
  ------------------
  226|  38.0k|    add = 1 << (shift - 1);
  227|  38.0k|    dc_value = CLIP_S16((quant_out * 64 + add) >> shift);
  ------------------
  |  |   53|  38.0k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  38.0k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 38.0k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 38.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  228|  38.0k|    shift = IT_SHIFT_STAGE_2;
  ------------------
  |  |  426|  38.0k|#define IT_SHIFT_STAGE_2 12
  ------------------
  229|  38.0k|    add = 1 << (shift - 1);
  230|  38.0k|    dc_value = CLIP_S16((dc_value * 64 + add) >> shift);
  ------------------
  |  |   53|  38.0k|#define CLIP_S16(x) CLIP3((x), -32768,   32767);
  |  |  ------------------
  |  |  |  |   40|  38.0k|#define CLIP3(x, min, max) (((x) > (max)) ? (max) :(((x) < (min))? (min):(x)))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (40:29): [True: 0, False: 38.0k]
  |  |  |  |  |  Branch (40:53): [True: 0, False: 38.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|       |    /*Replicate the DC value within 16 bits in 128 bit register*/
  233|  38.0k|    m_temp_reg_20 = _mm_set1_epi16(dc_value);
  234|  38.0k|    zero_8x16b = _mm_setzero_si128();
  235|       |
  236|  38.0k|    if(trans_size == 4)
  ------------------
  |  Branch (236:8): [True: 9.56k, False: 28.4k]
  ------------------
  237|  9.56k|    {
  238|  9.56k|        __m128i chroma_shuffle_mask_16x8b;
  239|  9.56k|        __m128i chroma_unchanged_mask_16x8b;
  240|  9.56k|        chroma_shuffle_mask_16x8b = _mm_cvtsi32_si128(shuffle_mask_4x4);
  241|  9.56k|        chroma_unchanged_mask_16x8b = _mm_cvtsi32_si128(unchanged_mask_4x4);
  242|       |
  243|       |        /*Load the prediction data*/
  244|  9.56k|        m_temp_reg_0 = _mm_loadl_epi64((__m128i *)(pu1_pred));
  245|  9.56k|        m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_pred + pred_strd));
  246|  9.56k|        m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_pred + 2 * pred_strd));
  247|  9.56k|        m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_pred + 3 * pred_strd));
  248|       |
  249|  9.56k|        m_temp_reg_10  = _mm_shuffle_epi8(m_temp_reg_0, chroma_shuffle_mask_16x8b);
  250|  9.56k|        m_temp_reg_11  = _mm_shuffle_epi8(m_temp_reg_1, chroma_shuffle_mask_16x8b);
  251|  9.56k|        m_temp_reg_12  = _mm_shuffle_epi8(m_temp_reg_2, chroma_shuffle_mask_16x8b);
  252|  9.56k|        m_temp_reg_13  = _mm_shuffle_epi8(m_temp_reg_3, chroma_shuffle_mask_16x8b);
  253|       |
  254|  9.56k|        m_temp_reg_14 = _mm_unpacklo_epi32(m_temp_reg_10, m_temp_reg_11);
  255|  9.56k|        m_temp_reg_15 = _mm_unpacklo_epi32(m_temp_reg_12, m_temp_reg_13);
  256|       |
  257|  9.56k|        m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_14, zero_8x16b);
  258|  9.56k|        m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_15, zero_8x16b);
  259|       |
  260|  9.56k|        m_temp_reg_6 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  261|  9.56k|        m_temp_reg_7 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  262|       |
  263|       |        /*Load the recon data to make sure that 'v' is not corrupted when 'u' is called and vice versa*/
  264|  9.56k|        m_temp_reg_0 = _mm_loadl_epi64((__m128i *)pu1_dst);
  265|  9.56k|        m_temp_reg_1 = _mm_loadl_epi64((__m128i *)(pu1_dst + dst_strd));
  266|  9.56k|        m_temp_reg_2 = _mm_loadl_epi64((__m128i *)(pu1_dst + 2 * dst_strd));
  267|  9.56k|        m_temp_reg_3 = _mm_loadl_epi64((__m128i *)(pu1_dst + 3 * dst_strd));
  268|       |
  269|  9.56k|        m_temp_reg_0  = _mm_shuffle_epi8(m_temp_reg_0, chroma_unchanged_mask_16x8b);
  270|  9.56k|        m_temp_reg_1  = _mm_shuffle_epi8(m_temp_reg_1, chroma_unchanged_mask_16x8b);
  271|  9.56k|        m_temp_reg_2  = _mm_shuffle_epi8(m_temp_reg_2, chroma_unchanged_mask_16x8b);
  272|  9.56k|        m_temp_reg_3  = _mm_shuffle_epi8(m_temp_reg_3, chroma_unchanged_mask_16x8b);
  273|       |
  274|       |
  275|  9.56k|        m_temp_reg_8 = _mm_packus_epi16(m_temp_reg_6, m_temp_reg_7);
  276|  9.56k|        m_temp_reg_9 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_0);
  277|  9.56k|        m_temp_reg_8 = _mm_srli_si128(m_temp_reg_8, 4);
  278|  9.56k|        m_temp_reg_10 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_1);
  279|  9.56k|        m_temp_reg_8 = _mm_srli_si128(m_temp_reg_8, 4);
  280|  9.56k|        m_temp_reg_11 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_2);
  281|  9.56k|        m_temp_reg_8 = _mm_srli_si128(m_temp_reg_8, 4);
  282|  9.56k|        m_temp_reg_12 = _mm_unpacklo_epi8(m_temp_reg_8, m_temp_reg_3);
  283|       |
  284|       |        /*Store the result in the destination*/
  285|  9.56k|        _mm_storel_epi64(pi4_dst, m_temp_reg_9);
  286|  9.56k|        pu1_dst += dst_strd;
  287|  9.56k|        pi4_dst = (__m128i *)(pu1_dst);
  288|       |
  289|       |
  290|  9.56k|        _mm_storel_epi64(pi4_dst, m_temp_reg_10);
  291|  9.56k|        pu1_dst += dst_strd;
  292|  9.56k|        pi4_dst = (__m128i *)(pu1_dst);
  293|       |
  294|  9.56k|        _mm_storel_epi64(pi4_dst, m_temp_reg_11);
  295|  9.56k|        pu1_dst += dst_strd;
  296|  9.56k|        pi4_dst = (__m128i *)(pu1_dst);
  297|       |
  298|  9.56k|        _mm_storel_epi64(pi4_dst, m_temp_reg_12);
  299|  9.56k|    }
  300|  28.4k|    else
  301|  28.4k|    {
  302|  28.4k|        WORD32 i, j;
  303|  28.4k|        __m128i chroma_shuffle_mask_16x8b;
  304|  28.4k|        __m128i chroma_unchanged_mask_16x8b;
  305|  28.4k|        chroma_shuffle_mask_16x8b = _mm_loadl_epi64((__m128i *)(&shuffle_mask));
  306|  28.4k|        chroma_unchanged_mask_16x8b =
  307|  28.4k|                        _mm_loadl_epi64((__m128i *)(&unchanged_mask));
  308|       |
  309|  97.1k|        for(i = 0; i < trans_size; i += 4)
  ------------------
  |  Branch (309:20): [True: 68.7k, False: 28.4k]
  ------------------
  310|  68.7k|        {
  311|   161k|            for(j = 0; j < trans_size; j += 8)
  ------------------
  |  Branch (311:24): [True: 92.4k, False: 68.7k]
  ------------------
  312|  92.4k|            {
  313|       |
  314|  92.4k|                m_temp_reg_0 = _mm_loadu_si128((__m128i *)pu1_pred);
  315|  92.4k|                m_temp_reg_1 = _mm_loadu_si128((__m128i *)(pu1_pred + pred_strd));
  316|  92.4k|                m_temp_reg_2 = _mm_loadu_si128((__m128i *)(pu1_pred + 2 * pred_strd));
  317|  92.4k|                m_temp_reg_3 = _mm_loadu_si128((__m128i *)(pu1_pred + 3 * pred_strd));
  318|       |
  319|       |                /*Retain only one chroma component*/
  320|  92.4k|                m_temp_reg_4  = _mm_shuffle_epi8(m_temp_reg_0, chroma_shuffle_mask_16x8b);
  321|  92.4k|                m_temp_reg_5  = _mm_shuffle_epi8(m_temp_reg_1, chroma_shuffle_mask_16x8b);
  322|  92.4k|                m_temp_reg_6  = _mm_shuffle_epi8(m_temp_reg_2, chroma_shuffle_mask_16x8b);
  323|  92.4k|                m_temp_reg_7  = _mm_shuffle_epi8(m_temp_reg_3, chroma_shuffle_mask_16x8b);
  324|       |
  325|  92.4k|                m_temp_reg_4 = _mm_unpacklo_epi8(m_temp_reg_4, zero_8x16b);
  326|  92.4k|                m_temp_reg_5 = _mm_unpacklo_epi8(m_temp_reg_5, zero_8x16b);
  327|  92.4k|                m_temp_reg_6 = _mm_unpacklo_epi8(m_temp_reg_6, zero_8x16b);
  328|  92.4k|                m_temp_reg_7 = _mm_unpacklo_epi8(m_temp_reg_7, zero_8x16b);
  329|       |
  330|  92.4k|                m_temp_reg_8 = _mm_add_epi16(m_temp_reg_4, m_temp_reg_20);
  331|  92.4k|                m_temp_reg_9 = _mm_add_epi16(m_temp_reg_5, m_temp_reg_20);
  332|  92.4k|                m_temp_reg_10 = _mm_add_epi16(m_temp_reg_6, m_temp_reg_20);
  333|  92.4k|                m_temp_reg_11 = _mm_add_epi16(m_temp_reg_7, m_temp_reg_20);
  334|       |
  335|       |
  336|       |                /*Load the recon data to make sure that 'v' is not corrupted when 'u' is called and vice versa*/
  337|  92.4k|                m_temp_reg_0 = _mm_loadu_si128((__m128i *)pu1_dst);
  338|  92.4k|                m_temp_reg_1 = _mm_loadu_si128((__m128i *)(pu1_dst + dst_strd));
  339|  92.4k|                m_temp_reg_2 = _mm_loadu_si128((__m128i *)(pu1_dst + 2 * dst_strd));
  340|  92.4k|                m_temp_reg_3 = _mm_loadu_si128((__m128i *)(pu1_dst + 3 * dst_strd));
  341|       |
  342|  92.4k|                m_temp_reg_0  = _mm_shuffle_epi8(m_temp_reg_0, chroma_unchanged_mask_16x8b);
  343|  92.4k|                m_temp_reg_1  = _mm_shuffle_epi8(m_temp_reg_1, chroma_unchanged_mask_16x8b);
  344|  92.4k|                m_temp_reg_2  = _mm_shuffle_epi8(m_temp_reg_2, chroma_unchanged_mask_16x8b);
  345|  92.4k|                m_temp_reg_3  = _mm_shuffle_epi8(m_temp_reg_3, chroma_unchanged_mask_16x8b);
  346|       |
  347|  92.4k|                m_temp_reg_4 = _mm_packus_epi16(m_temp_reg_8, m_temp_reg_9);
  348|  92.4k|                m_temp_reg_5 = _mm_packus_epi16(m_temp_reg_10, m_temp_reg_11);
  349|       |
  350|  92.4k|                m_temp_reg_12 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_0);
  351|  92.4k|                m_temp_reg_4 = _mm_srli_si128(m_temp_reg_4, 8);
  352|  92.4k|                m_temp_reg_13 = _mm_unpacklo_epi8(m_temp_reg_4, m_temp_reg_1);
  353|       |
  354|  92.4k|                m_temp_reg_14 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_2);
  355|  92.4k|                m_temp_reg_5 = _mm_srli_si128(m_temp_reg_5, 8);
  356|  92.4k|                m_temp_reg_15 = _mm_unpacklo_epi8(m_temp_reg_5, m_temp_reg_3);
  357|       |
  358|       |                /*Store the result in the destination*/
  359|  92.4k|                pi4_dst = (__m128i *)(pu1_dst);
  360|       |
  361|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_12);
  362|  92.4k|                m_temp_reg_8 = _mm_srli_si128(m_temp_reg_12, 8);
  363|       |
  364|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + 8);
  365|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_8);
  366|       |
  367|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + dst_strd);
  368|       |
  369|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_13);
  370|  92.4k|                m_temp_reg_9 = _mm_srli_si128(m_temp_reg_13, 8);
  371|       |
  372|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + dst_strd + 8);
  373|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_9);
  374|       |
  375|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + 2 * dst_strd);
  376|       |
  377|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_14);
  378|  92.4k|                m_temp_reg_10 = _mm_srli_si128(m_temp_reg_14, 8);
  379|       |
  380|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + 2 * dst_strd + 8);
  381|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_10);
  382|       |
  383|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + 3 * dst_strd);
  384|       |
  385|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_15);
  386|  92.4k|                m_temp_reg_11 = _mm_srli_si128(m_temp_reg_15, 8);
  387|       |
  388|  92.4k|                pi4_dst = (__m128i *)(pu1_dst + 3 * dst_strd + 8);
  389|  92.4k|                _mm_storel_epi64(pi4_dst, m_temp_reg_11);
  390|       |
  391|  92.4k|                pu1_pred += 16;
  392|  92.4k|                pu1_dst += 16;
  393|  92.4k|            }
  394|       |
  395|  68.7k|            pu1_pred += 4 * pred_strd - 2 * trans_size;
  396|  68.7k|            pu1_dst += 4 * dst_strd - 2 * trans_size;
  397|  68.7k|        }
  398|  28.4k|    }
  399|       |
  400|       |
  401|  38.0k|}

_Z17iv_aligned_mallocPvii:
   60|  29.4k|void *iv_aligned_malloc(void *ctxt, WORD32 alignment, WORD32 size) {
   61|  29.4k|  void *buf = NULL;
   62|  29.4k|  (void)ctxt;
   63|  29.4k|  if (0 != posix_memalign(&buf, alignment, size)) {
  ------------------
  |  Branch (63:7): [True: 0, False: 29.4k]
  ------------------
   64|      0|      return NULL;
   65|      0|  }
   66|  29.4k|  return buf;
   67|  29.4k|}
_Z15iv_aligned_freePvS_:
   69|  27.5k|void iv_aligned_free(void *ctxt, void *buf) {
   70|  27.5k|  (void)ctxt;
   71|  27.5k|  free(buf);
   72|  27.5k|}
_ZN5CodecC2E17IV_COLOR_FORMAT_Tm:
  100|    664|Codec::Codec(IV_COLOR_FORMAT_T colorFormat, size_t numCores) {
  101|    664|  mColorFormat = colorFormat;
  102|    664|  mNumCores = numCores;
  103|    664|  mCodec = nullptr;
  104|    664|  mWidth = 0;
  105|    664|  mHeight = 0;
  106|       |
  107|    664|  memset(&mOutBufHandle, 0, sizeof(mOutBufHandle));
  108|    664|}
_ZN5CodecD2Ev:
  110|    664|Codec::~Codec() {}
_ZN5Codec11createCodecEv:
  112|    664|void Codec::createCodec() {
  113|    664|  IV_API_CALL_STATUS_T ret;
  114|    664|  ihevcd_cxa_create_ip_t create_ip{};
  115|    664|  ihevcd_cxa_create_op_t create_op{};
  116|    664|  void *fxns = (void *)&ivd_api_function;
  ------------------
  |  |   36|    664|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  117|       |
  118|    664|  create_ip.s_ivd_create_ip_t.e_cmd = IVD_CMD_CREATE;
  119|    664|  create_ip.s_ivd_create_ip_t.u4_share_disp_buf = 0;
  120|    664|  create_ip.s_ivd_create_ip_t.e_output_format = mColorFormat;
  121|    664|  create_ip.s_ivd_create_ip_t.pf_aligned_alloc = iv_aligned_malloc;
  122|    664|  create_ip.s_ivd_create_ip_t.pf_aligned_free = iv_aligned_free;
  123|    664|  create_ip.s_ivd_create_ip_t.pv_mem_ctxt = NULL;
  124|    664|  create_ip.s_ivd_create_ip_t.u4_size = sizeof(ihevcd_cxa_create_ip_t);
  125|    664|  create_op.s_ivd_create_op_t.u4_size = sizeof(ihevcd_cxa_create_op_t);
  126|       |
  127|    664|  ret = ivd_api_function(NULL, (void *)&create_ip, (void *)&create_op);
  ------------------
  |  |   36|    664|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  128|    664|  if (ret != IV_SUCCESS) {
  ------------------
  |  Branch (128:7): [True: 0, False: 664]
  ------------------
  129|      0|    return;
  130|      0|  }
  131|    664|  mCodec = (iv_obj_t *)create_op.s_ivd_create_op_t.pv_handle;
  132|    664|  mCodec->pv_fxns = fxns;
  133|    664|  mCodec->u4_size = sizeof(iv_obj_t);
  134|    664|}
_ZN5Codec11deleteCodecEv:
  136|    664|void Codec::deleteCodec() {
  137|    664|  ivd_delete_ip_t delete_ip{};
  138|    664|  ivd_delete_op_t delete_op{};
  139|       |
  140|    664|  delete_ip.e_cmd = IVD_CMD_DELETE;
  141|    664|  delete_ip.u4_size = sizeof(ivd_delete_ip_t);
  142|    664|  delete_op.u4_size = sizeof(ivd_delete_op_t);
  143|       |
  144|    664|  ivd_api_function(mCodec, (void *)&delete_ip, (void *)&delete_op);
  ------------------
  |  |   36|    664|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  145|    664|}
_ZN5Codec10resetCodecEv:
  147|    321|void Codec::resetCodec() {
  148|    321|  ivd_ctl_reset_ip_t s_ctl_ip{};
  149|    321|  ivd_ctl_reset_op_t s_ctl_op{};
  150|       |
  151|    321|  s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
  152|    321|  s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_RESET;
  153|    321|  s_ctl_ip.u4_size = sizeof(ivd_ctl_reset_ip_t);
  154|    321|  s_ctl_op.u4_size = sizeof(ivd_ctl_reset_op_t);
  155|       |
  156|    321|  ivd_api_function(mCodec, (void *)&s_ctl_ip, (void *)&s_ctl_op);
  ------------------
  |  |   36|    321|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  157|    321|}
_ZN5Codec8setCoresEv:
  159|    664|void Codec::setCores() {
  160|    664|  ihevcd_cxa_ctl_set_num_cores_ip_t s_ctl_ip{};
  161|    664|  ihevcd_cxa_ctl_set_num_cores_op_t s_ctl_op{};
  162|       |
  163|    664|  s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
  164|    664|  s_ctl_ip.e_sub_cmd =
  165|    664|      (IVD_CONTROL_API_COMMAND_TYPE_T)IHEVCD_CXA_CMD_CTL_SET_NUM_CORES;
  166|    664|  s_ctl_ip.u4_num_cores = mNumCores;
  167|    664|  s_ctl_ip.u4_size = sizeof(ihevcd_cxa_ctl_set_num_cores_ip_t);
  168|    664|  s_ctl_op.u4_size = sizeof(ihevcd_cxa_ctl_set_num_cores_op_t);
  169|       |
  170|    664|  ivd_api_function(mCodec, (void *)&s_ctl_ip, (void *)&s_ctl_op);
  ------------------
  |  |   36|    664|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  171|    664|}
_ZN5Codec9setParamsE23IVD_VIDEO_DECODE_MODE_T:
  173|  1.32k|void Codec::setParams(IVD_VIDEO_DECODE_MODE_T mode) {
  174|  1.32k|  ivd_ctl_set_config_ip_t s_ctl_ip{};
  175|  1.32k|  ivd_ctl_set_config_op_t s_ctl_op{};
  176|       |
  177|  1.32k|  s_ctl_ip.u4_disp_wd = 0;
  178|  1.32k|  s_ctl_ip.e_frm_skip_mode = IVD_SKIP_NONE;
  179|  1.32k|  s_ctl_ip.e_frm_out_mode = IVD_DISPLAY_FRAME_OUT;
  180|  1.32k|  s_ctl_ip.e_vid_dec_mode = mode;
  181|  1.32k|  s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
  182|  1.32k|  s_ctl_ip.e_sub_cmd = IVD_CMD_CTL_SETPARAMS;
  183|  1.32k|  s_ctl_ip.u4_size = sizeof(ivd_ctl_set_config_ip_t);
  184|  1.32k|  s_ctl_op.u4_size = sizeof(ivd_ctl_set_config_op_t);
  185|       |
  186|  1.32k|  ivd_api_function(mCodec, (void *)&s_ctl_ip, (void *)&s_ctl_op);
  ------------------
  |  |   36|  1.32k|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  187|  1.32k|}
_ZN5Codec15setArchitectureE10IVD_ARCH_T:
  189|    664|void Codec::setArchitecture(IVD_ARCH_T arch) {
  190|    664|  ihevcd_cxa_ctl_set_processor_ip_t s_ctl_ip{};
  191|    664|  ihevcd_cxa_ctl_set_processor_op_t s_ctl_op{};
  192|       |
  193|    664|  s_ctl_ip.e_cmd = IVD_CMD_VIDEO_CTL;
  194|    664|  s_ctl_ip.e_sub_cmd =
  195|    664|      (IVD_CONTROL_API_COMMAND_TYPE_T)IHEVCD_CXA_CMD_CTL_SET_PROCESSOR;
  196|    664|  s_ctl_ip.u4_arch = arch;
  197|    664|  s_ctl_ip.u4_soc = SOC_GENERIC;
  198|    664|  s_ctl_ip.u4_size = sizeof(ihevcd_cxa_ctl_set_processor_ip_t);
  199|    664|  s_ctl_op.u4_size = sizeof(ihevcd_cxa_ctl_set_processor_op_t);
  200|       |
  201|    664|  ivd_api_function(mCodec, (void *)&s_ctl_ip, (void *)&s_ctl_op);
  ------------------
  |  |   36|    664|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  202|    664|}
_ZN5Codec9freeFrameEv:
  203|  1.55k|void Codec::freeFrame() {
  204|  3.46k|  for (int i = 0; i < mOutBufHandle.u4_num_bufs; i++) {
  ------------------
  |  Branch (204:19): [True: 1.90k, False: 1.55k]
  ------------------
  205|  1.90k|    if (mOutBufHandle.pu1_bufs[i]) {
  ------------------
  |  Branch (205:9): [True: 1.90k, False: 0]
  ------------------
  206|  1.90k|      free(mOutBufHandle.pu1_bufs[i]);
  207|  1.90k|      mOutBufHandle.pu1_bufs[i] = nullptr;
  208|  1.90k|    }
  209|  1.90k|  }
  210|  1.55k|}
_ZN5Codec10allocFrameEv:
  212|    892|void Codec::allocFrame() {
  213|    892|  size_t sizes[4] = {0};
  214|    892|  size_t num_bufs = 0;
  215|       |
  216|    892|  freeFrame();
  217|       |
  218|    892|  memset(&mOutBufHandle, 0, sizeof(mOutBufHandle));
  219|       |
  220|    892|  switch (mColorFormat) {
  221|    329|    case IV_YUV_420SP_UV:
  ------------------
  |  Branch (221:5): [True: 329, False: 563]
  ------------------
  222|    329|      [[fallthrough]];
  223|    409|    case IV_YUV_420SP_VU:
  ------------------
  |  Branch (223:5): [True: 80, False: 812]
  ------------------
  224|    409|      sizes[0] = mWidth * mHeight;
  225|    409|      sizes[1] = mWidth * mHeight >> 1;
  226|    409|      num_bufs = 2;
  227|    409|      break;
  228|    128|    case IV_YUV_422ILE:
  ------------------
  |  Branch (228:5): [True: 128, False: 764]
  ------------------
  229|    128|      sizes[0] = mWidth * mHeight * 2;
  230|    128|      num_bufs = 1;
  231|    128|      break;
  232|     51|    case IV_RGB_565:
  ------------------
  |  Branch (232:5): [True: 51, False: 841]
  ------------------
  233|     51|      sizes[0] = mWidth * mHeight * 2;
  234|     51|      num_bufs = 1;
  235|     51|      break;
  236|      0|    case IV_RGBA_8888:
  ------------------
  |  Branch (236:5): [True: 0, False: 892]
  ------------------
  237|      0|      sizes[0] = mWidth * mHeight * 4;
  238|      0|      num_bufs = 1;
  239|      0|      break;
  240|    304|    case IV_YUV_420P:
  ------------------
  |  Branch (240:5): [True: 304, False: 588]
  ------------------
  241|    304|      [[fallthrough]];
  242|    304|    default:
  ------------------
  |  Branch (242:5): [True: 0, False: 892]
  ------------------
  243|    304|      sizes[0] = mWidth * mHeight;
  244|    304|      sizes[1] = mWidth * mHeight >> 2;
  245|    304|      sizes[2] = mWidth * mHeight >> 2;
  246|    304|      num_bufs = 3;
  247|    304|      break;
  248|    892|  }
  249|    892|  mOutBufHandle.u4_num_bufs = num_bufs;
  250|  2.80k|  for (int i = 0; i < num_bufs; i++) {
  ------------------
  |  Branch (250:19): [True: 1.90k, False: 892]
  ------------------
  251|  1.90k|    mOutBufHandle.u4_min_out_buf_size[i] = sizes[i];
  252|  1.90k|    mOutBufHandle.pu1_bufs[i] = (UWORD8 *)iv_aligned_malloc(NULL, 16, sizes[i]);
  253|  1.90k|  }
  254|    892|}
_ZN5Codec12decodeHeaderEPKhm:
  256|    664|void Codec::decodeHeader(const uint8_t *data, size_t size) {
  257|    664|  setParams(IVD_DECODE_HEADER);
  258|       |
  259|  1.10M|  while (size > 0) {
  ------------------
  |  Branch (259:10): [True: 1.10M, False: 51]
  ------------------
  260|  1.10M|    IV_API_CALL_STATUS_T ret;
  261|  1.10M|    ivd_video_decode_ip_t dec_ip{};
  262|  1.10M|    ivd_video_decode_op_t dec_op{};
  263|  1.10M|    size_t bytes_consumed;
  264|       |
  265|  1.10M|    memset(&dec_ip, 0, sizeof(dec_ip));
  266|  1.10M|    memset(&dec_op, 0, sizeof(dec_op));
  267|       |
  268|  1.10M|    dec_ip.e_cmd = IVD_CMD_VIDEO_DECODE;
  269|  1.10M|    dec_ip.u4_ts = 0;
  270|  1.10M|    dec_ip.pv_stream_buffer = (void *)data;
  271|  1.10M|    dec_ip.u4_num_Bytes = size;
  272|  1.10M|    dec_ip.u4_size = sizeof(ivd_video_decode_ip_t);
  273|  1.10M|    dec_op.u4_size = sizeof(ivd_video_decode_op_t);
  274|       |
  275|  1.10M|    ret = ivd_api_function(mCodec, (void *)&dec_ip, (void *)&dec_op);
  ------------------
  |  |   36|  1.10M|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  276|       |
  277|  1.10M|    bytes_consumed = dec_op.u4_num_bytes_consumed;
  278|       |    /* If no bytes are consumed, then consume 4 bytes to ensure fuzzer proceeds
  279|       |     * to feed next data */
  280|  1.10M|    if (!bytes_consumed) bytes_consumed = 4;
  ------------------
  |  Branch (280:9): [True: 1.08M, False: 13.3k]
  ------------------
  281|       |
  282|  1.10M|    bytes_consumed = std::min(size, bytes_consumed);
  283|       |
  284|  1.10M|    data += bytes_consumed;
  285|  1.10M|    size -= bytes_consumed;
  286|       |
  287|  1.10M|    mWidth = std::min(dec_op.u4_pic_wd, (UWORD32)10240);
  288|  1.10M|    mHeight = std::min(dec_op.u4_pic_ht, (UWORD32)10240);
  289|       |
  290|       |    /* Break after successful header decode */
  291|  1.10M|    if (mWidth && mHeight) {
  ------------------
  |  Branch (291:9): [True: 613, False: 1.10M]
  |  Branch (291:19): [True: 613, False: 0]
  ------------------
  292|    613|      break;
  293|    613|    }
  294|  1.10M|  }
  295|       |  /* if width / height are invalid, set them to defaults */
  296|    664|  if (!mWidth) mWidth = 1920;
  ------------------
  |  Branch (296:7): [True: 51, False: 613]
  ------------------
  297|    664|  if (!mHeight) mHeight = 1088;
  ------------------
  |  Branch (297:7): [True: 51, False: 613]
  ------------------
  298|    664|}
_ZN5Codec11decodeFrameEPKhmPm:
  301|  26.1k|                                        size_t *bytesConsumed) {
  302|  26.1k|  IV_API_CALL_STATUS_T ret;
  303|  26.1k|  ivd_video_decode_ip_t dec_ip{};
  304|  26.1k|  ivd_video_decode_op_t dec_op{};
  305|       |
  306|  26.1k|  memset(&dec_ip, 0, sizeof(dec_ip));
  307|  26.1k|  memset(&dec_op, 0, sizeof(dec_op));
  308|       |
  309|  26.1k|  dec_ip.e_cmd = IVD_CMD_VIDEO_DECODE;
  310|  26.1k|  dec_ip.u4_ts = 0;
  311|  26.1k|  dec_ip.pv_stream_buffer = (void *)data;
  312|  26.1k|  dec_ip.u4_num_Bytes = size;
  313|  26.1k|  dec_ip.u4_size = sizeof(ivd_video_decode_ip_t);
  314|  26.1k|  dec_ip.s_out_buffer = mOutBufHandle;
  315|       |
  316|  26.1k|  dec_op.u4_size = sizeof(ivd_video_decode_op_t);
  317|       |
  318|  26.1k|  ret = ivd_api_function(mCodec, (void *)&dec_ip, (void *)&dec_op);
  ------------------
  |  |   36|  26.1k|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  319|       |
  320|       |  /* In case of change in resolution, reset codec and feed the same data again
  321|       |   */
  322|  26.1k|  if (IVD_RES_CHANGED == (dec_op.u4_error_code & 0xFF)) {
  ------------------
  |  Branch (322:7): [True: 321, False: 25.8k]
  ------------------
  323|    321|    resetCodec();
  324|    321|    ret = ivd_api_function(mCodec, (void *)&dec_ip, (void *)&dec_op);
  ------------------
  |  |   36|    321|#define ivd_api_function ihevcd_cxa_api_function
  ------------------
  325|    321|  }
  326|  26.1k|  *bytesConsumed = dec_op.u4_num_bytes_consumed;
  327|       |
  328|       |  /* If no bytes are consumed, then consume 4 bytes to ensure fuzzer proceeds
  329|       |   * to feed next data */
  330|  26.1k|  if (!*bytesConsumed) *bytesConsumed = 4;
  ------------------
  |  Branch (330:7): [True: 33, False: 26.1k]
  ------------------
  331|       |
  332|  26.1k|  if (dec_op.u4_pic_wd && dec_op.u4_pic_ht &&
  ------------------
  |  Branch (332:7): [True: 25.2k, False: 915]
  |  Branch (332:27): [True: 25.2k, False: 0]
  ------------------
  333|  26.1k|      (mWidth != dec_op.u4_pic_wd || mHeight != dec_op.u4_pic_ht)) {
  ------------------
  |  Branch (333:8): [True: 140, False: 25.0k]
  |  Branch (333:38): [True: 88, False: 24.9k]
  ------------------
  334|    228|    mWidth = std::min(dec_op.u4_pic_wd, (UWORD32)10240);
  335|    228|    mHeight = std::min(dec_op.u4_pic_ht, (UWORD32)10240);
  336|    228|    allocFrame();
  337|    228|  }
  338|       |
  339|  26.1k|  return ret;
  340|  26.1k|}
LLVMFuzzerTestOneInput:
  342|    664|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  343|    664|  if (size < 1) {
  ------------------
  |  Branch (343:7): [True: 0, False: 664]
  ------------------
  344|      0|    return 0;
  345|      0|  }
  346|    664|  size_t colorFormatOfst = std::min((size_t)OFFSET_COLOR_FORMAT, size - 1);
  347|    664|  size_t numCoresOfst = std::min((size_t)OFFSET_NUM_CORES, size - 1);
  348|    664|  size_t architectureOfst = std::min((size_t)OFFSET_ARCH, size - 1);
  349|    664|  size_t architectureIdx = data[architectureOfst] % kSupportedArchitectures;
  350|    664|  IVD_ARCH_T arch = (IVD_ARCH_T)supportedArchitectures[architectureIdx];
  351|    664|  size_t colorFormatIdx = data[colorFormatOfst] % kSupportedColorFormats;
  352|    664|  IV_COLOR_FORMAT_T colorFormat =
  353|    664|      (IV_COLOR_FORMAT_T)(supportedColorFormats[colorFormatIdx]);
  354|    664|  uint32_t numCores = (data[numCoresOfst] % kMaxCores) + 1;
  355|    664|  size_t numDecodeCalls = 0;
  356|    664|  Codec *codec = new Codec(colorFormat, numCores);
  357|    664|  codec->createCodec();
  358|    664|  codec->setArchitecture(arch);
  359|    664|  codec->setCores();
  360|    664|  codec->decodeHeader(data, size);
  361|    664|  codec->setParams(IVD_DECODE_FRAME);
  362|    664|  codec->allocFrame();
  363|       |
  364|  26.7k|  while (size > 0 && numDecodeCalls < kMaxNumDecodeCalls) {
  ------------------
  |  Branch (364:10): [True: 26.1k, False: 616]
  |  Branch (364:22): [True: 26.1k, False: 48]
  ------------------
  365|  26.1k|    IV_API_CALL_STATUS_T ret;
  366|  26.1k|    size_t bytesConsumed;
  367|  26.1k|    ret = codec->decodeFrame(data, size, &bytesConsumed);
  368|       |
  369|  26.1k|    bytesConsumed = std::min(size, bytesConsumed);
  370|  26.1k|    data += bytesConsumed;
  371|  26.1k|    size -= bytesConsumed;
  372|  26.1k|    numDecodeCalls++;
  373|  26.1k|  }
  374|       |
  375|    664|  codec->freeFrame();
  376|    664|  codec->deleteCodec();
  377|    664|  delete codec;
  378|    664|  return 0;
  379|    664|}

