Mercurial > libavcodec.hg
changeset 11117:ad6d17b36a3a libavcodec
ARMv6 optimised pix_sum
author | mru |
---|---|
date | Tue, 09 Feb 2010 16:13:52 +0000 |
parents | 0198e3582544 |
children | 001eb7e3e2d3 |
files | arm/dsputil_armv6.S arm/dsputil_init_armv6.c |
diffstat | 2 files changed, 27 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/arm/dsputil_armv6.S Tue Feb 09 16:13:49 2010 +0000 +++ b/arm/dsputil_armv6.S Tue Feb 09 16:13:52 2010 +0000 @@ -594,3 +594,28 @@ mov r0, lr pop {r4-r6, pc} .endfunc + +function ff_pix_sum_armv6, export=1 + push {r4-r7, lr} + mov r12, #16 + mov r2, #0 + mov r3, #0 + mov lr, #0 + ldr r4, [r0] +1: + subs r12, r12, #1 + ldr r5, [r0, #4] + usada8 r2, r4, lr, r2 + ldr r6, [r0, #8] + usada8 r3, r5, lr, r3 + ldr r7, [r0, #12] + usada8 r2, r6, lr, r2 + beq 2f + ldr r4, [r0, r1]! + usada8 r3, r7, lr, r3 + bgt 1b +2: + usada8 r3, r7, lr, r3 + add r0, r2, r3 + pop {r4-r7, pc} +.endfunc
--- a/arm/dsputil_init_armv6.c Tue Feb 09 16:13:49 2010 +0000 +++ b/arm/dsputil_init_armv6.c Tue Feb 09 16:13:52 2010 +0000 @@ -68,6 +68,7 @@ int line_size, int h); int ff_pix_norm1_armv6(uint8_t *pix, int line_size); +int ff_pix_sum_armv6(uint8_t *pix, int line_size); void av_cold ff_dsputil_init_armv6(DSPContext* c, AVCodecContext *avctx) { @@ -116,4 +117,5 @@ c->sse[0] = ff_sse16_armv6; c->pix_norm1 = ff_pix_norm1_armv6; + c->pix_sum = ff_pix_sum_armv6; }