annotate ffmpeg/libavcodec/arm/hpeldsp_armv6.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 * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
yading@10 3 *
yading@10 4 * This file is part of FFmpeg.
yading@10 5 *
yading@10 6 * FFmpeg is free software; you can redistribute it and/or
yading@10 7 * modify it under the terms of the GNU Lesser General Public
yading@10 8 * License as published by the Free Software Foundation; either
yading@10 9 * version 2.1 of the License, or (at your option) any later version.
yading@10 10 *
yading@10 11 * FFmpeg is distributed in the hope that it will be useful,
yading@10 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@10 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@10 14 * Lesser General Public License for more details.
yading@10 15 *
yading@10 16 * You should have received a copy of the GNU Lesser General Public
yading@10 17 * License along with FFmpeg; if not, write to the Free Software
yading@10 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@10 19 */
yading@10 20
yading@10 21 #include "libavutil/arm/asm.S"
yading@10 22
yading@10 23 .macro call_2x_pixels type, subp
yading@10 24 function ff_\type\()_pixels16\subp\()_armv6, export=1
yading@10 25 push {r0-r3, lr}
yading@10 26 bl ff_\type\()_pixels8\subp\()_armv6
yading@10 27 pop {r0-r3, lr}
yading@10 28 add r0, r0, #8
yading@10 29 add r1, r1, #8
yading@10 30 b ff_\type\()_pixels8\subp\()_armv6
yading@10 31 endfunc
yading@10 32 .endm
yading@10 33
yading@10 34 call_2x_pixels avg
yading@10 35 call_2x_pixels put, _x2
yading@10 36 call_2x_pixels put, _y2
yading@10 37 call_2x_pixels put, _x2_no_rnd
yading@10 38 call_2x_pixels put, _y2_no_rnd
yading@10 39
yading@10 40 function ff_put_pixels16_armv6, export=1
yading@10 41 push {r4-r11}
yading@10 42 1:
yading@10 43 ldr r5, [r1, #4]
yading@10 44 ldr r6, [r1, #8]
yading@10 45 ldr r7, [r1, #12]
yading@10 46 ldr_post r4, r1, r2
yading@10 47 strd r6, r7, [r0, #8]
yading@10 48 ldr r9, [r1, #4]
yading@10 49 strd_post r4, r5, r0, r2
yading@10 50 ldr r10, [r1, #8]
yading@10 51 ldr r11, [r1, #12]
yading@10 52 ldr_post r8, r1, r2
yading@10 53 strd r10, r11, [r0, #8]
yading@10 54 subs r3, r3, #2
yading@10 55 strd_post r8, r9, r0, r2
yading@10 56 bne 1b
yading@10 57
yading@10 58 pop {r4-r11}
yading@10 59 bx lr
yading@10 60 endfunc
yading@10 61
yading@10 62 function ff_put_pixels8_armv6, export=1
yading@10 63 push {r4-r7}
yading@10 64 1:
yading@10 65 ldr r5, [r1, #4]
yading@10 66 ldr_post r4, r1, r2
yading@10 67 ldr r7, [r1, #4]
yading@10 68 strd_post r4, r5, r0, r2
yading@10 69 ldr_post r6, r1, r2
yading@10 70 subs r3, r3, #2
yading@10 71 strd_post r6, r7, r0, r2
yading@10 72 bne 1b
yading@10 73
yading@10 74 pop {r4-r7}
yading@10 75 bx lr
yading@10 76 endfunc
yading@10 77
yading@10 78 function ff_put_pixels8_x2_armv6, export=1
yading@10 79 push {r4-r11, lr}
yading@10 80 mov r12, #1
yading@10 81 orr r12, r12, r12, lsl #8
yading@10 82 orr r12, r12, r12, lsl #16
yading@10 83 1:
yading@10 84 ldr r4, [r1]
yading@10 85 subs r3, r3, #2
yading@10 86 ldr r5, [r1, #4]
yading@10 87 ldr r7, [r1, #5]
yading@10 88 lsr r6, r4, #8
yading@10 89 ldr_pre r8, r1, r2
yading@10 90 orr r6, r6, r5, lsl #24
yading@10 91 ldr r9, [r1, #4]
yading@10 92 ldr r11, [r1, #5]
yading@10 93 lsr r10, r8, #8
yading@10 94 add r1, r1, r2
yading@10 95 orr r10, r10, r9, lsl #24
yading@10 96 eor r14, r4, r6
yading@10 97 uhadd8 r4, r4, r6
yading@10 98 eor r6, r5, r7
yading@10 99 uhadd8 r5, r5, r7
yading@10 100 and r14, r14, r12
yading@10 101 and r6, r6, r12
yading@10 102 uadd8 r4, r4, r14
yading@10 103 eor r14, r8, r10
yading@10 104 uadd8 r5, r5, r6
yading@10 105 eor r6, r9, r11
yading@10 106 uhadd8 r8, r8, r10
yading@10 107 and r14, r14, r12
yading@10 108 uhadd8 r9, r9, r11
yading@10 109 and r6, r6, r12
yading@10 110 uadd8 r8, r8, r14
yading@10 111 strd_post r4, r5, r0, r2
yading@10 112 uadd8 r9, r9, r6
yading@10 113 strd_post r8, r9, r0, r2
yading@10 114 bne 1b
yading@10 115
yading@10 116 pop {r4-r11, pc}
yading@10 117 endfunc
yading@10 118
yading@10 119 function ff_put_pixels8_y2_armv6, export=1
yading@10 120 push {r4-r11}
yading@10 121 mov r12, #1
yading@10 122 orr r12, r12, r12, lsl #8
yading@10 123 orr r12, r12, r12, lsl #16
yading@10 124 ldr r4, [r1]
yading@10 125 ldr r5, [r1, #4]
yading@10 126 ldr_pre r6, r1, r2
yading@10 127 ldr r7, [r1, #4]
yading@10 128 1:
yading@10 129 subs r3, r3, #2
yading@10 130 uhadd8 r8, r4, r6
yading@10 131 eor r10, r4, r6
yading@10 132 uhadd8 r9, r5, r7
yading@10 133 eor r11, r5, r7
yading@10 134 and r10, r10, r12
yading@10 135 ldr_pre r4, r1, r2
yading@10 136 uadd8 r8, r8, r10
yading@10 137 and r11, r11, r12
yading@10 138 uadd8 r9, r9, r11
yading@10 139 ldr r5, [r1, #4]
yading@10 140 uhadd8 r10, r4, r6
yading@10 141 eor r6, r4, r6
yading@10 142 uhadd8 r11, r5, r7
yading@10 143 and r6, r6, r12
yading@10 144 eor r7, r5, r7
yading@10 145 uadd8 r10, r10, r6
yading@10 146 and r7, r7, r12
yading@10 147 ldr_pre r6, r1, r2
yading@10 148 uadd8 r11, r11, r7
yading@10 149 strd_post r8, r9, r0, r2
yading@10 150 ldr r7, [r1, #4]
yading@10 151 strd_post r10, r11, r0, r2
yading@10 152 bne 1b
yading@10 153
yading@10 154 pop {r4-r11}
yading@10 155 bx lr
yading@10 156 endfunc
yading@10 157
yading@10 158 function ff_put_pixels8_x2_no_rnd_armv6, export=1
yading@10 159 push {r4-r9, lr}
yading@10 160 1:
yading@10 161 subs r3, r3, #2
yading@10 162 ldr r4, [r1]
yading@10 163 ldr r5, [r1, #4]
yading@10 164 ldr r7, [r1, #5]
yading@10 165 ldr_pre r8, r1, r2
yading@10 166 ldr r9, [r1, #4]
yading@10 167 ldr r14, [r1, #5]
yading@10 168 add r1, r1, r2
yading@10 169 lsr r6, r4, #8
yading@10 170 orr r6, r6, r5, lsl #24
yading@10 171 lsr r12, r8, #8
yading@10 172 orr r12, r12, r9, lsl #24
yading@10 173 uhadd8 r4, r4, r6
yading@10 174 uhadd8 r5, r5, r7
yading@10 175 uhadd8 r8, r8, r12
yading@10 176 uhadd8 r9, r9, r14
yading@10 177 stm r0, {r4,r5}
yading@10 178 add r0, r0, r2
yading@10 179 stm r0, {r8,r9}
yading@10 180 add r0, r0, r2
yading@10 181 bne 1b
yading@10 182
yading@10 183 pop {r4-r9, pc}
yading@10 184 endfunc
yading@10 185
yading@10 186 function ff_put_pixels8_y2_no_rnd_armv6, export=1
yading@10 187 push {r4-r9, lr}
yading@10 188 ldr r4, [r1]
yading@10 189 ldr r5, [r1, #4]
yading@10 190 ldr_pre r6, r1, r2
yading@10 191 ldr r7, [r1, #4]
yading@10 192 1:
yading@10 193 subs r3, r3, #2
yading@10 194 uhadd8 r8, r4, r6
yading@10 195 ldr_pre r4, r1, r2
yading@10 196 uhadd8 r9, r5, r7
yading@10 197 ldr r5, [r1, #4]
yading@10 198 uhadd8 r12, r4, r6
yading@10 199 ldr_pre r6, r1, r2
yading@10 200 uhadd8 r14, r5, r7
yading@10 201 ldr r7, [r1, #4]
yading@10 202 stm r0, {r8,r9}
yading@10 203 add r0, r0, r2
yading@10 204 stm r0, {r12,r14}
yading@10 205 add r0, r0, r2
yading@10 206 bne 1b
yading@10 207
yading@10 208 pop {r4-r9, pc}
yading@10 209 endfunc
yading@10 210
yading@10 211 function ff_avg_pixels8_armv6, export=1
yading@10 212 pld [r1, r2]
yading@10 213 push {r4-r10, lr}
yading@10 214 mov lr, #1
yading@10 215 orr lr, lr, lr, lsl #8
yading@10 216 orr lr, lr, lr, lsl #16
yading@10 217 ldrd r4, r5, [r0]
yading@10 218 ldr r10, [r1, #4]
yading@10 219 ldr_post r9, r1, r2
yading@10 220 subs r3, r3, #2
yading@10 221 1:
yading@10 222 pld [r1, r2]
yading@10 223 eor r8, r4, r9
yading@10 224 uhadd8 r4, r4, r9
yading@10 225 eor r12, r5, r10
yading@10 226 ldrd_reg r6, r7, r0, r2
yading@10 227 uhadd8 r5, r5, r10
yading@10 228 and r8, r8, lr
yading@10 229 ldr r10, [r1, #4]
yading@10 230 and r12, r12, lr
yading@10 231 uadd8 r4, r4, r8
yading@10 232 ldr_post r9, r1, r2
yading@10 233 eor r8, r6, r9
yading@10 234 uadd8 r5, r5, r12
yading@10 235 pld [r1, r2, lsl #1]
yading@10 236 eor r12, r7, r10
yading@10 237 uhadd8 r6, r6, r9
yading@10 238 strd_post r4, r5, r0, r2
yading@10 239 uhadd8 r7, r7, r10
yading@10 240 beq 2f
yading@10 241 and r8, r8, lr
yading@10 242 ldrd_reg r4, r5, r0, r2
yading@10 243 uadd8 r6, r6, r8
yading@10 244 ldr r10, [r1, #4]
yading@10 245 and r12, r12, lr
yading@10 246 subs r3, r3, #2
yading@10 247 uadd8 r7, r7, r12
yading@10 248 ldr_post r9, r1, r2
yading@10 249 strd_post r6, r7, r0, r2
yading@10 250 b 1b
yading@10 251 2:
yading@10 252 and r8, r8, lr
yading@10 253 and r12, r12, lr
yading@10 254 uadd8 r6, r6, r8
yading@10 255 uadd8 r7, r7, r12
yading@10 256 strd_post r6, r7, r0, r2
yading@10 257
yading@10 258 pop {r4-r10, pc}
yading@10 259 endfunc