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