annotate ffmpeg/libavcodec/arm/dsputil_arm.S @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents 6840f77b83aa
children
rev   line source
yading@10 1 @
yading@10 2 @ ARMv4 optimized DSP utils
yading@10 3 @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
yading@10 4 @
yading@10 5 @ This file is part of FFmpeg.
yading@10 6 @
yading@10 7 @ FFmpeg is free software; you can redistribute it and/or
yading@10 8 @ modify it under the terms of the GNU Lesser General Public
yading@10 9 @ License as published by the Free Software Foundation; either
yading@10 10 @ version 2.1 of the License, or (at your option) any later version.
yading@10 11 @
yading@10 12 @ FFmpeg is distributed in the hope that it will be useful,
yading@10 13 @ but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@10 14 @ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@10 15 @ Lesser General Public License for more details.
yading@10 16 @
yading@10 17 @ You should have received a copy of the GNU Lesser General Public
yading@10 18 @ License along with FFmpeg; if not, write to the Free Software
yading@10 19 @ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@10 20 @
yading@10 21
yading@10 22 #include "config.h"
yading@10 23 #include "libavutil/arm/asm.S"
yading@10 24
yading@10 25 #if !HAVE_ARMV5TE_EXTERNAL
yading@10 26 #define pld @
yading@10 27 #endif
yading@10 28
yading@10 29 .align 5
yading@10 30 @ void ff_add_pixels_clamped_arm(int16_t *block, uint8_t *dest, int stride)
yading@10 31 function ff_add_pixels_clamped_arm, export=1
yading@10 32 push {r4-r10}
yading@10 33 mov r10, #8
yading@10 34 1:
yading@10 35 ldr r4, [r1] /* load dest */
yading@10 36 /* block[0] and block[1]*/
yading@10 37 ldrsh r5, [r0]
yading@10 38 ldrsh r7, [r0, #2]
yading@10 39 and r6, r4, #0xFF
yading@10 40 and r8, r4, #0xFF00
yading@10 41 add r6, r6, r5
yading@10 42 add r8, r7, r8, lsr #8
yading@10 43 mvn r5, r5
yading@10 44 mvn r7, r7
yading@10 45 tst r6, #0x100
yading@10 46 it ne
yading@10 47 movne r6, r5, lsr #24
yading@10 48 tst r8, #0x100
yading@10 49 it ne
yading@10 50 movne r8, r7, lsr #24
yading@10 51 mov r9, r6
yading@10 52 ldrsh r5, [r0, #4] /* moved form [A] */
yading@10 53 orr r9, r9, r8, lsl #8
yading@10 54 /* block[2] and block[3] */
yading@10 55 /* [A] */
yading@10 56 ldrsh r7, [r0, #6]
yading@10 57 and r6, r4, #0xFF0000
yading@10 58 and r8, r4, #0xFF000000
yading@10 59 add r6, r5, r6, lsr #16
yading@10 60 add r8, r7, r8, lsr #24
yading@10 61 mvn r5, r5
yading@10 62 mvn r7, r7
yading@10 63 tst r6, #0x100
yading@10 64 it ne
yading@10 65 movne r6, r5, lsr #24
yading@10 66 tst r8, #0x100
yading@10 67 it ne
yading@10 68 movne r8, r7, lsr #24
yading@10 69 orr r9, r9, r6, lsl #16
yading@10 70 ldr r4, [r1, #4] /* moved form [B] */
yading@10 71 orr r9, r9, r8, lsl #24
yading@10 72 /* store dest */
yading@10 73 ldrsh r5, [r0, #8] /* moved form [C] */
yading@10 74 str r9, [r1]
yading@10 75
yading@10 76 /* load dest */
yading@10 77 /* [B] */
yading@10 78 /* block[4] and block[5] */
yading@10 79 /* [C] */
yading@10 80 ldrsh r7, [r0, #10]
yading@10 81 and r6, r4, #0xFF
yading@10 82 and r8, r4, #0xFF00
yading@10 83 add r6, r6, r5
yading@10 84 add r8, r7, r8, lsr #8
yading@10 85 mvn r5, r5
yading@10 86 mvn r7, r7
yading@10 87 tst r6, #0x100
yading@10 88 it ne
yading@10 89 movne r6, r5, lsr #24
yading@10 90 tst r8, #0x100
yading@10 91 it ne
yading@10 92 movne r8, r7, lsr #24
yading@10 93 mov r9, r6
yading@10 94 ldrsh r5, [r0, #12] /* moved from [D] */
yading@10 95 orr r9, r9, r8, lsl #8
yading@10 96 /* block[6] and block[7] */
yading@10 97 /* [D] */
yading@10 98 ldrsh r7, [r0, #14]
yading@10 99 and r6, r4, #0xFF0000
yading@10 100 and r8, r4, #0xFF000000
yading@10 101 add r6, r5, r6, lsr #16
yading@10 102 add r8, r7, r8, lsr #24
yading@10 103 mvn r5, r5
yading@10 104 mvn r7, r7
yading@10 105 tst r6, #0x100
yading@10 106 it ne
yading@10 107 movne r6, r5, lsr #24
yading@10 108 tst r8, #0x100
yading@10 109 it ne
yading@10 110 movne r8, r7, lsr #24
yading@10 111 orr r9, r9, r6, lsl #16
yading@10 112 add r0, r0, #16 /* moved from [E] */
yading@10 113 orr r9, r9, r8, lsl #24
yading@10 114 subs r10, r10, #1 /* moved from [F] */
yading@10 115 /* store dest */
yading@10 116 str r9, [r1, #4]
yading@10 117
yading@10 118 /* [E] */
yading@10 119 /* [F] */
yading@10 120 add r1, r1, r2
yading@10 121 bne 1b
yading@10 122
yading@10 123 pop {r4-r10}
yading@10 124 bx lr
yading@10 125 endfunc