aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDiego Biurrun <diego@biurrun.de>2013-01-09 23:17:08 +0100
committerDiego Biurrun <diego@biurrun.de>2013-01-18 22:02:03 +0100
commitd633d12b2cc999cee3ac25bf9a810fe7ff03726d (patch)
treec747f90a8fc6f75308848f1f534a24f55d95f05e
parentef5d41a5534b65f03d02f2e11a503ab8416bfc3b (diff)
downloadffmpeg-d633d12b2cc999cee3ac25bf9a810fe7ff03726d.tar.gz
x86inc: Add cvisible macro for C functions with public prefix
This allows defining externally visible library symbols. Signed-off-by: Diego Biurrun <diego@biurrun.de>
-rw-r--r--libavutil/x86/x86inc.asm42
-rw-r--r--libavutil/x86/x86util.asm1
2 files changed, 29 insertions, 14 deletions
diff --git a/libavutil/x86/x86inc.asm b/libavutil/x86/x86inc.asm
index 4d8d0db2c7..a18c6f466e 100644
--- a/libavutil/x86/x86inc.asm
+++ b/libavutil/x86/x86inc.asm
@@ -38,6 +38,10 @@
%define private_prefix x264
%endif
+%ifndef public_prefix
+ %define public_prefix private_prefix
+%endif
+
%define WIN64 0
%define UNIX64 0
%if ARCH_X86_64
@@ -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
; subsequent uses of the function name automatically refer to the mangled version.
; 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]
- ; the "" is a workaround for nasm, which fails if SUFFIX is empty
- ; and we call cglobal_internal with just %1 %+ SUFFIX (without %2)
- cglobal_internal %1 %+ SUFFIX, %2
+ cglobal_internal 1, %1 %+ SUFFIX, %2
+%endmacro
+%macro cvisible 1-2+ "" ; name, [PROLOGUE args]
+ cglobal_internal 0, %1 %+ SUFFIX, %2
%endmacro
-%macro cglobal_internal 1-2+
- %ifndef cglobaled_%1
- %xdefine %1 mangle(private_prefix %+ _ %+ %1)
- %xdefine %1.skip_prologue %1 %+ .skip_prologue
- CAT_XDEFINE cglobaled_, %1, 1
+%macro cglobal_internal 2-3+
+ %if %1
+ %xdefine %%FUNCTION_PREFIX private_prefix
+ %xdefine %%VISIBILITY hidden
+ %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
- %xdefine current_function %1
+ %xdefine current_function %2
%ifidn __OUTPUT_FORMAT__,elf
- global %1:function hidden
+ global %2:function %%VISIBILITY
%else
- global %1
+ global %2
%endif
align function_align
- %1:
+ %2:
RESET_MM_PERMUTATION ; not really needed, but makes disassembly somewhat nicer
%xdefine rstk rsp
%assign stack_offset 0
%assign stack_size 0
%assign stack_size_padded 0
%assign xmm_regs_used 0
- %ifnidn %2, ""
- PROLOGUE %2
+ %ifnidn %3, ""
+ PROLOGUE %3
%endif
%endmacro
diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm
index 40738c9c4c..79a023fc52 100644
--- a/libavutil/x86/x86util.asm
+++ b/libavutil/x86/x86util.asm
@@ -24,6 +24,7 @@
;******************************************************************************
%define private_prefix ff
+%define public_prefix avpriv
%define cpuflags_mmxext cpuflags_mmx2
%include "libavutil/x86/x86inc.asm"