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