mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-02 03:06:28 +02:00
07948f3d38
On windows and darwin (and modern android), the x18 register is reserved
and shouldn't be modified by user code, while it is freely available on
linux. Strictly avoid it, to keep the assembly code portable.
This would have helped catch the issue fixed in 872790b1f9
immediately.
Signed-off-by: Martin Storsjö <martin@martin.st>
118 lines
2.9 KiB
ArmAsm
118 lines
2.9 KiB
ArmAsm
/*
|
|
* Copyright (c) 2008 Mans Rullgard <mans@mansr.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 Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 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
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser 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 "config.h"
|
|
|
|
#ifdef __ELF__
|
|
# define ELF
|
|
#else
|
|
# define ELF #
|
|
#endif
|
|
|
|
#if HAVE_AS_FUNC
|
|
# define FUNC
|
|
#else
|
|
# define FUNC #
|
|
#endif
|
|
|
|
#ifndef __has_feature
|
|
# define __has_feature(x) 0
|
|
#endif
|
|
|
|
.macro function name, export=0, align=2
|
|
.macro endfunc
|
|
ELF .size \name, . - \name
|
|
FUNC .endfunc
|
|
.purgem endfunc
|
|
.endm
|
|
.text
|
|
.align \align
|
|
.if \export
|
|
.global EXTERN_ASM\name
|
|
ELF .type EXTERN_ASM\name, %function
|
|
FUNC .func EXTERN_ASM\name
|
|
EXTERN_ASM\name:
|
|
.else
|
|
ELF .type \name, %function
|
|
FUNC .func \name
|
|
\name:
|
|
.endif
|
|
.endm
|
|
|
|
.macro const name, align=2, relocate=0
|
|
.macro endconst
|
|
ELF .size \name, . - \name
|
|
.purgem endconst
|
|
.endm
|
|
#if HAVE_SECTION_DATA_REL_RO
|
|
.if \relocate
|
|
.section .data.rel.ro
|
|
.else
|
|
.section .rodata
|
|
.endif
|
|
#elif defined(_WIN32)
|
|
.section .rdata
|
|
#elif !defined(__MACH__)
|
|
.section .rodata
|
|
#else
|
|
.const_data
|
|
#endif
|
|
.align \align
|
|
\name:
|
|
.endm
|
|
|
|
.macro movrel rd, val, offset=0
|
|
#if CONFIG_PIC && defined(__APPLE__)
|
|
.if \offset < 0
|
|
adrp \rd, \val@PAGE
|
|
add \rd, \rd, \val@PAGEOFF
|
|
sub \rd, \rd, -(\offset)
|
|
.else
|
|
adrp \rd, \val+(\offset)@PAGE
|
|
add \rd, \rd, \val+(\offset)@PAGEOFF
|
|
.endif
|
|
#elif CONFIG_PIC && defined(_WIN32)
|
|
.if \offset < 0
|
|
adrp \rd, \val
|
|
add \rd, \rd, :lo12:\val
|
|
sub \rd, \rd, -(\offset)
|
|
.else
|
|
adrp \rd, \val+(\offset)
|
|
add \rd, \rd, :lo12:\val+(\offset)
|
|
.endif
|
|
#elif CONFIG_PIC
|
|
# if __has_feature(hwaddress_sanitizer)
|
|
adrp \rd, :pg_hi21_nc:\val+(\offset)
|
|
# else
|
|
adrp \rd, \val+(\offset)
|
|
# endif
|
|
add \rd, \rd, :lo12:\val+(\offset)
|
|
#else
|
|
ldr \rd, =\val+\offset
|
|
#endif
|
|
.endm
|
|
|
|
#define GLUE(a, b) a ## b
|
|
#define JOIN(a, b) GLUE(a, b)
|
|
#define X(s) JOIN(EXTERN_ASM, s)
|
|
|
|
#define x18 do_not_use_x18
|
|
#define w18 do_not_use_w18
|