1;// 2;// 3;// File Name: armVCM4P10_DeblockingLuma_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 21pThresholds RN 5 22 23;// Pixels 24dP_0 DN D4.U8 25dP_1 DN D5.U8 26dP_2 DN D6.U8 27dP_3 DN D7.U8 28dQ_0 DN D8.U8 29dQ_1 DN D9.U8 30dQ_2 DN D10.U8 31dQ_3 DN D11.U8 32 33 34;// Filtering Decision 35dAlpha DN D0.U8 36 37dFilt DN D16.U8 38dAqflg DN D12.U8 39dApflg DN D17.U8 40 41dAp0q0 DN D13.U8 42 43;// bSLT4 44dTC0 DN D18.U8 45dTC1 DN D19.U8 46dTC01 DN D18.U8 47 48dTCs DN D31.S8 49dTC DN D31.U8 50 51dMask_0 DN D14.U8 52dMask_1 DN D15.U8 53 54dTemp DN D19.U8 55 56;// Computing P0,Q0 57qDq0p0 QN Q10.S16 58qDp1q1 QN Q11.S16 59qDelta QN Q10.S16 ; reuse qDq0p0 60dDelta DN D20.S8 61 62 63;// Computing P1,Q1 64dRp0q0 DN D24.U8 65 66dMaxP DN D23.U8 67dMinP DN D22.U8 68 69dMaxQ DN D19.U8 70dMinQ DN D21.U8 71 72dDeltaP DN D26.U8 73dDeltaQ DN D27.U8 74 75qP_0n QN Q14.S16 76qQ_0n QN Q12.S16 77 78dQ_0n DN D24.U8 79dQ_1n DN D25.U8 80dP_0n DN D29.U8 81dP_1n DN D30.U8 82 83;// bSGE4 84 85qSp0q0 QN Q10.U16 86 87qSp2q1 QN Q11.U16 88qSp0q0p1 QN Q12.U16 89qSp3p2 QN Q13.U16 90dHSp0q1 DN D28.U8 91 92qSq2p1 QN Q11.U16 93qSp0q0q1 QN Q12.U16 94qSq3q2 QN Q13.U16 ;!! 95dHSq0p1 DN D28.U8 ;!! 96 97qTemp1 QN Q11.U16 ;!!;qSp2q1 98qTemp2 QN Q12.U16 ;!!;qSp0q0p1 99 100dP_0t DN D28.U8 ;!!;dHSp0q1 101dQ_0t DN D22.U8 ;!!;Temp1 102 103dP_0n DN D29.U8 104dP_1n DN D30.U8 105dP_2n DN D31.U8 106 107dQ_0n DN D24.U8 ;!!;Temp2 108dQ_1n DN D25.U8 ;!!;Temp2 109dQ_2n DN D28.U8 ;!!;dQ_0t 110 111;// Register usage for - armVCM4P10_DeblockingLumabSLT4_unsafe 112;// 113;// Inputs - Pixels - p0-p3: D4-D7, q0-q3: D8-D11 114;// - Filter masks - filt: D16, aqflg: D12, apflg: D17 115;// - Additional Params - pThresholds: r5 116;// 117;// Outputs - Pixels - P0-P1: D29-D30, Q0-Q1: D24-D25 118;// - Additional Params - pThresholds: r5 119 120;// Registers Corrupted - D18-D31 121 122 123 M_START armVCM4P10_DeblockingLumabSLT4_unsafe 124 125 126 ;// qDq0p0-10 127 VSUBL qDp1q1, dP_1, dQ_1 128 VLD1 {dTC0[]}, [pThresholds]! 129 ;// qDp1q1-11 130 VSUBL qDq0p0, dQ_0, dP_0 131 VLD1 {dTC1[]}, [pThresholds]! 132 133 ;// dRp0q0-24 134 VSHR qDp1q1, qDp1q1, #2 135 136 ;// dTC01 = (dTC1 << 4) | dTC0 137 ;// dTC01-18 138 VEXT dTC01, dTC0, dTC1, #4 139 ;// dTemp-19 140 VAND dTemp, dApflg, dMask_1 141 142 VBIF dTC01, dMask_0, dFilt 143 144 145 ;// delta = (((q0-p0)<<2) + (p1-q1) + 4) >> 3; 146 ;// dDelta = (qDp1q1 >> 2 + qDq0p0 + 1)>> 1 147 148 ;// qDelta-qDq0p0-10 149 VRHADD qDelta, qDp1q1, qDq0p0 150 VRHADD dRp0q0, dP_0, dQ_0 151 VADD dTC, dTC01, dTemp 152 153 ;// dTC = dTC01 + (dAplg & 1) + (dAqflg & 1) 154 155 VAND dTemp, dAqflg, dMask_1 156 VQADD dMaxP, dP_1, dTC01 157 VQMOVN dDelta, qDelta 158 VADD dTC, dTC, dTemp 159 160 ;// dMaxP = QADD(dP_1, dTC01) 161 ;// dMinP = QSUB(dP_1, dTC01) 162 163 ;// dMaxP-d23 164 ;// dMinP-d22 165 VQSUB dMinP, dP_1, dTC01 166 167 ;// dDelta-d20 168 169 ;// dMaxQ = QADD(dQ_1, dTC01) 170 ;// dMinQ = QSUB(dQ_1, dTC01) 171 172 ;// dMaxQ-19 173 ;// dMinQ-21 174 VQADD dMaxQ, dQ_1, dTC01 175 VHADD dDeltaP, dRp0q0, dP_2 176 VMIN dDelta, dDelta, dTCs 177 178 ;// dDelta = (OMX_U8)armClip(0, 255, q0 - delta); 179 VNEG dTCs, dTCs 180 181 VQSUB dMinQ, dQ_1, dTC01 182 183 ;// delta = (p2 + ((p0+q0+1)>>1) - (p1<<1))>>1; 184 ;// delta = armClip(-tC0, tC0, delta); 185 ;// pQ0[-2*Step] = (OMX_U8)(p1 + delta); 186 187 ;// dDeltaP = (dP_2 + dRp0q0)>>1; 188 ;// dP_1n = armClip(dP_1 - dTC01, dP_1 + dTC01, dDeltaP); 189 ;// dP_1n = armClip(MinP, MaxP, dDeltaP); 190 191 ;// delta = (q2 + ((p0+q0+1)>>1) - (q1<<1))>>1; 192 ;// delta = armClip(-tC0, tC0, delta); 193 ;// pQ0[1*Step] = (OMX_U8)(q1 + delta); 194 195 ;// dDeltaQ = (dQ_2 + dRp0q0)>>1; 196 ;// dQ_1n = armClip(dQ_1 - dTC01, dQ_1 + dTC01, dDeltaQ); 197 ;// dQ_1n = armClip(MinQ, MaxQ, dDeltaQ); 198 199 ;// dDeltaP-26 200 VHADD dDeltaQ, dRp0q0, dQ_2 201 202 ;// dDeltaQ-27 203 204 ;// dP_0n - 29 205 ;// dP_1n - 30 206 ;// dQ_0n - 24 207 ;// dQ_1n - 25 208 209 ;// delta = (q2 + ((p0+q0+1)>>1) - (q1<<1))>>1; 210 ;// dDeltaQ = (dQ_2 + dRp0q0)>>1; 211 212 VMAX dP_1n, dDeltaP, dMinP 213 VMAX dDelta, dDelta, dTCs 214 215 ;// pQ0[-1*Step] = (OMX_U8)armClip(0, 255, dP_0 - delta); 216 ;// pQ0[0*Step] = (OMX_U8)armClip(0, 255, dQ_0 - delta); 217 218 ;// dP_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta); 219 ;// dQ_0n = (OMX_U8)armClip(0, 255, dP_0 - dDelta); 220 221 ;// qP_0n - 14 222 ;// qQ_0n - 12 223 224 VMOVL qP_0n, dP_0 225 VMOVL qQ_0n, dQ_0 226 227 VADDW qP_0n, qP_0n, dDelta 228 VSUBW qQ_0n, qQ_0n, dDelta 229 230 VQMOVUN dP_0n, qP_0n 231 VQMOVUN dQ_0n, qQ_0n 232 233 VMAX dQ_1n, dDeltaQ, dMinQ 234 235 VMIN dP_1n, dP_1n, dMaxP 236 VMIN dQ_1n, dQ_1n, dMaxQ 237 VBIF dP_0n, dP_0, dFilt 238 239 VBIF dP_1n, dP_1, dApflg 240 VBIF dQ_0n, dQ_0, dFilt 241 VBIF dQ_1n, dQ_1, dAqflg 242 243 M_END 244 245;// Register usage for - armVCM4P10_DeblockingLumabSGE4_unsafe() 246;// 247;// Inputs - Pixels - p0-p3: D4-D7, q0-q3: D8-D11 248;// - Filter masks - filt: D16, aqflg: D12, apflg: D17 249;// - Additional Params - alpha: D0, dMask_1: D15 250;// 251;// Outputs - Pixels - P0-P2: D29-D31, Q0-Q2: D24,D25,D28 252 253;// Registers Corrupted - D18-D31 254 255 M_START armVCM4P10_DeblockingLumabSGE4_unsafe 256 257 258 ;// ap<beta && armAbs(p0-q0)<((alpha>>2)+2) 259 ;// aq<beta && armAbs(p0-q0)<((alpha>>2)+2) 260 261 ;// ( dApflg & dAp0q0 < (dAlpha >> 2 + 2) ) 262 ;// ( dAqflg & dAp0q0 < (dAlpha >> 2 + 2) ) 263 264 ;// ( dApflg = dApflg & dAp0q0 < (dTemp + dMask_1 + dMask_1) ) 265 ;// ( dAqflg = dAqflg & dAp0q0 < (dTemp + dMask_1 + dMask_1) ) 266 267 ;// P Filter 268 269 VSHR dTemp, dAlpha, #2 270 VADD dTemp, dTemp, dMask_1 271 272 ;// qSp0q0-10 273 VADDL qSp0q0, dQ_0, dP_0 274 VADD dTemp, dTemp, dMask_1 275 276 ;// qSp2q1-11 277 ;// qSp0q0p1-12 278 VADDL qSp2q1, dP_2, dQ_1 279 VADDW qSp0q0p1, qSp0q0, dP_1 280 281 VCGT dTemp, dTemp, dAp0q0 282 VSHR qSp2q1, #1 283 284 ;// pQ0[-1*Step] = (OMX_U8)((p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4)>>3); 285 ;// pQ0[-1*Step] = ( ( (p0 + q0 + p1) + (p2 + q1)>>1 ) >> 1 + 1 ) >> 1 286 287 ;// dP_0n = ( ( (qSp0q0 + dP_1) + qSp2q1>>1 ) >> 1 + 1 ) >> 1 288 ;// dP_0n = ( ( qSp0q0p1 + qSp2q1>>1 ) >> 1 + 1 ) >> 1 289 ;// dP_0n = ( qTemp1 + 1 ) >> 1 290 291 ;// pQ0[-2*Step] = (OMX_U8)((p2 + p1 + p0 + q0 + 2)>>2); 292 293 ;// dP_1n = (OMX_U8)((dP_2 + qSp0q0p1 + 2)>>2); 294 ;// dP_1n = (OMX_U8)((qTemp2 + 2)>>2); 295 296 ;// pQ0[-3*Step] = (OMX_U8)((2*p3 + 3*p2 + p1 + p0 + q0 + 4)>>3); 297 ;// pQ0[-3*Step] = (OMX_U8)(( (p3 + p2) + (p1 + p0 + q0 + p2) >> 1 + 2)>>2); 298 299 ;// dP_2n = (OMX_U8)(( qSp3p2 + (dP_2 + qSp0q0p1) >> 1 + 2) >> 2); 300 ;// dP_2n = (OMX_U8)(( qSp3p2 + qTemp2 >> 1 + 2) >> 2); 301 302 ;// qTemp1-qSp2q1-11 303 ;// qTemp2-qSp0q0p1-12 304 VHADD qTemp1, qSp0q0p1, qSp2q1 305 VADDW qTemp2, qSp0q0p1, dP_2 306 307 ;// qSp3p2-13 308 VADDL qSp3p2, dP_3, dP_2 309 310 VAND dApflg, dApflg, dTemp 311 VHADD dHSp0q1, dP_0, dQ_1 312 VSRA qSp3p2, qTemp2, #1 313 ;// dHSp0q1-28 314 VAND dAqflg, dAqflg, dTemp 315 316 ;// dP_0n-29 317 ;// dP_0t-dHSp0q1-28 318 VQRSHRN dP_0n, qTemp1, #1 319 VRHADD dP_0t, dHSp0q1, dP_1 320 321 ;// dP_1n-30 322 VQRSHRN dP_1n, qTemp2, #2 323 324 VADDL qSq2p1, dQ_2, dP_1 325 VADDW qSp0q0q1, qSp0q0, dQ_1 326 327 VBIF dP_0n, dP_0t, dApflg 328 329 ;// Q Filter 330 331 ;// pQ0[0*Step] = (OMX_U8)((q2 + 2*q1 + 2*q0 + 2*p0 + p1 + 4)>>3); 332 ;// pQ0[0*Step] = ( ( (p0 + q0 + q1) + (q2 + p1)>>1 ) >> 1 + 1 ) >> 1 333 334 ;// dQ_0n = ( ( (qSp0q0 + dQ_1) + qSq2p1>>1 ) >> 1 + 1 ) >> 1 335 ;// dQ_0n = ( ( qSp0q0q1 + qSq2p1>>1 ) >> 1 + 1 ) >> 1 336 ;// dQ_0n = ( qTemp1 + 1 ) >> 1 337 338 ;// pQ0[1*Step] = (OMX_U8)((q2 + q1 + q0 + q0 + 2)>>2); 339 340 ;// dQ_1n = (OMX_U8)((dQ_2 + qSp0q0q1 + 2)>>2); 341 ;// dQ_1n = (OMX_U8)((qTemp2 + 2)>>2); 342 343 ;// pQ0[2*Step] = (OMX_U8)((2*q3 + 3*q2 + q1 + q0 + p0 + 4)>>3); 344 ;// pQ0[2*Step] = (OMX_U8)(( (q3 + q2) + (q1 + p0 + q0 + q2) >> 1 + 2)>>2); 345 346 ;// dQ_2n = (OMX_U8)(( qSq3q2 + (dQ_2 + qSp0q0q1) >> 1 + 2) >> 2); 347 ;// dQ_2n = (OMX_U8)(( qSq3q2 + qTemp2 >> 1 + 2) >> 2); 348 349 ;// qTemp1-qSp2q1-11 350 ;// qTemp2-qSp0q0p1-12 351 ;// qSq2p1-11 352 ;// qSp0q0q1-12 353 354 355 ;// qTemp2-qSp0q0p1-12 356 ;// qTemp1-qSq2p1-11 357 ;// qSq3q2-13 358 ;// dP_2n-31 359 360 VQRSHRN dP_2n, qSp3p2, #2 361 VADDL qSq3q2, dQ_3, dQ_2 362 363 VSHR qSq2p1, #1 364 365 VHADD qTemp1, qSp0q0q1, qSq2p1 366 VADDW qTemp2, qSp0q0q1, dQ_2 367 368 ;// dHSq0p1-28 369 VHADD dHSq0p1, dQ_0, dP_1 370 371 VBIF dP_0n, dP_0, dFilt 372 VBIF dP_1n, dP_1, dApflg 373 374 VSRA qSq3q2, qTemp2, #1 375 376 ;// dQ_1-Temp2-25 377 ;// dQ_0-Temp2-24 378 VQRSHRN dQ_1n, qTemp2, #2 379 VQRSHRN dQ_0n, qTemp1, #1 380 381 ;// dQ_0t-Temp1-22 382 VRHADD dQ_0t, dHSq0p1, dQ_1 383 VBIF dQ_1n, dQ_1, dAqflg 384 385 VBIF dP_2n, dP_2, dApflg 386 VBIF dQ_0n, dQ_0t, dAqflg 387 VQRSHRN dQ_2n, qSq3q2, #2 388 VBIF dQ_0n, dQ_0, dFilt 389 VBIF dQ_2n, dQ_2, dAqflg 390 391 M_END 392 393 ENDIF 394 395 396 END 397