1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org EXPORT |vp8_loop_filter_simple_horizontal_edge_armv6| 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org EXPORT |vp8_loop_filter_simple_vertical_edge_armv6| 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org AREA |.text|, CODE, READONLY ; name this block of code 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MACRO 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org TRANSPOSE_MATRIX $a0, $a1, $a2, $a3, $b0, $b1, $b2, $b3 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; input: $a0, $a1, $a2, $a3; output: $b0, $b1, $b2, $b3 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; a0: 03 02 01 00 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; a1: 13 12 11 10 22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; a2: 23 22 21 20 23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; a3: 33 32 31 30 24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; b3 b2 b1 b0 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $b1, $a1 ; xx 12 xx 10 27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $b0, $a0 ; xx 02 xx 00 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $b3, $a3 ; xx 32 xx 30 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $b2, $a2 ; xx 22 xx 20 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr $b1, $b0, $b1, lsl #8 ; 12 02 10 00 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr $b3, $b2, $b3, lsl #8 ; 32 22 30 20 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $a1, $a1, ror #8 ; xx 13 xx 11 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $a3, $a3, ror #8 ; xx 33 xx 31 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $a0, $a0, ror #8 ; xx 03 xx 01 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uxtb16 $a2, $a2, ror #8 ; xx 23 xx 21 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr $a0, $a0, $a1, lsl #8 ; 13 03 11 01 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr $a2, $a2, $a3, lsl #8 ; 33 23 31 21 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhtb $b2, $b3, $b1, asr #16 ; 32 22 12 02 -- p1 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt $b0, $b1, $b3, lsl #16 ; 30 20 10 00 -- p3 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhtb $b3, $a2, $a0, asr #16 ; 33 23 13 03 -- p0 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt $b1, $a0, $a2, lsl #16 ; 31 21 11 01 -- p2 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org MEND 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsrc RN r0 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgpstep RN r1 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;r0 unsigned char *src_ptr, 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;r1 int src_pixel_step, 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;r2 const char *blimit 55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|vp8_loop_filter_simple_horizontal_edge_armv6| PROC 58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org stmdb sp!, {r4 - r11, lr} 60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrb r12, [r2] ; blimit 62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r3, [src, -pstep, lsl #1] ; p1 63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r4, [src, -pstep] ; p0 64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r5, [src] ; q0 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r6, [src, pstep] ; q1 66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r12, r12, r12, lsl #8 ; blimit 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r2, c0x80808080 68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r12, r12, r12, lsl #16 ; blimit 69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r9, #4 ; double the count. we're doing 4 at a time 70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov lr, #0 ; need 0 in a couple places 71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|simple_hnext8| 73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; vp8_simple_filter_mask() 74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r7, r3, r6 ; p1 - q1 76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r8, r6, r3 ; q1 - p1 77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r10, r4, r5 ; p0 - q0 78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r11, r5, r4 ; q0 - p0 79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r8, r8, r7 ; abs(p1 - q1) 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r10, r10, r11 ; abs(p0 - q0) 81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqadd8 r10, r10, r10 ; abs(p0 - q0) * 2 82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uhadd8 r8, r8, lr ; abs(p1 - q2) >> 1 83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqadd8 r10, r10, r8 ; abs(p0 - q0)*2 + abs(p1 - q1)/2 84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mvn r8, #0 85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org usub8 r10, r12, r10 ; compare to flimit. usub8 sets GE flags 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sel r10, r8, lr ; filter mask: F or 0 87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cmp r10, #0 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org beq simple_hskip_filter ; skip filtering if all masks are 0x00 89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;vp8_simple_filter() 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r3, r3, r2 ; p1 offset to convert to a signed value 93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r6, r6, r2 ; q1 offset to convert to a signed value 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r4, r4, r2 ; p0 offset to convert to a signed value 95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r5, r5, r2 ; q0 offset to convert to a signed value 96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qsub8 r3, r3, r6 ; vp8_filter = p1 - q1 98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qsub8 r6, r5, r4 ; q0 - p0 99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3, r3, r6 ; += q0 - p0 100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r7, c0x04040404 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3, r3, r6 ; += q0 - p0 102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r8, c0x03030303 103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3, r3, r6 ; vp8_filter = p1-q1 + 3*(q0-p0)) 104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;STALL 105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org and r3, r3, r10 ; vp8_filter &= mask 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r7 , r3 , r7 ; Filter1 = vp8_filter + 4 108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r8 , r3 , r8 ; Filter2 = vp8_filter + 3 109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r7 , r7 , lr 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r8 , r8 , lr 112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r7 , r7 , lr 113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r8 , r8 , lr 114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r7 , r7 , lr ; Filter1 >>= 3 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r8 , r8 , lr ; Filter2 >>= 3 116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qsub8 r5 ,r5, r7 ; u = q0 - Filter1 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r4, r4, r8 ; u = p0 + Filter2 119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r5, r5, r2 ; *oq0 = u^0x80 120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org str r5, [src] ; store oq0 result 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r4, r4, r2 ; *op0 = u^0x80 122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org str r4, [src, -pstep] ; store op0 result 123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|simple_hskip_filter| 125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org subs r9, r9, #1 126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org addne src, src, #4 ; next row 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrne r3, [src, -pstep, lsl #1] ; p1 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrne r4, [src, -pstep] ; p0 130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrne r5, [src] ; q0 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrne r6, [src, pstep] ; q1 132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org bne simple_hnext8 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldmia sp!, {r4 - r11, pc} 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ENDP ; |vp8_loop_filter_simple_horizontal_edge_armv6| 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|vp8_loop_filter_simple_vertical_edge_armv6| PROC 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org stmdb sp!, {r4 - r11, lr} 143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrb r12, [r2] ; r12: blimit 145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r2, c0x80808080 146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r12, r12, r12, lsl #8 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; load soure data to r7, r8, r9, r10 149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r3, [src, #-2] 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] ; preload for next block 151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r4, [src], pstep 152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r12, r12, r12, lsl #16 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r5, [src, #-2] 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] 156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r6, [src], pstep 157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt r7, r3, r4, lsl #16 159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r3, [src, #-2] 161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] 162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r4, [src], pstep 163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt r8, r5, r6, lsl #16 165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r5, [src, #-2] 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] 168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrh r6, [src], pstep 169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r11, #4 ; double the count. we're doing 4 at a time 170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|simple_vnext8| 172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; vp8_simple_filter_mask() function 173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt r9, r3, r4, lsl #16 174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt r10, r5, r6, lsl #16 175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;transpose r7, r8, r9, r10 to r3, r4, r5, r6 177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org TRANSPOSE_MATRIX r7, r8, r9, r10, r3, r4, r5, r6 178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r7, r3, r6 ; p1 - q1 180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r8, r6, r3 ; q1 - p1 181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r9, r4, r5 ; p0 - q0 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqsub8 r10, r5, r4 ; q0 - p0 183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r7, r7, r8 ; abs(p1 - q1) 184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org orr r9, r9, r10 ; abs(p0 - q0) 185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r8, #0 186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqadd8 r9, r9, r9 ; abs(p0 - q0) * 2 187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uhadd8 r7, r7, r8 ; abs(p1 - q1) / 2 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org uqadd8 r7, r7, r9 ; abs(p0 - q0)*2 + abs(p1 - q1)/2 189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mvn r10, #0 ; r10 == -1 190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org usub8 r7, r12, r7 ; compare to flimit 192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sel lr, r10, r8 ; filter mask 193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org cmp lr, #0 195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org beq simple_vskip_filter ; skip filtering 196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;vp8_simple_filter() function 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r3, r3, r2 ; p1 offset to convert to a signed value 199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r6, r6, r2 ; q1 offset to convert to a signed value 200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r4, r4, r2 ; p0 offset to convert to a signed value 201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r5, r5, r2 ; q0 offset to convert to a signed value 202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qsub8 r3, r3, r6 ; vp8_filter = p1 - q1 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qsub8 r6, r5, r4 ; q0 - p0 205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3, r3, r6 ; vp8_filter += q0 - p0 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r9, c0x03030303 ; r9 = 3 208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3, r3, r6 ; vp8_filter += q0 - p0 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldr r7, c0x04040404 211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3, r3, r6 ; vp8_filter = p1-q1 + 3*(q0-p0)) 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;STALL 214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org and r3, r3, lr ; vp8_filter &= mask 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r9 , r3 , r9 ; Filter2 = vp8_filter + 3 217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r3 , r3 , r7 ; Filter1 = vp8_filter + 4 218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r9 , r9 , r8 220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r3 , r3 , r8 221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r9 , r9 , r8 222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r3 , r3 , r8 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r9 , r9 , r8 ; Filter2 >>= 3 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org shadd8 r3 , r3 , r8 ; Filter1 >>= 3 225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ;calculate output 227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org sub src, src, pstep, lsl #2 228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qadd8 r4, r4, r9 ; u = p0 + Filter2 230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org qsub8 r5, r5, r3 ; u = q0 - Filter1 231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r4, r4, r2 ; *op0 = u^0x80 232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org eor r5, r5, r2 ; *oq0 = u^0x80 233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r4, [src, #-1] ; store the result 235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r4, r4, lsr #8 236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r5, [src], pstep 237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r5, r5, lsr #8 238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r4, [src, #-1] 240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r4, r4, lsr #8 241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r5, [src], pstep 242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r5, r5, lsr #8 243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r4, [src, #-1] 245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r4, r4, lsr #8 246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r5, [src], pstep 247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org mov r5, r5, lsr #8 248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r4, [src, #-1] 250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org strb r5, [src], pstep 251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|simple_vskip_filter| 253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org subs r11, r11, #1 254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ; load soure data to r7, r8, r9, r10 256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r3, [src, #-2] 257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] ; preload for next block 258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r4, [src], pstep 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r5, [src, #-2] 261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] 262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r6, [src], pstep 263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt r7, r3, r4, lsl #16 265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r3, [src, #-2] 267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] 268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r4, [src], pstep 269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pkhbt r8, r5, r6, lsl #16 271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r5, [src, #-2] 273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org pld [src, #23] 274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldrneh r6, [src], pstep 275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org bne simple_vnext8 277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ldmia sp!, {r4 - r11, pc} 279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ENDP ; |vp8_loop_filter_simple_vertical_edge_armv6| 280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; Constant Pool 282474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgc0x80808080 DCD 0x80808080 283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgc0x03030303 DCD 0x03030303 284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgc0x04040404 DCD 0x04040404 285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 286474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org END 287