179f15823c34ae1e423108295e416213200bb280fAndreas Huber; 279f15823c34ae1e423108295e416213200bb280fAndreas Huber; Copyright (c) 2011 The WebM project authors. All Rights Reserved. 379f15823c34ae1e423108295e416213200bb280fAndreas Huber; 479f15823c34ae1e423108295e416213200bb280fAndreas Huber; Use of this source code is governed by a BSD-style license 579f15823c34ae1e423108295e416213200bb280fAndreas Huber; that can be found in the LICENSE file in the root of the source 679f15823c34ae1e423108295e416213200bb280fAndreas Huber; tree. An additional intellectual property rights grant can be found 779f15823c34ae1e423108295e416213200bb280fAndreas Huber; in the file PATENTS. All contributing project authors may 879f15823c34ae1e423108295e416213200bb280fAndreas Huber; be found in the AUTHORS file in the root of the source tree. 979f15823c34ae1e423108295e416213200bb280fAndreas Huber; 1079f15823c34ae1e423108295e416213200bb280fAndreas Huber 1179f15823c34ae1e423108295e416213200bb280fAndreas Huber 1279f15823c34ae1e423108295e416213200bb280fAndreas Huber EXPORT |vp8_sad16x16_armv6| 1379f15823c34ae1e423108295e416213200bb280fAndreas Huber 1479f15823c34ae1e423108295e416213200bb280fAndreas Huber ARM 1579f15823c34ae1e423108295e416213200bb280fAndreas Huber REQUIRE8 1679f15823c34ae1e423108295e416213200bb280fAndreas Huber PRESERVE8 1779f15823c34ae1e423108295e416213200bb280fAndreas Huber 1879f15823c34ae1e423108295e416213200bb280fAndreas Huber AREA ||.text||, CODE, READONLY, ALIGN=2 1979f15823c34ae1e423108295e416213200bb280fAndreas Huber 2079f15823c34ae1e423108295e416213200bb280fAndreas Huber; r0 const unsigned char *src_ptr 2179f15823c34ae1e423108295e416213200bb280fAndreas Huber; r1 int src_stride 2279f15823c34ae1e423108295e416213200bb280fAndreas Huber; r2 const unsigned char *ref_ptr 2379f15823c34ae1e423108295e416213200bb280fAndreas Huber; r3 int ref_stride 2479f15823c34ae1e423108295e416213200bb280fAndreas Huber; stack max_sad (not used) 2579f15823c34ae1e423108295e416213200bb280fAndreas Huber|vp8_sad16x16_armv6| PROC 2679f15823c34ae1e423108295e416213200bb280fAndreas Huber stmfd sp!, {r4-r12, lr} 271b362b15af34006e6a11974088a46d42b903418eJohann 281b362b15af34006e6a11974088a46d42b903418eJohann pld [r0, r1, lsl #0] 291b362b15af34006e6a11974088a46d42b903418eJohann pld [r2, r3, lsl #0] 301b362b15af34006e6a11974088a46d42b903418eJohann pld [r0, r1, lsl #1] 311b362b15af34006e6a11974088a46d42b903418eJohann pld [r2, r3, lsl #1] 321b362b15af34006e6a11974088a46d42b903418eJohann 3379f15823c34ae1e423108295e416213200bb280fAndreas Huber mov r4, #0 ; sad = 0; 3479f15823c34ae1e423108295e416213200bb280fAndreas Huber mov r5, #8 ; loop count 3579f15823c34ae1e423108295e416213200bb280fAndreas Huber 3679f15823c34ae1e423108295e416213200bb280fAndreas Huberloop 3779f15823c34ae1e423108295e416213200bb280fAndreas Huber ; 1st row 3879f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r6, [r0, #0x0] ; load 4 src pixels (1A) 3979f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r8, [r2, #0x0] ; load 4 ref pixels (1A) 4079f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r7, [r0, #0x4] ; load 4 src pixels (1A) 4179f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r9, [r2, #0x4] ; load 4 ref pixels (1A) 4279f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r10, [r0, #0x8] ; load 4 src pixels (1B) 4379f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r11, [r0, #0xC] ; load 4 src pixels (1B) 4479f15823c34ae1e423108295e416213200bb280fAndreas Huber 4579f15823c34ae1e423108295e416213200bb280fAndreas Huber usada8 r4, r8, r6, r4 ; calculate sad for 4 pixels 4679f15823c34ae1e423108295e416213200bb280fAndreas Huber usad8 r8, r7, r9 ; calculate sad for 4 pixels 4779f15823c34ae1e423108295e416213200bb280fAndreas Huber 4879f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r12, [r2, #0x8] ; load 4 ref pixels (1B) 4979f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr lr, [r2, #0xC] ; load 4 ref pixels (1B) 5079f15823c34ae1e423108295e416213200bb280fAndreas Huber 5179f15823c34ae1e423108295e416213200bb280fAndreas Huber add r0, r0, r1 ; set src pointer to next row 5279f15823c34ae1e423108295e416213200bb280fAndreas Huber add r2, r2, r3 ; set dst pointer to next row 5379f15823c34ae1e423108295e416213200bb280fAndreas Huber 541b362b15af34006e6a11974088a46d42b903418eJohann pld [r0, r1, lsl #1] 551b362b15af34006e6a11974088a46d42b903418eJohann pld [r2, r3, lsl #1] 561b362b15af34006e6a11974088a46d42b903418eJohann 5779f15823c34ae1e423108295e416213200bb280fAndreas Huber usada8 r4, r10, r12, r4 ; calculate sad for 4 pixels 5879f15823c34ae1e423108295e416213200bb280fAndreas Huber usada8 r8, r11, lr, r8 ; calculate sad for 4 pixels 5979f15823c34ae1e423108295e416213200bb280fAndreas Huber 6079f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r6, [r0, #0x0] ; load 4 src pixels (2A) 6179f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r7, [r0, #0x4] ; load 4 src pixels (2A) 6279f15823c34ae1e423108295e416213200bb280fAndreas Huber add r4, r4, r8 ; add partial sad values 6379f15823c34ae1e423108295e416213200bb280fAndreas Huber 6479f15823c34ae1e423108295e416213200bb280fAndreas Huber ; 2nd row 6579f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r8, [r2, #0x0] ; load 4 ref pixels (2A) 6679f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r9, [r2, #0x4] ; load 4 ref pixels (2A) 6779f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r10, [r0, #0x8] ; load 4 src pixels (2B) 6879f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r11, [r0, #0xC] ; load 4 src pixels (2B) 6979f15823c34ae1e423108295e416213200bb280fAndreas Huber 7079f15823c34ae1e423108295e416213200bb280fAndreas Huber usada8 r4, r6, r8, r4 ; calculate sad for 4 pixels 7179f15823c34ae1e423108295e416213200bb280fAndreas Huber usad8 r8, r7, r9 ; calculate sad for 4 pixels 7279f15823c34ae1e423108295e416213200bb280fAndreas Huber 7379f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr r12, [r2, #0x8] ; load 4 ref pixels (2B) 7479f15823c34ae1e423108295e416213200bb280fAndreas Huber ldr lr, [r2, #0xC] ; load 4 ref pixels (2B) 7579f15823c34ae1e423108295e416213200bb280fAndreas Huber 7679f15823c34ae1e423108295e416213200bb280fAndreas Huber add r0, r0, r1 ; set src pointer to next row 7779f15823c34ae1e423108295e416213200bb280fAndreas Huber add r2, r2, r3 ; set dst pointer to next row 7879f15823c34ae1e423108295e416213200bb280fAndreas Huber 7979f15823c34ae1e423108295e416213200bb280fAndreas Huber usada8 r4, r10, r12, r4 ; calculate sad for 4 pixels 8079f15823c34ae1e423108295e416213200bb280fAndreas Huber usada8 r8, r11, lr, r8 ; calculate sad for 4 pixels 8179f15823c34ae1e423108295e416213200bb280fAndreas Huber 821b362b15af34006e6a11974088a46d42b903418eJohann pld [r0, r1, lsl #1] 831b362b15af34006e6a11974088a46d42b903418eJohann pld [r2, r3, lsl #1] 841b362b15af34006e6a11974088a46d42b903418eJohann 8579f15823c34ae1e423108295e416213200bb280fAndreas Huber subs r5, r5, #1 ; decrement loop counter 8679f15823c34ae1e423108295e416213200bb280fAndreas Huber add r4, r4, r8 ; add partial sad values 8779f15823c34ae1e423108295e416213200bb280fAndreas Huber 8879f15823c34ae1e423108295e416213200bb280fAndreas Huber bne loop 8979f15823c34ae1e423108295e416213200bb280fAndreas Huber 9079f15823c34ae1e423108295e416213200bb280fAndreas Huber mov r0, r4 ; return sad 9179f15823c34ae1e423108295e416213200bb280fAndreas Huber ldmfd sp!, {r4-r12, pc} 9279f15823c34ae1e423108295e416213200bb280fAndreas Huber 9379f15823c34ae1e423108295e416213200bb280fAndreas Huber ENDP 9479f15823c34ae1e423108295e416213200bb280fAndreas Huber 9579f15823c34ae1e423108295e416213200bb280fAndreas Huber END 9679f15823c34ae1e423108295e416213200bb280fAndreas Huber 97