1 ;// 2 ;// 3 ;// File Name: armVCM4P10_DeblockingChroma_unsafe_s.s 4 ;// OpenMAX DL: v1.0.2 5 ;// Revision: 12290 6 ;// Date: Wednesday, April 9, 2008 7 ;// 8 ;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved. 9 ;// 10 ;// 11 ;// 12 13 INCLUDE omxtypes_s.h 14 INCLUDE armCOMM_s.h 15 16 M_VARIANTS CortexA8 17 18 19 IF CortexA8 20 21 pAlpha RN 2 22 pBeta RN 3 23 24 pThresholds RN 5 25 pBS RN 4 26 bS3210 RN 6 27 28 ;// Pixels 29 dP_0 DN D4.U8 30 dP_1 DN D5.U8 31 dP_2 DN D6.U8 32 dP_3 DN D7.U8 33 dQ_0 DN D8.U8 34 dQ_1 DN D9.U8 35 dQ_2 DN D10.U8 36 dQ_3 DN D11.U8 37 38 39 ;// Filtering Decision 40 dAlpha DN D0.U8 41 dBeta DN D2.U8 42 43 dFilt DN D16.U8 44 dAqflg DN D12.U8 45 dApflg DN D17.U8 46 47 dAp0q0 DN D13.U8 48 49 ;// bSLT4 50 dTC3210 DN D18.U8 51 dTCs DN D31.S8 52 dTC DN D31.U8 53 54 dMask_0 DN D14.U8 55 dMask_1 DN D15.U8 56 dMask_4 DN D26.U16 57 58 dTemp DN D28.U8 59 dDummy DN D17.U8 60 61 ;// Computing P0,Q0 62 qDq0p0 QN Q10.S16 63 qDp1q1 QN Q11.S16 64 qDelta QN Q10.S16 ; reuse qDq0p0 65 dDelta DN D20.S8 66 67 68 ;// Computing P1,Q1 69 qP_0n QN Q14.S16 70 qQ_0n QN Q12.S16 71 72 dQ_0n DN D24.U8 73 dP_0n DN D29.U8 74 75 ;// bSGE4 76 77 dHSp0q1 DN D13.U8 78 dHSq0p1 DN D31.U8 79 80 dBS3210 DN D28.U16 81 82 dP_0t DN D13.U8 ;dHSp0q1 83 dQ_0t DN D31.U8 ;Temp1 84 85 dP_0n DN D29.U8 86 dQ_0n DN D24.U8 ;Temp2 87 88 ;// Register usage for - armVCM4P10_DeblockingLumabSLT4_unsafe 89 ;// 90 ;// Inputs - Pixels - p0-p3: D4-D7, q0-q3: D8-D11 91 ;// - Filter masks - filt: D16, aqflg: D12, apflg: D17 92 ;// - Additional Params - pThresholds: r5 93 ;// 94 ;// Outputs - Pixels - P0-P1: D29-D30, Q0-Q1: D24-D25 95 ;// - Additional Params - pThresholds: r5 96 97 ;// Registers Corrupted - D18-D31 98 99 100 M_START armVCM4P10_DeblockingChromabSLT4_unsafe 101 102 103 ;dTC3210 -18 104 ;dTemp-28 105 106 VLD1 d18.U32[0], [pThresholds]! ;here 107 108 ;// delta = (((q0-p0)<<2) + (p1-q1) + 4) >> 3; 109 ;// dDelta = (qDp1q1 >> 2 + qDq0p0 + 1)>> 1 110 111 ;// qDp1q1-11 112 ;// qDq0p0-10 113 VSUBL qDp1q1, dP_1, dQ_1 114 VMOV dTemp, dTC3210 115 VSUBL qDq0p0, dQ_0, dP_0 116 VSHR qDp1q1, qDp1q1, #2 117 VZIP.8 dTC3210, dTemp 118 119 ;// qDelta-qDq0p0-10 120 121 ;// dTC = dTC01 + (dAplg & 1) + (dAqflg & 1) 122 123 ;// dTC3210-18 124 ;// dTemp-28 125 ;// dTC-31 126 VBIF dTC3210, dMask_0, dFilt 127 VRHADD qDelta, qDp1q1, qDq0p0 128 VADD dTC, dTC3210, dMask_1 129 VQMOVN dDelta, qDelta 130 ;// dDelta-d20 131 132 ;// dDelta = (OMX_U8)armClip(0, 255, q0 - delta); 133 VLD1 {dAlpha[]}, [pAlpha] 134 VMIN dDelta, dDelta, dTCs 135 VNEG dTCs, dTCs 136 VLD1 {dBeta[]}, [pBeta] 137 ;1 138 VMAX dDelta, dDelta, dTCs 139 140 ;// dP_0n - 29 141 ;// dQ_0n - 24 142 143 ;// pQ0[-1*Step] = (OMX_U8)armClip(0, 255, dP_0 - delta); 144 ;// pQ0[0*Step] = (OMX_U8)armClip(0, 255, dQ_0 - delta); 145 146 ;// dP_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta); 147 ;// dQ_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta); 148 149 ;// qP_0n - 14 150 ;// qQ_0n - 12 151 152 VMOVL qP_0n, dP_0 153 VMOVL qQ_0n, dQ_0 154 155 ;1 156 VADDW qP_0n, qP_0n, dDelta 157 VSUBW qQ_0n, qQ_0n, dDelta 158 159 VQMOVUN dP_0n, qP_0n 160 VQMOVUN dQ_0n, qQ_0n 161 162 M_END 163 164 ;// Register usage for - armVCM4P10_DeblockingLumabSGE4_unsafe() 165 ;// 166 ;// Inputs - Pixels - p0-p3: D4-D7, q0-q3: D8-D11 167 ;// - Filter masks - filt: D16, aqflg: D12, apflg: D17 168 ;// - Additional Params - alpha: D0, dMask_1: D15 169 ;// 170 ;// Outputs - Pixels - P0-P2: D29-D31, Q0-Q2: D24,D25,D28 171 172 ;// Registers Corrupted - D18-D31 173 174 M_START armVCM4P10_DeblockingChromabSGE4_unsafe 175 176 ;dHSq0p1 - 31 177 ;dHSp0q1 - 13 178 VHADD dHSp0q1, dP_0, dQ_1 179 VHADD dHSq0p1, dQ_0, dP_1 180 181 ;// Prepare the bS mask 182 183 ;// dHSp0q1-13 184 ;// dP_0t-dHSp0q1-13 185 ;// dHSq0p1-31 186 ;// dQ_0t-Temp1-31 187 VLD1 {dAlpha[]}, [pAlpha] 188 ADD pThresholds, pThresholds, #4 189 VLD1 {dBeta[]}, [pBeta] 190 191 VRHADD dP_0t, dHSp0q1, dP_1 192 VRHADD dQ_0t, dHSq0p1, dQ_1 193 194 M_END 195 196 ENDIF 197 198 END 199