1bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// 2bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// 3bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// File Name: omxVCM4P10_FilterDeblockingChroma_VerEdge_I_s.s 4bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// OpenMAX DL: v1.0.2 5bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Revision: 9641 6bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Date: Thursday, February 7, 2008 7bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// 8bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 9bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// 10bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// 11bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// 12bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 13bebc99d6fa433c04139294a5057f8439d772dbd9James Dong INCLUDE omxtypes_s.h 14bebc99d6fa433c04139294a5057f8439d772dbd9James Dong INCLUDE armCOMM_s.h 15bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 16bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_VARIANTS ARM1136JS 17bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 18bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 19bebc99d6fa433c04139294a5057f8439d772dbd9James Dong IF ARM1136JS 20bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 21bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 22bebc99d6fa433c04139294a5057f8439d772dbd9James DongMASK_0 EQU 0x00000000 23bebc99d6fa433c04139294a5057f8439d772dbd9James DongMASK_1 EQU 0x01010101 24bebc99d6fa433c04139294a5057f8439d772dbd9James DongMASK_2 EQU 0x0000ff00 25bebc99d6fa433c04139294a5057f8439d772dbd9James DongLOOP_COUNT EQU 0x50000000 26bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 27bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Declare input registers 28bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 29bebc99d6fa433c04139294a5057f8439d772dbd9James DongpSrcDst RN 0 30bebc99d6fa433c04139294a5057f8439d772dbd9James DongsrcdstStep RN 1 31bebc99d6fa433c04139294a5057f8439d772dbd9James DongpAlphaArg RN 2 32bebc99d6fa433c04139294a5057f8439d772dbd9James DongpBetaArg RN 3 33bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 34bebc99d6fa433c04139294a5057f8439d772dbd9James DongpThresholds RN 6 35bebc99d6fa433c04139294a5057f8439d772dbd9James DongpBS RN 9 36bebc99d6fa433c04139294a5057f8439d772dbd9James DongpQ0 RN 0 37bebc99d6fa433c04139294a5057f8439d772dbd9James DongbS RN 2 38bebc99d6fa433c04139294a5057f8439d772dbd9James DongbSTemp RN 10 39bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 40bebc99d6fa433c04139294a5057f8439d772dbd9James Dongalpha RN 6 41bebc99d6fa433c04139294a5057f8439d772dbd9James Dongalpha0 RN 6 42bebc99d6fa433c04139294a5057f8439d772dbd9James Dongalpha1 RN 8 43bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 44bebc99d6fa433c04139294a5057f8439d772dbd9James Dongbeta RN 7 45bebc99d6fa433c04139294a5057f8439d772dbd9James Dongbeta0 RN 7 46bebc99d6fa433c04139294a5057f8439d772dbd9James Dongbeta1 RN 9 47bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 48bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Declare Local/Temporary variables 49bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 50bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Pixels 51bebc99d6fa433c04139294a5057f8439d772dbd9James Dongp_0 RN 3 52bebc99d6fa433c04139294a5057f8439d772dbd9James Dongp_1 RN 5 53bebc99d6fa433c04139294a5057f8439d772dbd9James Dongq_0 RN 8 54bebc99d6fa433c04139294a5057f8439d772dbd9James Dongq_1 RN 9 55bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 56bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Unpacking 57bebc99d6fa433c04139294a5057f8439d772dbd9James Dongmask RN 11 58bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 59bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow0 RN 2 60bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow1 RN 4 61bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow2 RN 5 62bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow3 RN 3 63bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 64bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow4 RN 8 65bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow5 RN 9 66bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow6 RN 10 67bebc99d6fa433c04139294a5057f8439d772dbd9James Dongrow7 RN 12 68bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 69bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk0 RN 2 70bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk2 RN 10 71bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk3 RN 12 72bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 73bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk4 RN 4 74bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk5 RN 5 75bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk6 RN 14 76bebc99d6fa433c04139294a5057f8439d772dbd9James Dongtunpk7 RN 2 77bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 78bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Filtering 79bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 80bebc99d6fa433c04139294a5057f8439d772dbd9James Dongdp0q0 RN 12 81bebc99d6fa433c04139294a5057f8439d772dbd9James Dongdp1p0 RN 12 82bebc99d6fa433c04139294a5057f8439d772dbd9James Dongdq1q0 RN 12 83bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 84bebc99d6fa433c04139294a5057f8439d772dbd9James Dongap0q0 RN 4 85bebc99d6fa433c04139294a5057f8439d772dbd9James Dongfilt RN 2 86bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 87bebc99d6fa433c04139294a5057f8439d772dbd9James Dongm00 RN 14 88bebc99d6fa433c04139294a5057f8439d772dbd9James Dongm01 RN 11 89bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 90bebc99d6fa433c04139294a5057f8439d772dbd9James DongpQ0 RN 0 91bebc99d6fa433c04139294a5057f8439d772dbd9James DongStep RN 1 92bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 93bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Output 94bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 95bebc99d6fa433c04139294a5057f8439d772dbd9James DongP_0 RN 6 96bebc99d6fa433c04139294a5057f8439d772dbd9James DongQ_0 RN 7 97bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 98bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//Declarations for bSLT4 kernel 99bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 100bebc99d6fa433c04139294a5057f8439d772dbd9James DongtC RN 12 101bebc99d6fa433c04139294a5057f8439d772dbd9James DongtC0 RN 5 102bebc99d6fa433c04139294a5057f8439d772dbd9James DongtC1 RN 12 103bebc99d6fa433c04139294a5057f8439d772dbd9James Dongpos RN 5 104bebc99d6fa433c04139294a5057f8439d772dbd9James Dongneg RN 9 105bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 106bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//Declarations for bSGE4 kernel 107bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 108bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 109bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;// Miscellanous 110bebc99d6fa433c04139294a5057f8439d772dbd9James DongXY RN 8 111bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 112bebc99d6fa433c04139294a5057f8439d772dbd9James Donga RN 10 113bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt1 RN 10 114bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt2 RN 12 115bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt3 RN 14 116bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt4 RN 6 117bebc99d6fa433c04139294a5057f8439d772dbd9James Dongt5 RN 5 118bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 119bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 120bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Allocate stack memory 121bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ALLOC4 ppThresholds,4 122bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ALLOC8 pAlphaBeta0,8 123bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ALLOC8 pAlphaBeta1,8 124bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ALLOC8 pXYBS,4 125bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ALLOC4 ppBS,4 126bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 127bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Function header 128bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_START omxVCM4P10_FilterDeblockingChroma_VerEdge_I, r11 129bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 130bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;//Input arguments on the stack 131bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ARG ppThresholdsArg, 4 132bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_ARG ppBSArg, 4 133bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 134bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRB alpha1, [pAlphaArg,#1] 135bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRB beta1, [pBetaArg,#1] 136bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR pThresholds, ppThresholdsArg 137bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDR a,=MASK_1 138bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRB beta0, [pBetaArg] 139bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR pThresholds, ppThresholds 140bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRB alpha0, [pAlphaArg] 141bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 142bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MUL alpha1, alpha1, a 143bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MUL beta1, beta1, a 144bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MUL alpha0, alpha0, a 145bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MUL beta0, beta0, a 146bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 147bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STRD alpha1, beta1, pAlphaBeta1 148bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR pBS, ppBSArg 149bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STRD alpha0, beta0, pAlphaBeta0 150bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 151bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDR XY,=LOOP_COUNT 152bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STRD XY, pBS, pXYBS 153bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 154bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 155bebc99d6fa433c04139294a5057f8439d772dbd9James DongLoopY 156bebc99d6fa433c04139294a5057f8439d772dbd9James DongLoopX 157bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//---------------Load Pixels------------------- 158bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 159bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//----------------Pack q0-q1----------------------- 160bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRH bS, [pBS], #8 161bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDR mask, =MASK_2 162bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 163bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRH row4, [pQ0], srcdstStep 164bebc99d6fa433c04139294a5057f8439d772dbd9James Dong CMP bS, #0 165bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR pBS, ppBS 166bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRH row5, [pQ0], srcdstStep 167bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BEQ.W NoFilterBS0 168bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRH row6, [pQ0] 169bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRH row7, [pQ0, srcdstStep] 170bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 171bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row4 = [0 0 r0q0 r0q1] 172bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row5 = [0 0 r1q0 r1q1] 173bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row6 = [0 0 r2q0 r2q1] 174bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row7 = [0 0 r3q0 r3q1] 175bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 176bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk4, mask, row4 177bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk5, mask, row4, LSL#8 178bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk4, tunpk4, row5, ROR#8 179bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk5, tunpk5, row5 180bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk6, mask, row6 181bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk7, mask, row6, LSL#8 182bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk6, tunpk6, row7, ROR#8 183bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk7, tunpk7, row7 184bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 185bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk4 = [0 0 r0q0 r1q0] 186bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk5 = [0 0 r0q1 r1q1] 187bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk6 = [0 0 r2q0 r3q0] 188bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk7 = [0 0 r2q1 r3q1] 189bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 190bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pQ0, pQ0, srcdstStep, LSL #1 191bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pQ0, pQ0, #2 192bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 193bebc99d6fa433c04139294a5057f8439d772dbd9James Dong PKHBT q_1, tunpk6, tunpk4, LSL#16 194bebc99d6fa433c04139294a5057f8439d772dbd9James Dong PKHBT q_0, tunpk7, tunpk5, LSL#16 195bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 196bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// q_0 = [r0q0 r1q0 r2q0 r3q0] 197bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// q_1 = [r0q1 r1q1 r2q1 r3q1] 198bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 199bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 200bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//----------------Pack p0-p1----------------------- 201bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 202bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRH row0, [pQ0], srcdstStep 203bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRH row1, [pQ0], srcdstStep 204bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRH row2, [pQ0] 205bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRH row3, [pQ0, srcdstStep] 206bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 207bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row0 = [0 0 r0p0 r0p1] 208bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row1 = [0 0 r1p0 r1p1] 209bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row2 = [0 0 r2p0 r2p1] 210bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// row3 = [0 0 r3p0 r3p1] 211bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 212bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk2, mask, row0 213bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk6, mask, row0, LSL#8 214bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk2, tunpk2, row1, ROR#8 215bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk6, tunpk6, row1 216bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 217bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk0, mask, row2 218bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND tunpk3, mask, row2, LSL#8 219bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk0, tunpk0, row3, ROR#8 220bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UXTAB tunpk3, tunpk3, row3 221bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 222bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk2 = [0 0 r0p0 r1p0] 223bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk6 = [0 0 r0p1 r1p1] 224bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk0 = [0 0 r2p0 r3p0] 225bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// tunpk3 = [0 0 r2p1 r3p1] 226bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 227bebc99d6fa433c04139294a5057f8439d772dbd9James Dong PKHBT p_0, tunpk0, tunpk2, LSL#16 228bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR bSTemp, ppBS 229bebc99d6fa433c04139294a5057f8439d772dbd9James Dong PKHBT p_1, tunpk3, tunpk6, LSL#16 230bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 231bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// p_0 = [r0p0 r1p0 r2p0 r3p0] 232bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// p_1 = [r0p1 r1p1 r2p1 r3p1] 233bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 234bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//--------------Filtering Decision ------------------- 235bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 dp0q0, p_0, q_0 236bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDR m01, =MASK_1 237bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRH bSTemp, [bSTemp ,#-8] 238bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV m00, #MASK_0 ;// 00000000 mask 239bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 240bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV filt, m01 241bebc99d6fa433c04139294a5057f8439d772dbd9James Dong TST bSTemp, #0xff00 242bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOVEQ filt, filt, LSL #16 243bebc99d6fa433c04139294a5057f8439d772dbd9James Dong TST bSTemp, #0xff 244bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOVEQ filt, filt, LSR #16 245bebc99d6fa433c04139294a5057f8439d772dbd9James Dong TST bSTemp, #4 246bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 247bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Check |p0-q0|<Alpha 248bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 a, q_0, p_0 249bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL ap0q0, a, dp0q0 250bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 a, ap0q0, alpha 251bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL filt, m00, filt 252bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 253bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Check |p1-p0|<Beta 254bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 dp1p0, p_1, p_0 255bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 a, p_0, p_1 256bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL a, a, dp1p0 257bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 a, a, beta 258bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL filt, m00, filt 259bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 260bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Check |q1-q0|<Beta 261bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 dq1q0, q_1, q_0 262bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 a, q_0, q_1 263bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL a, a, dq1q0 264bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 a, a, beta 265bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL filt, m00, filt 266bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 267bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BEQ bSLT4 268bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//-------------------Filter-------------------- 269bebc99d6fa433c04139294a5057f8439d772dbd9James DongbSGE4 270bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;//---------bSGE4 Execution--------------- 271bebc99d6fa433c04139294a5057f8439d772dbd9James Dong CMP filt, #0 272bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 273bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR pThresholds, ppThresholds 274bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 275bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Compute P0b 276bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UHADD8 t1, p_0, q_1 277bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BEQ NoFilterFilt0 278bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MVN t2, p_1 279bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UHSUB8 t1, t1, t2 280bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t2, filt, m01 281bebc99d6fa433c04139294a5057f8439d772dbd9James Dong EOR t1, t1, m01, LSL #7 282bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 283bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pThresholds,pThresholds, #4 284bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 285bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Compute Q0b 286bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UHADD8 t2, q_0, p_1 287bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MVN t3, q_1 288bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UHSUB8 t2, t2, t3 289bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR pThresholds, ppThresholds 290bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL P_0, t1, p_0 291bebc99d6fa433c04139294a5057f8439d772dbd9James Dong EOR t2, t2, m01, LSL #7 292bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL Q_0, t2, q_0 293bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 294bebc99d6fa433c04139294a5057f8439d772dbd9James Dong B StoreResultAndExit 295bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 296bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//---------- Exit of LoopX -------------- 297bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//---- for the case of no filtering ----- 298bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 299bebc99d6fa433c04139294a5057f8439d772dbd9James DongNoFilterFilt0 300bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pQ0, pQ0, #2 301bebc99d6fa433c04139294a5057f8439d772dbd9James DongNoFilterBS0 302bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR pThresholds, ppThresholds 303bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pQ0, pQ0, srcdstStep, LSL #1 304bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pQ0, pQ0, #4 305bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pThresholds, pThresholds, #4 306bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Load counter for LoopX 307bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRD XY, pBS, pXYBS 308bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR pThresholds, ppThresholds 309bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRD alpha, beta, pAlphaBeta1 310bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 311bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Align the pointer 312bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADDS XY, XY, XY 313bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR XY, pXYBS 314bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BCC LoopY 315bebc99d6fa433c04139294a5057f8439d772dbd9James Dong B ExitLoopY 316bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 317bebc99d6fa433c04139294a5057f8439d772dbd9James DongbSLT4 318bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;//---------bSLT4 Execution--------------- 319bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR pThresholds, ppThresholds 320bebc99d6fa433c04139294a5057f8439d772dbd9James Dong CMP filt, #0 321bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 322bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 323bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Since beta <= 18 and alpha <= 255 we know 324bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// -254 <= p0-q0 <= 254 325bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// -17 <= q1-q0 <= 17 326bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// -17 <= p1-p0 <= 17 327bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 328bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// delta = Clip3( -tC, tC, ((((q0-p0)<<2) + (p1-q1) + 4)>>3)) 329bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// 330bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Calculate A = (((q0-p0)<<2) + (p1-q1) + 4)>>3 331bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// = (4*q0 - 4*p0 + p1 - q1 + 4)>>3 332bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// = ((p1-p0) - (q1-q0) - 3*(p0-q0) + 4)>>3 333bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 334bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t1, p_1, p_0 335bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t2, q_1, q_0 336bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BEQ NoFilterFilt0 337bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 338bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRB tC0, [pThresholds], #1 339bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SSUB8 t1, t1, t2 340bebc99d6fa433c04139294a5057f8439d772dbd9James Dong LDRB tC1, [pThresholds], #3 341bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR pThresholds, ppThresholds 342bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UHSUB8 t4, p_0, q_0 343bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ORR tC, tC1, tC0, LSL #16 344bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t5, p_0, q_0 345bebc99d6fa433c04139294a5057f8439d772dbd9James Dong AND t5, t5, m01 346bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SHSUB8 t1, t1, t5 347bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ORR tC, tC, LSL #8 348bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SSUB8 t1, t1, t5 349bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SHSUB8 t1, t1, t4 350bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UQADD8 tC, tC, m01 351bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SADD8 t1, t1, m01 352bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t5, filt, m01 353bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SHSUB8 t1, t1, t4 354bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL tC, tC, m00 355bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 356bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Split into positive and negative part and clip 357bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 358bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SSUB8 t1, t1, m00 359bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL pos, t1, m00 360bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 neg, pos, t1 361bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t3, pos, tC 362bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL pos, tC, pos 363bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t3, neg, tC 364bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL neg, tC, neg 365bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UQADD8 P_0, p_0, pos 366bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UQSUB8 Q_0, q_0, pos 367bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UQSUB8 P_0, P_0, neg 368bebc99d6fa433c04139294a5057f8439d772dbd9James Dong UQADD8 Q_0, Q_0, neg 369bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 370bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Choose to store the filtered 371bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// value or the original pixel 372bebc99d6fa433c04139294a5057f8439d772dbd9James Dong USUB8 t1, filt, m01 373bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL P_0, P_0, p_0 374bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SEL Q_0, Q_0, q_0 375bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 376bebc99d6fa433c04139294a5057f8439d772dbd9James DongStoreResultAndExit 377bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 378bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;//---------Store result--------------- 379bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 380bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// P_0 = [r0p0 r1p0 r2p0 r3p0] 381bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Q_0 = [r0q0 r1q0 r2q0 r3q0] 382bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 383bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pQ0, pQ0, srcdstStep, LSL #1 384bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pQ0, pQ0, #1 385bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 386bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV t1, Q_0, LSR #24 387bebc99d6fa433c04139294a5057f8439d772dbd9James Dong STRB t1, [pQ0, #1] 388bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV t1, P_0, LSR #24 389bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STRB t1, [pQ0], srcdstStep 390bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 391bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV t1, Q_0, LSR #16 392bebc99d6fa433c04139294a5057f8439d772dbd9James Dong STRB t1, [pQ0, #1] 393bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV t1, P_0, LSR #16 394bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STRB t1, [pQ0], srcdstStep 395bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 396bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV t1, P_0, LSR #8 397bebc99d6fa433c04139294a5057f8439d772dbd9James Dong STRB t1, [pQ0] 398bebc99d6fa433c04139294a5057f8439d772dbd9James Dong STRB P_0, [pQ0, srcdstStep] 399bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV t1, Q_0, LSR #8 400bebc99d6fa433c04139294a5057f8439d772dbd9James Dong STRB t1, [pQ0, #1]! 401bebc99d6fa433c04139294a5057f8439d772dbd9James Dong STRB Q_0, [pQ0, srcdstStep] 402bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 403bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRD XY, pBS, pXYBS 404bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRD alpha, beta, pAlphaBeta1 405bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 406bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pQ0, pQ0, srcdstStep, LSL #1 407bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pQ0, pQ0, #4 408bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 409bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADDS XY, XY, XY 410bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR XY, pXYBS 411bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BCC LoopX 412bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 413bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//-------- Common Exit of LoopY ----------------- 414bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ;// Align the pointers 415bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 416bebc99d6fa433c04139294a5057f8439d772dbd9James DongExitLoopY 417bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 418bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDR pThresholds, ppThresholds 419bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pQ0, pQ0, #8 420bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ADD pQ0, pQ0, srcdstStep, LSL #2 421bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pBS, pBS, #14 422bebc99d6fa433c04139294a5057f8439d772dbd9James Dong SUB pThresholds, pThresholds, #6 423bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_STR pThresholds, ppThresholds 424bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 425bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_LDRD alpha, beta, pAlphaBeta0 426bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 427bebc99d6fa433c04139294a5057f8439d772dbd9James Dong BNE LoopY 428bebc99d6fa433c04139294a5057f8439d772dbd9James Dong MOV r0, #OMX_Sts_NoErr 429bebc99d6fa433c04139294a5057f8439d772dbd9James Dong;//-----------------End Filter-------------------- 430bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 431bebc99d6fa433c04139294a5057f8439d772dbd9James Dong M_END 432bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 433bebc99d6fa433c04139294a5057f8439d772dbd9James Dong ENDIF 434bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 435bebc99d6fa433c04139294a5057f8439d772dbd9James Dong END 436bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 437bebc99d6fa433c04139294a5057f8439d772dbd9James Dong 438