Commit d633d12b authored by Diego Biurrun's avatar Diego Biurrun

x86inc: Add cvisible macro for C functions with public prefix

This allows defining externally visible library symbols.
Signed-off-by: 's avatarDiego Biurrun <diego@biurrun.de>
parent ef5d41a5
...@@ -38,6 +38,10 @@ ...@@ -38,6 +38,10 @@
%define private_prefix x264 %define private_prefix x264
%endif %endif
%ifndef public_prefix
%define public_prefix private_prefix
%endif
%define WIN64 0 %define WIN64 0
%define UNIX64 0 %define UNIX64 0
%if ARCH_X86_64 %if ARCH_X86_64
...@@ -624,33 +628,43 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14 ...@@ -624,33 +628,43 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
; Applies any symbol mangling needed for C linkage, and sets up a define such that ; Applies any symbol mangling needed for C linkage, and sets up a define such that
; subsequent uses of the function name automatically refer to the mangled version. ; subsequent uses of the function name automatically refer to the mangled version.
; Appends cpuflags to the function name if cpuflags has been specified. ; Appends cpuflags to the function name if cpuflags has been specified.
; The "" empty default parameter is a workaround for nasm, which fails if SUFFIX
; is empty and we call cglobal_internal with just %1 %+ SUFFIX (without %2).
%macro cglobal 1-2+ "" ; name, [PROLOGUE args] %macro cglobal 1-2+ "" ; name, [PROLOGUE args]
; the "" is a workaround for nasm, which fails if SUFFIX is empty cglobal_internal 1, %1 %+ SUFFIX, %2
; and we call cglobal_internal with just %1 %+ SUFFIX (without %2) %endmacro
cglobal_internal %1 %+ SUFFIX, %2 %macro cvisible 1-2+ "" ; name, [PROLOGUE args]
cglobal_internal 0, %1 %+ SUFFIX, %2
%endmacro %endmacro
%macro cglobal_internal 1-2+ %macro cglobal_internal 2-3+
%ifndef cglobaled_%1 %if %1
%xdefine %1 mangle(private_prefix %+ _ %+ %1) %xdefine %%FUNCTION_PREFIX private_prefix
%xdefine %1.skip_prologue %1 %+ .skip_prologue %xdefine %%VISIBILITY hidden
CAT_XDEFINE cglobaled_, %1, 1 %else
%xdefine %%FUNCTION_PREFIX public_prefix
%xdefine %%VISIBILITY
%endif
%ifndef cglobaled_%2
%xdefine %2 mangle(%%FUNCTION_PREFIX %+ _ %+ %2)
%xdefine %2.skip_prologue %2 %+ .skip_prologue
CAT_XDEFINE cglobaled_, %2, 1
%endif %endif
%xdefine current_function %1 %xdefine current_function %2
%ifidn __OUTPUT_FORMAT__,elf %ifidn __OUTPUT_FORMAT__,elf
global %1:function hidden global %2:function %%VISIBILITY
%else %else
global %1 global %2
%endif %endif
align function_align align function_align
%1: %2:
RESET_MM_PERMUTATION ; not really needed, but makes disassembly somewhat nicer RESET_MM_PERMUTATION ; not really needed, but makes disassembly somewhat nicer
%xdefine rstk rsp %xdefine rstk rsp
%assign stack_offset 0 %assign stack_offset 0
%assign stack_size 0 %assign stack_size 0
%assign stack_size_padded 0 %assign stack_size_padded 0
%assign xmm_regs_used 0 %assign xmm_regs_used 0
%ifnidn %2, "" %ifnidn %3, ""
PROLOGUE %2 PROLOGUE %3
%endif %endif
%endmacro %endmacro
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
;****************************************************************************** ;******************************************************************************
%define private_prefix ff %define private_prefix ff
%define public_prefix avpriv
%define cpuflags_mmxext cpuflags_mmx2 %define cpuflags_mmxext cpuflags_mmx2
%include "libavutil/x86/x86inc.asm" %include "libavutil/x86/x86inc.asm"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment