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_build_intra_predictors_mby_neon_func|
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    EXPORT  |vp8_build_intra_predictors_mby_s_neon_func|
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ARM
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    REQUIRE8
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    PRESERVE8
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    AREA ||.text||, CODE, READONLY, ALIGN=2
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r0    unsigned char *y_buffer
21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r1    unsigned char *ypred_ptr
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r2    int y_stride
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r3    int mode
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; stack int Up
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; stack int Left
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|vp8_build_intra_predictors_mby_neon_func| PROC
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push            {r4-r8, lr}
2977496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpush           {d8-d15}
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #0
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_dc_pred
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #1
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_v_pred
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #2
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_h_pred
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #3
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_tm_pred
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_dc_pred
4177496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    ldr             r4, [sp, #88]       ; Up
4277496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    ldr             r5, [sp, #92]       ; Left
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Default the DC average to 128
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r12, #128
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r12
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Zero out running sum
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r12, #0
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; compute shift and jump
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    adds            r7, r4, r5
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             skip_dc_pred_up_left
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load above row, if it exists
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r4, #0
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             skip_dc_pred_up
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r6, r0, r2
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vld1.8          {q1}, [r6]
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpaddl.u8       q2, q1
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpaddl.u16      q3, q2
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpaddl.u32      q4, q3
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmov.32         r4, d8[0]
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmov.32         r6, d9[0]
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r4, r6
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Move back to interger registers
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgskip_dc_pred_up
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r5, #0
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             skip_dc_pred_left
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r0, r0, #1
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load left row, if it exists
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
84474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0]
114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgskip_dc_pred_left
121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r7, r7, #3          ; Shift
122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r4, r7, #1
123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r5, #1
124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5, lsl r4
125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r5, r12, lsr r7     ; expected_dc
126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r5
128474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgskip_dc_pred_up_left
130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
14777496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_v_pred
150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Copy down above row
151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r6, r0, r2
152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vld1.8          {q0}, [r6]
153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
17077496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_h_pred
174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load 4x yleft_col
175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r0, r0, #1
176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1]!
187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1]!
188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1]!
189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1]!
200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1]!
201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1]!
202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1]!
214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1]!
215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1]!
216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1]!
227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1]!
228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1]!
229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
23077496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_tm_pred
234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load yabove_row
235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r3, r0, r2
236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vld1.8          {q8}, [r3]
237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load ytop_left
239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r3, r3, #1
240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r7, [r3]
241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q7, r7
243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Compute yabove_row - ytop_left
245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r3, #1
246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmull.u8        q4, d16, d0
249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmull.u8        q5, d17, d0
250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vsub.s16        q4, q4, q7
252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vsub.s16        q5, q5, q7
253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load 4x yleft_col
255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r0, r0, #1
256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r12, #4
257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_tm_pred_loop
259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q0, r3
264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q1, r4
265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q2, r5
266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q3, r6
267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q8, q0, q4
269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q9, q0, q5
270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q10, q1, q4
272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q11, q1, q5
273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q12, q2, q4
275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q13, q2, q5
276474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
277474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q14, q3, q4
278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q15, q3, q5
279474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
280474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d0, q8, #0
281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d1, q9, #0
282474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
283474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d2, q10, #0
284474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d3, q11, #0
285474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
286474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d4, q12, #0
287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d5, q13, #0
288474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
289474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d6, q14, #0
290474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d7, q15, #0
291474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1]!
293474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1]!
294474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1]!
295474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1]!
296474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    subs            r12, r12, #1
298474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    bne             case_tm_pred_loop
299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
30077496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
301474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
303474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENDP
304474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
306474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r0    unsigned char *y_buffer
307474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r1    unsigned char *ypred_ptr
308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r2    int y_stride
309474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; r3    int mode
310474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; stack int Up
311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org; stack int Left
312474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
313474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org|vp8_build_intra_predictors_mby_s_neon_func| PROC
314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push            {r4-r8, lr}
31577496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpush           {d8-d15}
316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r1, r0      ;   unsigned char *ypred_ptr = x->dst.y_buffer; //x->Predictor;
318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #0
320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_dc_pred_s
321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #1
322474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_v_pred_s
323474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #2
324474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_h_pred_s
325474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r3, #3
326474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             case_tm_pred_s
327474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
328474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_dc_pred_s
32977496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    ldr             r4, [sp, #88]       ; Up
33077496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    ldr             r5, [sp, #92]       ; Left
331474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
332474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Default the DC average to 128
333474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r12, #128
334474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r12
335474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
336474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Zero out running sum
337474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r12, #0
338474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
339474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; compute shift and jump
340474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    adds            r7, r4, r5
341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             skip_dc_pred_up_left_s
342474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
343474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load above row, if it exists
344474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r4, #0
345474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             skip_dc_pred_up_s
346474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r6, r0, r2
348474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vld1.8          {q1}, [r6]
349474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpaddl.u8       q2, q1
350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpaddl.u16      q3, q2
351474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vpaddl.u32      q4, q3
352474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmov.32         r4, d8[0]
354474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmov.32         r6, d9[0]
355474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r4, r6
357474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
358474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Move back to interger registers
359474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
360474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgskip_dc_pred_up_s
361474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
362474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    cmp             r5, #0
363474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    beq             skip_dc_pred_left_s
364474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
365474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r0, r0, #1
366474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
367474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load left row, if it exists
368474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
370474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
371474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
372474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
373474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
374474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
375474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
376474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
377474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
378474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
379474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
380474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
381474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
382474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
383474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
384474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
385474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
386474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
387474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
388474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
389474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
390474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
391474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
392474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
393474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
394474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
395474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
396474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
397474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
398474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
399474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
400474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
401474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0]
402474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
403474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r3
404474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r4
405474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5
406474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r6
407474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
408474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgskip_dc_pred_left_s
409474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r7, r7, #3          ; Shift
410474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r4, r7, #1
411474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r5, #1
412474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    add             r12, r12, r5, lsl r4
413474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r5, r12, lsr r7     ; expected_dc
414474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
415474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r5
416474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
417474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgskip_dc_pred_up_left_s
418474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
419474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
420474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
421474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
422474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
423474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
424474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
425474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
426474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
427474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
428474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
429474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
430474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
431474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
432474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
433474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
434474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
43577496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
436474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
437474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_v_pred_s
438474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Copy down above row
439474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r6, r0, r2
440474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vld1.8          {q0}, [r6]
441474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
442474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
443474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
444474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
445474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
446474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
447474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
449474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
451474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
452474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
453474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
454474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
456474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
457474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
45877496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org
45977496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
460474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
461474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
462474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_h_pred_s
463474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load 4x yleft_col
464474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r0, r0, #1
465474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
466474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
467474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
468474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
469474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
470474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
471474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
472474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
473474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
474474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
475474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1], r2
476474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1], r2
477474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1], r2
478474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
479474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
480474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
482474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
483474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
484474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
485474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
486474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
487474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
488474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1], r2
489474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1], r2
490474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1], r2
491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
492474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
493474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
494474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
495474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
496474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
498474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
499474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
500474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
501474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
502474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1], r2
503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1], r2
504474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1], r2
505474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
506474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
507474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
508474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
509474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
510474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
511474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q1, r4
512474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q2, r5
513474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q3, r6
514474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
515474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1], r2
516474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1], r2
517474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1], r2
518474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
51977496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
520474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
521474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
522474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_tm_pred_s
523474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load yabove_row
524474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r3, r0, r2
525474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vld1.8          {q8}, [r3]
526474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
527474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load ytop_left
528474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r3, r3, #1
529474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r7, [r3]
530474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
531474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q7, r7
532474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
533474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Compute yabove_row - ytop_left
534474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r3, #1
535474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u8         q0, r3
536474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
537474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmull.u8        q4, d16, d0
538474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vmull.u8        q5, d17, d0
539474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
540474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vsub.s16        q4, q4, q7
541474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vsub.s16        q5, q5, q7
542474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
543474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; Load 4x yleft_col
544474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    sub             r0, r0, #1
545474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov             r12, #4
546474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
547474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgcase_tm_pred_loop_s
548474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r3, [r0], r2
549474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r4, [r0], r2
550474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r5, [r0], r2
551474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ldrb            r6, [r0], r2
552474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q0, r3
553474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q1, r4
554474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q2, r5
555474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vdup.u16        q3, r6
556474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
557474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q8, q0, q4
558474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q9, q0, q5
559474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
560474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q10, q1, q4
561474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q11, q1, q5
562474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
563474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q12, q2, q4
564474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q13, q2, q5
565474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
566474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q14, q3, q4
567474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqadd.s16       q15, q3, q5
568474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
569474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d0, q8, #0
570474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d1, q9, #0
571474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
572474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d2, q10, #0
573474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d3, q11, #0
574474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
575474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d4, q12, #0
576474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d5, q13, #0
577474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
578474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d6, q14, #0
579474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vqshrun.s16     d7, q15, #0
580474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
581474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q0}, [r1], r2
582474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q1}, [r1], r2
583474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q2}, [r1], r2
584474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    vst1.u8         {q3}, [r1], r2
585474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
586474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    subs            r12, r12, #1
587474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    bne             case_tm_pred_loop_s
588474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
58977496404dc182c2f4a5f86ebabffe1d1ceb81e7ejohannkoenig@chromium.org    vpop            {d8-d15}
590474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop             {r4-r8,pc}
591474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
592474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ENDP
593474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
594474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
595474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    END
596