190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;
2f71323e297a928af368937089d3ed71239786f86Andreas Huber;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;
4f71323e297a928af368937089d3ed71239786f86Andreas Huber;  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber;  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber;  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber;  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber;  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    EXPORT  |vp8_build_intra_predictors_mby_neon_func|
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    EXPORT  |vp8_build_intra_predictors_mby_s_neon_func|
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ARM
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    REQUIRE8
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    PRESERVE8
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    AREA ||.text||, CODE, READONLY, ALIGN=2
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r0    unsigned char *y_buffer
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r1    unsigned char *ypred_ptr
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r2    int y_stride
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r3    int mode
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; stack int Up
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; stack int Left
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber|vp8_build_intra_predictors_mby_neon_func| PROC
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push            {r4-r8, lr}
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #0
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_dc_pred
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #1
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_v_pred
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #2
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_h_pred
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #3
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_tm_pred
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_dc_pred
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldr             r4, [sp, #24]       ; Up
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldr             r5, [sp, #28]       ; Left
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Default the DC average to 128
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r12, #128
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r12
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Zero out running sum
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r12, #0
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; compute shift and jump
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    adds            r7, r4, r5
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             skip_dc_pred_up_left
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load above row, if it exists
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r4, #0
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             skip_dc_pred_up
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r6, r0, r2
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.8          {q1}, [r6]
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpaddl.u8       q2, q1
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpaddl.u16      q3, q2
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpaddl.u32      q4, q3
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmov.32         r4, d8[0]
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmov.32         r6, d9[0]
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r4, r6
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Move back to interger registers
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberskip_dc_pred_up
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r5, #0
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             skip_dc_pred_left
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r0, r0, #1
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load left row, if it exists
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0]
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberskip_dc_pred_left
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r7, r7, #3          ; Shift
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r4, r7, #1
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r5, #1
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5, lsl r4
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r5, r12, lsr r7     ; expected_dc
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r5
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberskip_dc_pred_up_left
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_v_pred
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Copy down above row
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r6, r0, r2
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.8          {q0}, [r6]
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_h_pred
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load 4x yleft_col
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r0, r0, #1
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1]!
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1]!
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1]!
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1]!
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1]!
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1]!
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1]!
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1]!
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1]!
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1]!
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1]!
22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1]!
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_tm_pred
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load yabove_row
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r3, r0, r2
23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.8          {q8}, [r3]
23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load ytop_left
23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r3, r3, #1
23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r7, [r3]
23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q7, r7
23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Compute yabove_row - ytop_left
24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r3, #1
24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmull.u8        q4, d16, d0
24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmull.u8        q5, d17, d0
24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q4, q4, q7
24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q5, q5, q7
24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load 4x yleft_col
25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r0, r0, #1
25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r12, #4
25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_tm_pred_loop
25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q0, r3
26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q1, r4
26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q2, r5
26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q3, r6
26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q8, q0, q4
26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q9, q0, q5
26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q10, q1, q4
26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q11, q1, q5
26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q12, q2, q4
27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q13, q2, q5
27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q14, q3, q4
27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q15, q3, q5
27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d0, q8, #0
27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d1, q9, #0
27890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
27990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d2, q10, #0
28090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d3, q11, #0
28190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d4, q12, #0
28390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d5, q13, #0
28490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d6, q14, #0
28690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d7, q15, #0
28790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
28890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1]!
28990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1]!
29090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1]!
29190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1]!
29290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    subs            r12, r12, #1
29490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    bne             case_tm_pred_loop
29590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
29790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
29890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ENDP
29990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r0    unsigned char *y_buffer
30290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r1    unsigned char *ypred_ptr
30390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r2    int y_stride
30490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; r3    int mode
30590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; stack int Up
30690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; stack int Left
30790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
30890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber|vp8_build_intra_predictors_mby_s_neon_func| PROC
30990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push            {r4-r8, lr}
31090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r1, r0      ;   unsigned char *ypred_ptr = x->dst.y_buffer; //x->Predictor;
31290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
31390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #0
31490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_dc_pred_s
31590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #1
31690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_v_pred_s
31790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #2
31890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_h_pred_s
31990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r3, #3
32090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             case_tm_pred_s
32190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_dc_pred_s
32390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldr             r4, [sp, #24]       ; Up
32490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldr             r5, [sp, #28]       ; Left
32590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
32690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Default the DC average to 128
32790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r12, #128
32890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r12
32990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Zero out running sum
33190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r12, #0
33290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; compute shift and jump
33490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    adds            r7, r4, r5
33590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             skip_dc_pred_up_left_s
33690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
33790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load above row, if it exists
33890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r4, #0
33990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             skip_dc_pred_up_s
34090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
34190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r6, r0, r2
34290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.8          {q1}, [r6]
34390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpaddl.u8       q2, q1
34490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpaddl.u16      q3, q2
34590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpaddl.u32      q4, q3
34690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
34790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmov.32         r4, d8[0]
34890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmov.32         r6, d9[0]
34990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r4, r6
35190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Move back to interger registers
35390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberskip_dc_pred_up_s
35590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    cmp             r5, #0
35790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    beq             skip_dc_pred_left_s
35890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
35990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r0, r0, #1
36090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
36190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load left row, if it exists
36290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
36390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
36490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
36590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
36690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
36790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
36890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
36990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
37090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
37190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
37390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
37490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
37590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
37690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
37790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
37890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
37990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
38090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
38190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
38390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
38490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
38590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
38690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
38790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
38890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
38990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
39090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
39190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
39390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
39490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
39590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0]
39690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
39790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r3
39890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r4
39990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5
40090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r6
40190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberskip_dc_pred_left_s
40390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r7, r7, #3          ; Shift
40490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r4, r7, #1
40590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r5, #1
40690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    add             r12, r12, r5, lsl r4
40790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r5, r12, lsr r7     ; expected_dc
40890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
40990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r5
41090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
41190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberskip_dc_pred_up_left_s
41290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
41990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
42890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
42990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
43090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_v_pred_s
43190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Copy down above row
43290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r6, r0, r2
43390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.8          {q0}, [r6]
43490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
43590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
43690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
43790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
43890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
43990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
44990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
45090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
45190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
45290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
45390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_h_pred_s
45490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load 4x yleft_col
45590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r0, r0, #1
45690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
45790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
45890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
45990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
46090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
46190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
46290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
46390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
46490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
46590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
46690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1], r2
46790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1], r2
46890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1], r2
46990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
47090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
47190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
47290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
47390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
47490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
47590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
47690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
47790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
47890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
47990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1], r2
48090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1], r2
48190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1], r2
48290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
48390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
48490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
48590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
48690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
48790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
48890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
48990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
49090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
49190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
49290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
49390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1], r2
49490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1], r2
49590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1], r2
49690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
49790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
49890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
49990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
50090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
50190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
50290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q1, r4
50390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q2, r5
50490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q3, r6
50590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
50690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1], r2
50790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1], r2
50890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1], r2
50990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
51090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
51190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
51290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_tm_pred_s
51390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load yabove_row
51490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r3, r0, r2
51590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.8          {q8}, [r3]
51690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
51790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load ytop_left
51890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r3, r3, #1
51990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r7, [r3]
52090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
52190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q7, r7
52290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
52390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Compute yabove_row - ytop_left
52490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r3, #1
52590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u8         q0, r3
52690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
52790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmull.u8        q4, d16, d0
52890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmull.u8        q5, d17, d0
52990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
53090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q4, q4, q7
53190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q5, q5, q7
53290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
53390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; Load 4x yleft_col
53490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    sub             r0, r0, #1
53590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov             r12, #4
53690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
53790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubercase_tm_pred_loop_s
53890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r3, [r0], r2
53990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r4, [r0], r2
54090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r5, [r0], r2
54190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ldrb            r6, [r0], r2
54290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q0, r3
54390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q1, r4
54490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q2, r5
54590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vdup.u16        q3, r6
54690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
54790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q8, q0, q4
54890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q9, q0, q5
54990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q10, q1, q4
55190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q11, q1, q5
55290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q12, q2, q4
55490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q13, q2, q5
55590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q14, q3, q4
55790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqadd.s16       q15, q3, q5
55890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
55990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d0, q8, #0
56090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d1, q9, #0
56190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
56290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d2, q10, #0
56390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d3, q11, #0
56490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
56590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d4, q12, #0
56690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d5, q13, #0
56790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
56890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d6, q14, #0
56990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqshrun.s16     d7, q15, #0
57090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q0}, [r1], r2
57290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q1}, [r1], r2
57390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q2}, [r1], r2
57490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.u8         {q3}, [r1], r2
57590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    subs            r12, r12, #1
57790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    bne             case_tm_pred_loop_s
57890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
57990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop             {r4-r8,pc}
58090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ENDP
58290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
58490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    END
585