18520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/****************************************************************************** 28520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 38520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Copyright (C) 2015 The Android Open Source Project 48520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 58520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Licensed under the Apache License, Version 2.0 (the "License"); 68520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * you may not use this file except in compliance with the License. 78520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * You may obtain a copy of the License at: 88520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 98520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * http://www.apache.org/licenses/LICENSE-2.0 108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Unless required by applicable law or agreed to in writing, software 128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * distributed under the License is distributed on an "AS IS" BASIS, 138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * See the License for the specific language governing permissions and 158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * limitations under the License. 168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * 178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ***************************************************************************** 188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/** 218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @file 238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* ideint_cac_ssse3.c 248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @brief 268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* This file include the definitions of the combing artifact check function 278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* of the de-interlacer and some variant of that. 288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @author 308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Ittiam 318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @par List of Functions: 338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* cac_4x8() 348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* ideint_cac() 358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @remarks 378520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* In the de-interlacer workspace, cac is not a seperate assembly module as 388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* it comes along with the de_int_decision() function. But in C-Model, to 398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* keep the things cleaner, it was made to be a separate function during 408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* cac experiments long after the assembly was written by Mudit. 418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/*****************************************************************************/ 458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* File Includes */ 468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/*****************************************************************************/ 478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* System include files */ 488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <stdio.h> 498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <stdint.h> 508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <string.h> 518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <stdlib.h> 528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include <immintrin.h> 538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/* User include files */ 558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_datatypes.h" 568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_macros.h" 578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv.h" 588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_variance.h" 598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "icv_sad.h" 608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint.h" 618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint_defs.h" 628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint_structs.h" 638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar#include "ideint_cac.h" 648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar/** 668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @brief 698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Combing artifact check function for 8x8 block 708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @par Description 728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Determines CAC for 8x8 block by calling 8x4 CAC function 738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pu1_top 758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Top field 768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] pu1_bot 788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Bottom field 798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] top_strd 818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Top field Stride 828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @param[in] bot_strd 848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* Bottom field stride 858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @returns 878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* combing artifact flag (1 = detected, 0 = not detected) 888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 898520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* @remarks 908520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar* 918520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar******************************************************************************* 928520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar*/ 938520690e241ad92a07893e198b2df417fe045d79Harish MahendrakarWORD32 ideint_cac_8x8_ssse3(UWORD8 *pu1_top, 948520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar UWORD8 *pu1_bot, 958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 top_strd, 968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 bot_strd) 978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar{ 988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 ca; /* combing artifact result */ 998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 i; 1008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 adj[2] = {0}; 1018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 alt[2] = {0}; 1028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 sum_1, sum_2, sum_3, sum_4; 1038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar WORD32 sum_diff, diff_sum; 1048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i top[4]; 1068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i bot[4]; 1078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i sum_t[4]; 1088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i sum_b[4]; 1098520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i zero; 1108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar zero = _mm_setzero_si128(); 1138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(i = 0; i < 4; i++) 1158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 1168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Load top */ 1178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar top[i] = (__m128i)_mm_loadl_epi64((__m128i *) (pu1_top)); 1188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_top += top_strd; 1198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Load bottom */ 1218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar bot[i] = (__m128i)_mm_loadl_epi64((__m128i *) (pu1_bot)); 1228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar pu1_bot += bot_strd; 1238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Unpack */ 1258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar top[i] = _mm_unpacklo_epi8(top[i], zero); 1268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar bot[i] = _mm_unpacklo_epi8(bot[i], zero); 1278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Compute row sums */ 1298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_t[i] = _mm_sad_epu8(top[i], zero); 1308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_b[i] = _mm_sad_epu8(bot[i], zero); 1318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 1328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Compute row based alt and adj */ 1348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar for(i = 0; i < 4; i += 2) 1358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 1368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_1 = _mm_cvtsi128_si32(sum_t[i + 0]); 1378520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_2 = _mm_cvtsi128_si32(sum_b[i + 0]); 1388520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_diff = ABS_DIF(sum_1, sum_2); 1398520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(sum_diff >= RSUM_CSUM_THRESH) 1408520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj[0] += sum_diff; 1418520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1428520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_3 = _mm_cvtsi128_si32(sum_t[i + 1]); 1438520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_4 = _mm_cvtsi128_si32(sum_b[i + 1]); 1448520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_diff = ABS_DIF(sum_3, sum_4); 1458520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(sum_diff >= RSUM_CSUM_THRESH) 1468520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj[0] += sum_diff; 1478520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1488520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[0] += ABS_DIF(sum_1, sum_3); 1498520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[0] += ABS_DIF(sum_2, sum_4); 1508520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1518520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_1 = _mm_cvtsi128_si32(_mm_srli_si128(sum_t[i + 0], 8)); 1528520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_2 = _mm_cvtsi128_si32(_mm_srli_si128(sum_b[i + 0], 8)); 1538520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_diff = ABS_DIF(sum_1, sum_2); 1548520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(sum_diff >= RSUM_CSUM_THRESH) 1558520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj[1] += sum_diff; 1568520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1578520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_3 = _mm_cvtsi128_si32(_mm_srli_si128(sum_t[i + 1], 8)); 1588520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_4 = _mm_cvtsi128_si32(_mm_srli_si128(sum_b[i + 1], 8)); 1598520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar sum_diff = ABS_DIF(sum_3, sum_4); 1608520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar if(sum_diff >= RSUM_CSUM_THRESH) 1618520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj[1] += sum_diff; 1628520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1638520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[1] += ABS_DIF(sum_1, sum_3); 1648520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[1] += ABS_DIF(sum_2, sum_4); 1658520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 1668520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1678520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Compute column based adj */ 1688520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 1698520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i avg1, avg2; 1708520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i top_avg, bot_avg; 1718520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i min, max, diff, thresh; 1728520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i mask; 1738520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg1 = _mm_avg_epu8(top[0], top[1]); 1748520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg2 = _mm_avg_epu8(top[2], top[3]); 1758520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar top_avg = _mm_avg_epu8(avg1, avg2); 1768520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1778520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg1 = _mm_avg_epu8(bot[0], bot[1]); 1788520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg2 = _mm_avg_epu8(bot[2], bot[3]); 1798520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar bot_avg = _mm_avg_epu8(avg1, avg2); 1808520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1818520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar min = _mm_min_epu8(top_avg, bot_avg); 1828520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar max = _mm_max_epu8(top_avg, bot_avg); 1838520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1848520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff = _mm_sub_epi16(max, min); 1858520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar thresh = _mm_set1_epi16((RSUM_CSUM_THRESH >> 2) - 1); 1868520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1878520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar mask = _mm_cmpgt_epi16(diff, thresh); 1888520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff = _mm_and_si128(diff, mask); 1898520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1908520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum = _mm_extract_epi16(diff, 0); 1918520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += _mm_extract_epi16(diff, 1); 1928520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += _mm_extract_epi16(diff, 2); 1938520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += _mm_extract_epi16(diff, 3); 1948520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1958520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj[0] += diff_sum << 2; 1968520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 1978520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum = _mm_extract_epi16(diff, 4); 1988520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += _mm_extract_epi16(diff, 5); 1998520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += _mm_extract_epi16(diff, 6); 2008520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum += _mm_extract_epi16(diff, 7); 2018520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2028520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar adj[1] += diff_sum << 2; 2038520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2048520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 2058520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2068520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar /* Compute column based alt */ 2078520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar { 2088520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i avg1, avg2; 2098520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar __m128i even_avg, odd_avg, diff; 2108520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg1 = _mm_avg_epu8(top[0], bot[0]); 2118520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg2 = _mm_avg_epu8(top[2], bot[2]); 2128520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar even_avg = _mm_avg_epu8(avg1, avg2); 2138520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2148520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg1 = _mm_avg_epu8(top[1], bot[1]); 2158520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar avg2 = _mm_avg_epu8(top[3], bot[3]); 2168520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar odd_avg = _mm_avg_epu8(avg1, avg2); 2178520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2188520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff = _mm_sad_epu8(even_avg, odd_avg); 2198520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2208520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2218520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum = _mm_cvtsi128_si32(diff); 2228520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[0] += diff_sum << 2; 2238520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2248520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar diff_sum = _mm_cvtsi128_si32(_mm_srli_si128(diff, 8)); 2258520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[1] += diff_sum << 2; 2268520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2278520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar } 2288520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[0] += (alt[0] >> SAD_BIAS_MULT_SHIFT) + (SAD_BIAS_ADDITIVE >> 1); 2298520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar alt[1] += (alt[1] >> SAD_BIAS_MULT_SHIFT) + (SAD_BIAS_ADDITIVE >> 1); 2308520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2318520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ca = (alt[0] < adj[0]); 2328520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar ca |= (alt[1] < adj[1]); 2338520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 2348520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar return ca; 2358520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar} 2368520690e241ad92a07893e198b2df417fe045d79Harish Mahendrakar 237