- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
cpu-a.S
资源名称:X264CODEC.rar [点击查看]
上传用户:lctgjx
上传日期:2022-06-04
资源大小:8887k
文件大小:3k
源码类别:
流媒体/Mpeg4/MP4
开发平台:
Visual C++
- /*****************************************************************************
- * cpu-a.S: h264 encoder library
- *****************************************************************************
- * Copyright (C) 2009 x264 project
- *
- * Authors: David Conrad <lessen42@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
- *****************************************************************************/
- #include "asm.S"
- .fpu neon
- .align
- // done in gas because .fpu neon overrides the refusal to assemble
- // instructions the selected -march/-mcpu doesn't support
- function x264_cpu_neon_test, export=1
- vadd.i16 q0, q0, q0
- bx lr
- .endfunc
- // return: 0 on success
- // 1 if counters were already enabled
- // 9 if lo-res counters were already enabled
- function x264_cpu_enable_armv7_counter
- mrc p15, 0, r2, c9, c12, 0 // read PMNC
- ands r0, r2, #1
- andne r0, r2, #9
- orr r2, r2, #1 // enable counters
- bic r2, r2, #8 // full resolution
- mcreq p15, 0, r2, c9, c12, 0 // write PMNC
- mov r2, #1 << 31 // enable cycle counter
- mcr p15, 0, r2, c9, c12, 1 // write CNTENS
- bx lr
- .endfunc
- function x264_cpu_disable_armv7_counter
- mrc p15, 0, r0, c9, c12, 0 // read PMNC
- bic r0, r0, #1 // disable counters
- mcr p15, 0, r0, c9, c12, 0 // write PMNC
- bx lr
- .endfunc
- .macro READ_TIME r
- mrc p15, 0, r, c9, c13, 0
- .endm
- // return: 0 if transfers neon -> arm transfers take more than 10 cycles
- // nonzero otherwise
- function x264_cpu_fast_neon_mrc_test, export=1
- // check for user access to performance counters
- mrc p15, 0, r0, c9, c14, 0
- cmp r0, #0
- bxeq lr
- push {r4-r6,lr}
- bl x264_cpu_enable_armv7_counter
- ands r1, r0, #8
- mov r3, #0
- mov ip, #4
- mov r6, #4
- moveq r5, #1
- movne r5, #64
- average_loop:
- mov r4, r5
- READ_TIME r1
- 1: subs r4, r4, #1
- .rept 8
- vmov.u32 lr, d0[0]
- add lr, lr, lr
- .endr
- bgt 1b
- READ_TIME r2
- subs r6, r6, #1
- sub r2, r2, r1
- cmpgt r2, #30 << 3 // assume context switch if it took over 30 cycles
- addle r3, r3, r2
- subles ip, ip, #1
- bgt average_loop
- // disable counters if we enabled them
- ands r0, r0, #1
- bleq x264_cpu_disable_armv7_counter
- lsr r0, r3, #5
- cmp r0, #10
- movgt r0, #0
- pop {r4-r6,pc}
- .endfunc