Mercurial > cgi-bin > hgwebdir.cgi > PR > Applications > VSs > VSs__H264__App
diff libavcodec/arm/h264idct_neon.S @ 2:897f711a7157
rearrange to work with autoconf
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Tue, 25 Sep 2012 15:55:33 +0200 |
| parents | |
| children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/libavcodec/arm/h264idct_neon.S Tue Sep 25 15:55:33 2012 +0200 1.3 @@ -0,0 +1,180 @@ 1.4 +/* 1.5 + * Copyright (c) 2008 Mans Rullgard <mans@mansr.com> 1.6 + * 1.7 + * This file is part of FFmpeg. 1.8 + * 1.9 + * FFmpeg is free software; you can redistribute it and/or 1.10 + * modify it under the terms of the GNU Lesser General Public 1.11 + * License as published by the Free Software Foundation; either 1.12 + * version 2.1 of the License, or (at your option) any later version. 1.13 + * 1.14 + * FFmpeg is distributed in the hope that it will be useful, 1.15 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 1.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1.17 + * Lesser General Public License for more details. 1.18 + * 1.19 + * You should have received a copy of the GNU Lesser General Public 1.20 + * License along with FFmpeg; if not, write to the Free Software 1.21 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 1.22 + */ 1.23 + 1.24 +#include "asm.S" 1.25 + 1.26 + preserve8 1.27 + .text 1.28 + 1.29 +function ff_h264_idct_add_neon, export=1 1.30 + vld1.64 {d0-d3}, [r1,:128] 1.31 + 1.32 + vswp d1, d2 1.33 + vadd.i16 d4, d0, d1 1.34 + vshr.s16 q8, q1, #1 1.35 + vsub.i16 d5, d0, d1 1.36 + vadd.i16 d6, d2, d17 1.37 + vsub.i16 d7, d16, d3 1.38 + vadd.i16 q0, q2, q3 1.39 + vsub.i16 q1, q2, q3 1.40 + 1.41 + vtrn.16 d0, d1 1.42 + vtrn.16 d3, d2 1.43 + vtrn.32 d0, d3 1.44 + vtrn.32 d1, d2 1.45 + 1.46 + vadd.i16 d4, d0, d3 1.47 + vld1.32 {d18[0]}, [r0,:32], r2 1.48 + vswp d1, d3 1.49 + vshr.s16 q8, q1, #1 1.50 + vld1.32 {d19[1]}, [r0,:32], r2 1.51 + vsub.i16 d5, d0, d1 1.52 + vld1.32 {d18[1]}, [r0,:32], r2 1.53 + vadd.i16 d6, d16, d3 1.54 + vld1.32 {d19[0]}, [r0,:32], r2 1.55 + vsub.i16 d7, d2, d17 1.56 + sub r0, r0, r2, lsl #2 1.57 + vadd.i16 q0, q2, q3 1.58 + vsub.i16 q1, q2, q3 1.59 + 1.60 + vrshr.s16 q0, q0, #6 1.61 + vrshr.s16 q1, q1, #6 1.62 + 1.63 + vaddw.u8 q0, q0, d18 1.64 + vaddw.u8 q1, q1, d19 1.65 + 1.66 + vqmovun.s16 d0, q0 1.67 + vqmovun.s16 d1, q1 1.68 + 1.69 + vst1.32 {d0[0]}, [r0,:32], r2 1.70 + vst1.32 {d1[1]}, [r0,:32], r2 1.71 + vst1.32 {d0[1]}, [r0,:32], r2 1.72 + vst1.32 {d1[0]}, [r0,:32], r2 1.73 + 1.74 + bx lr 1.75 +endfunc 1.76 + 1.77 +function ff_h264_idct_dc_add_neon, export=1 1.78 + vld1.16 {d2[],d3[]}, [r1,:16] 1.79 + vrshr.s16 q1, q1, #6 1.80 + vld1.32 {d0[0]}, [r0,:32], r2 1.81 + vld1.32 {d0[1]}, [r0,:32], r2 1.82 + vaddw.u8 q2, q1, d0 1.83 + vld1.32 {d1[0]}, [r0,:32], r2 1.84 + vld1.32 {d1[1]}, [r0,:32], r2 1.85 + vaddw.u8 q1, q1, d1 1.86 + vqmovun.s16 d0, q2 1.87 + vqmovun.s16 d1, q1 1.88 + sub r0, r0, r2, lsl #2 1.89 + vst1.32 {d0[0]}, [r0,:32], r2 1.90 + vst1.32 {d0[1]}, [r0,:32], r2 1.91 + vst1.32 {d1[0]}, [r0,:32], r2 1.92 + vst1.32 {d1[1]}, [r0,:32], r2 1.93 + bx lr 1.94 +endfunc 1.95 + 1.96 +function ff_h264_idct_add16_neon, export=1 1.97 + push {r4-r8,lr} 1.98 + mov r4, r0 1.99 + mov r5, r1 1.100 + mov r1, r2 1.101 + mov r2, r3 1.102 + ldr r6, [sp, #24] 1.103 + movrel r7, scan8 1.104 + mov ip, #16 1.105 +1: ldrb r8, [r7], #1 1.106 + ldr r0, [r5], #4 1.107 + ldrb r8, [r6, r8] 1.108 + subs r8, r8, #1 1.109 + blt 2f 1.110 + ldrsh lr, [r1] 1.111 + add r0, r0, r4 1.112 + movne lr, #0 1.113 + cmp lr, #0 1.114 + adrne lr, ff_h264_idct_dc_add_neon 1.115 + adreq lr, ff_h264_idct_add_neon 1.116 + blx lr 1.117 +2: subs ip, ip, #1 1.118 + add r1, r1, #32 1.119 + bne 1b 1.120 + pop {r4-r8,pc} 1.121 +endfunc 1.122 + 1.123 +function ff_h264_idct_add16intra_neon, export=1 1.124 + push {r4-r8,lr} 1.125 + mov r4, r0 1.126 + mov r5, r1 1.127 + mov r1, r2 1.128 + mov r2, r3 1.129 + ldr r6, [sp, #24] 1.130 + movrel r7, scan8 1.131 + mov ip, #16 1.132 +1: ldrb r8, [r7], #1 1.133 + ldr r0, [r5], #4 1.134 + ldrb r8, [r6, r8] 1.135 + add r0, r0, r4 1.136 + cmp r8, #0 1.137 + ldrsh r8, [r1] 1.138 + adrne lr, ff_h264_idct_add_neon 1.139 + adreq lr, ff_h264_idct_dc_add_neon 1.140 + cmpeq r8, #0 1.141 + blxne lr 1.142 + subs ip, ip, #1 1.143 + add r1, r1, #32 1.144 + bne 1b 1.145 + pop {r4-r8,pc} 1.146 +endfunc 1.147 + 1.148 +function ff_h264_idct_add8_neon, export=1 1.149 + push {r4-r10,lr} 1.150 + ldm r0, {r4,r9} 1.151 + add r5, r1, #16*4 1.152 + add r1, r2, #16*32 1.153 + mov r2, r3 1.154 + ldr r6, [sp, #32] 1.155 + movrel r7, scan8+16 1.156 + mov ip, #8 1.157 +1: ldrb r8, [r7], #1 1.158 + ldr r0, [r5], #4 1.159 + ldrb r8, [r6, r8] 1.160 + tst ip, #4 1.161 + addeq r0, r0, r4 1.162 + addne r0, r0, r9 1.163 + cmp r8, #0 1.164 + ldrsh r8, [r1] 1.165 + adrne lr, ff_h264_idct_add_neon 1.166 + adreq lr, ff_h264_idct_dc_add_neon 1.167 + cmpeq r8, #0 1.168 + blxne lr 1.169 + subs ip, ip, #1 1.170 + add r1, r1, #32 1.171 + bne 1b 1.172 + pop {r4-r10,pc} 1.173 +endfunc 1.174 + 1.175 + .section .rodata 1.176 +scan8: .byte 4+1*8, 5+1*8, 4+2*8, 5+2*8 1.177 + .byte 6+1*8, 7+1*8, 6+2*8, 7+2*8 1.178 + .byte 4+3*8, 5+3*8, 4+4*8, 5+4*8 1.179 + .byte 6+3*8, 7+3*8, 6+4*8, 7+4*8 1.180 + .byte 1+1*8, 2+1*8 1.181 + .byte 1+2*8, 2+2*8 1.182 + .byte 1+4*8, 2+4*8 1.183 + .byte 1+5*8, 2+5*8
