mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2026-01-12 00:06:51 +08:00
On rpi5 A76 crc_32_ieee_le_c: 23146.3 ( 1.00x) crc_32_ieee_le_crc: 1060.1 (21.83x) On RK3566 A55 crc_32_ieee_le_c: 28773.8 ( 1.00x) crc_32_ieee_le_crc: 2602.4 (11.06x) Co-authored-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
70 lines
1.8 KiB
ArmAsm
70 lines
1.8 KiB
ArmAsm
/*
|
|
* Copyright (c) 2025 Zhao Zhili <quinkblack@foxmail.com>
|
|
*
|
|
* This file is part of FFmpeg.
|
|
*
|
|
* FFmpeg 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.
|
|
*
|
|
* FFmpeg 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 FFmpeg; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
#include "asm.S"
|
|
|
|
#if HAVE_ARM_CRC
|
|
ENABLE_ARM_CRC
|
|
|
|
.macro crc32_byte
|
|
ldrb w5, [x2], #1
|
|
subs x4, x4, #1
|
|
crc32b w0, w0, w5
|
|
.endm
|
|
|
|
function ff_crc32_aarch64, export=1
|
|
and x4, x2, #7 // non-aligned buffer addr
|
|
mov w0, w1
|
|
cbz x3, 8f
|
|
|
|
cbz x4, 2f
|
|
|
|
mov x5, #8
|
|
sub x4, x5, x4
|
|
cmp x4, x3
|
|
csel x4, x4, x3, lo
|
|
sub x3, x3, x4
|
|
1:
|
|
// loop on non-aligned buffer
|
|
crc32_byte
|
|
b.ne 1b
|
|
2:
|
|
// loop on aligned buffer
|
|
bic x5, x3, #15
|
|
and x4, x3, #15
|
|
cbz x5, 4f
|
|
3:
|
|
ldp x6, x7, [x2], #16
|
|
subs x5, x5, #16
|
|
crc32x w0, w0, x6
|
|
crc32x w0, w0, x7
|
|
b.ne 3b
|
|
4:
|
|
cbz x4, 8f
|
|
5:
|
|
crc32_byte
|
|
b.ne 5b
|
|
8:
|
|
ret
|
|
endfunc
|
|
|
|
DISABLE_ARM_CRC
|
|
#endif
|