From b79a580368d4e1c43c9eb6e033924b44604c5dc5 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 21 Jun 2006 07:57:34 +0000 Subject: [PATCH] Fixed bug #157 [patch tweaked to handle older nasm, which doesn't support :function syntax] ------- Comment #5 From Mike Frysinger 2006-05-22 01:24 [reply] ------- Created an attachment (id=132) [edit] libsdl-hidden-nasm.patch here's the patch i posted here: http://www.libsdl.org/pipermail/sdl/2006-March/073618.html this will hide the symbols dynamically if the build nasm/yasm supports the hidden stuff ... in other words, this patch should be safe with both older and new versions of nasm/yasm --- configure.in | 18 +++++++++++++++--- src/hermes/common.asm | 9 +++++++++ src/hermes/mmx_main.asm | 6 ++++-- src/hermes/mmxp2_32.asm | 11 ++++++----- src/hermes/x86_main.asm | 8 +++++--- src/hermes/x86p_16.asm | 17 ++++++----------- src/hermes/x86p_32.asm | 23 ++++++++++++----------- 7 files changed, 57 insertions(+), 35 deletions(-) create mode 100644 src/hermes/common.asm diff --git a/configure.in b/configure.in index 7767af9bf..2c851f775 100644 --- a/configure.in +++ b/configure.in @@ -596,11 +596,14 @@ CheckNASM() AC_HELP_STRING([--enable-nasm], [use nasm assembly blitters on x86 [[default=yes]]]), , enable_nasm=yes) if test x$enable_video = xyes -a x$enable_assembly = xyes -a x$enable_nasm = xyes; then - AC_PATH_PROG(NASM, nasm) - if test x$NASM != x -a x$NASM != x'"$NASM"'; then + AC_PATH_PROG(NASM, yasm) + if test "x$NASM" = x -o "x$NASM" = x'"$NASM"'; then + AC_PATH_PROG(NASM, nasm) + fi + if test "x$NASM" != x -a "x$NASM" != x'"$NASM"'; then AC_DEFINE(SDL_HERMES_BLITTERS) SOURCES="$SOURCES $srcdir/src/hermes/*.asm" - if test x$NASMFLAGS = x; then + if test x"$NASMFLAGS" = x; then case $ARCH in win32) NASMFLAGS="-f win32" @@ -613,6 +616,15 @@ AC_HELP_STRING([--enable-nasm], [use nasm assembly blitters on x86 [[default=yes ;; esac fi + NASMFLAGS="$NASMFLAGS -i $srcdir/src/hermes/" + + dnl See if hidden visibility is supported + echo 'GLOBAL _bar:function hidden' > nasm_vis.asm + if $NASM $NASMFLAGS nasm_vis.asm -o nasm_vis.o >&AS_MESSAGE_LOG_FD ; then + NASMFLAGS="$NASMFLAGS -DHIDDEN_VISIBILITY" + fi + rm -f nasm_vis.asm nasm_vis.o + AC_SUBST(NASM) AC_SUBST(NASMFLAGS) diff --git a/src/hermes/common.asm b/src/hermes/common.asm new file mode 100644 index 000000000..9587e6ffb --- /dev/null +++ b/src/hermes/common.asm @@ -0,0 +1,9 @@ +; Some common macros for hermes nasm code + +%macro SDL_FUNC 1 +%ifdef HIDDEN_VISIBILITY +GLOBAL %1:function hidden +%else +GLOBAL %1 +%endif +%endmacro diff --git a/src/hermes/mmx_main.asm b/src/hermes/mmx_main.asm index a2e35d858..064be4657 100644 --- a/src/hermes/mmx_main.asm +++ b/src/hermes/mmx_main.asm @@ -9,8 +9,10 @@ BITS 32 -GLOBAL _ConvertMMX -GLOBAL _mmxreturn +%include "common.asm" + +SDL_FUNC _ConvertMMX +SDL_FUNC _mmxreturn SECTION .text diff --git a/src/hermes/mmxp2_32.asm b/src/hermes/mmxp2_32.asm index bbf918a09..9ce950dc9 100644 --- a/src/hermes/mmxp2_32.asm +++ b/src/hermes/mmxp2_32.asm @@ -20,12 +20,13 @@ BITS 32 +%include "common.asm" -GLOBAL _ConvertMMXpII32_24RGB888 -GLOBAL _ConvertMMXpII32_16RGB565 -GLOBAL _ConvertMMXpII32_16BGR565 -GLOBAL _ConvertMMXpII32_16RGB555 -GLOBAL _ConvertMMXpII32_16BGR555 +SDL_FUNC _ConvertMMXpII32_24RGB888 +SDL_FUNC _ConvertMMXpII32_16RGB565 +SDL_FUNC _ConvertMMXpII32_16BGR565 +SDL_FUNC _ConvertMMXpII32_16RGB555 +SDL_FUNC _ConvertMMXpII32_16BGR555 EXTERN _mmxreturn diff --git a/src/hermes/x86_main.asm b/src/hermes/x86_main.asm index 92103a697..bc2612b93 100644 --- a/src/hermes/x86_main.asm +++ b/src/hermes/x86_main.asm @@ -11,10 +11,12 @@ BITS 32 -GLOBAL _ConvertX86 -GLOBAL _x86return +%include "common.asm" + +SDL_FUNC _ConvertX86 +SDL_FUNC _x86return -GLOBAL _Hermes_X86_CPU +SDL_FUNC _Hermes_X86_CPU SECTION .text diff --git a/src/hermes/x86p_16.asm b/src/hermes/x86p_16.asm index 5498c1ece..d2a1bd929 100644 --- a/src/hermes/x86p_16.asm +++ b/src/hermes/x86p_16.asm @@ -10,19 +10,14 @@ ; Used with permission. ; - BITS 32 -GLOBAL _ConvertX86p16_32RGB888 -GLOBAL _ConvertX86p16_32BGR888 -GLOBAL _ConvertX86p16_32RGBA888 -GLOBAL _ConvertX86p16_32BGRA888 -GLOBAL _ConvertX86p16_24RGB888 -GLOBAL _ConvertX86p16_24BGR888 -GLOBAL _ConvertX86p16_16BGR565 -GLOBAL _ConvertX86p16_16RGB555 -GLOBAL _ConvertX86p16_16BGR555 -GLOBAL _ConvertX86p16_8RGB332 +%include "common.asm" + +SDL_FUNC _ConvertX86p16_16BGR565 +SDL_FUNC _ConvertX86p16_16RGB555 +SDL_FUNC _ConvertX86p16_16BGR555 +SDL_FUNC _ConvertX86p16_8RGB332 EXTERN _ConvertX86 EXTERN _x86return diff --git a/src/hermes/x86p_32.asm b/src/hermes/x86p_32.asm index 276225ad6..0a921eddc 100644 --- a/src/hermes/x86p_32.asm +++ b/src/hermes/x86p_32.asm @@ -9,19 +9,20 @@ ; Most routines are (c) Glenn Fiedler (ptc@gaffer.org), used with permission ; - BITS 32 -GLOBAL _ConvertX86p32_32BGR888 -GLOBAL _ConvertX86p32_32RGBA888 -GLOBAL _ConvertX86p32_32BGRA888 -GLOBAL _ConvertX86p32_24RGB888 -GLOBAL _ConvertX86p32_24BGR888 -GLOBAL _ConvertX86p32_16RGB565 -GLOBAL _ConvertX86p32_16BGR565 -GLOBAL _ConvertX86p32_16RGB555 -GLOBAL _ConvertX86p32_16BGR555 -GLOBAL _ConvertX86p32_8RGB332 +%include "common.asm" + +SDL_FUNC _ConvertX86p32_32BGR888 +SDL_FUNC _ConvertX86p32_32RGBA888 +SDL_FUNC _ConvertX86p32_32BGRA888 +SDL_FUNC _ConvertX86p32_24RGB888 +SDL_FUNC _ConvertX86p32_24BGR888 +SDL_FUNC _ConvertX86p32_16RGB565 +SDL_FUNC _ConvertX86p32_16BGR565 +SDL_FUNC _ConvertX86p32_16RGB555 +SDL_FUNC _ConvertX86p32_16BGR555 +SDL_FUNC _ConvertX86p32_8RGB332 EXTERN _x86return