Skip to content

Commit

Permalink
BUILD: Overhaul how we determine the need for aligned mem access
Browse files Browse the repository at this point in the history
Also add some comments explaining what is going on and why.
  • Loading branch information
fingolfin committed May 25, 2011
1 parent e013a51 commit 63a69b4
Showing 1 changed file with 42 additions and 62 deletions.
104 changes: 42 additions & 62 deletions configure
Expand Up @@ -158,7 +158,7 @@ _translation=yes
# Default platform settings
_backend=sdl
_endian=unknown
_need_memalign=no
_need_memalign=yes
_have_x86=no
_arm_asm=no
_verbose_build=no
Expand Down Expand Up @@ -1741,7 +1741,6 @@ if test -n "$_host"; then
case "$_host" in
android | android-v7a)
_unix=yes
_need_memalign=yes
# we link a .so as default
LDFLAGS="$LDFLAGS -shared -Wl,-Bsymbolic,--no-undefined"
HOSTEXEPRE=lib
Expand All @@ -1755,15 +1754,12 @@ if test -n "$_host"; then
;;
arm-linux|arm*-linux-gnueabi|arm-*-linux)
_unix=yes
_need_memalign=yes
;;
arm-riscos|linupy)
DEFINES="$DEFINES -DLINUPY"
_unix=yes
_need_memalign=yes
;;
bfin*)
_need_memalign=yes
;;
caanoo)
# This uses the GPH backend.
Expand All @@ -1778,7 +1774,6 @@ if test -n "$_host"; then
CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s"
ASFLAGS="$ASFLAGS"
_unix=yes
_need_memalign=yes
_backend="gph"
_build_hq_scalers=no
_vkeybd=yes
Expand All @@ -1795,7 +1790,6 @@ if test -n "$_host"; then
DEFINES="$DEFINES -DUNIX -DDINGUX -DDISABLE_DOSBOX_OPL -DREDUCE_MEMORY_USAGE"
ASFLAGS="$ASFLAGS"
CXXFLAGS="$CXXFLAGS -msoft-float -mips32"
_need_memalign=yes
_backend="dingux"
_mt32emu=no
_vkeybd=yes
Expand All @@ -1810,7 +1804,6 @@ if test -n "$_host"; then
dreamcast)
DEFINES="$DEFINES -DDISABLE_DEFAULT_SAVEFILEMANAGER -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE"
CXXFLAGS="$CXXFLAGS -O3 -funroll-loops -fschedule-insns2 -fomit-frame-pointer -fdelete-null-pointer-checks"
_need_memalign=yes
_backend="dc"
_build_scalers=no
_mad=yes
Expand All @@ -1825,15 +1818,13 @@ if test -n "$_host"; then
DEFINES="$DEFINES -DREDUCE_MEMORY_USAGE -DSTREAM_AUDIO_FROM_DISK"
DEFINES="$DEFINES -DDISABLE_DOSBOX_OPL -DDISABLE_SID -DDISABLE_NES_APU"
DEFINES="$DEFINES -DDISABLE_COMMAND_LINE"
_need_memalign=yes
add_line_to_config_h '#define DISABLE_TEXT_CONSOLE'
_backend="ds"
_build_scalers=no
_mt32emu=no
_port_mk="backends/platform/ds/ds.mk"
;;
gamecube)
_need_memalign=yes
_backend="wii"
_build_scalers=no
_mt32emu=no
Expand All @@ -1857,7 +1848,6 @@ if test -n "$_host"; then
ASFLAGS="$ASFLAGS -mfloat-abi=soft"
LDFLAGS="$LDFLAGS -static"
_unix=yes
_need_memalign=yes
_backend="gph"
_build_hq_scalers=no
_vkeybd=yes
Expand All @@ -1876,7 +1866,6 @@ if test -n "$_host"; then
CXXFLAGS="$CXXFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s"
ASFLAGS="$ASFLAGS -mfloat-abi=soft"
_unix=yes
_need_memalign=yes
_backend="gph"
_build_hq_scalers=no
_vkeybd=yes
Expand All @@ -1888,15 +1877,13 @@ if test -n "$_host"; then
iphone)
DEFINES="$DEFINES -DIPHONE"
_unix=yes
_need_memalign=yes
_backend="iphone"
_build_hq_scalers=no
_seq_midi=no
;;
m68k-atari-mint)
DEFINES="$DEFINES -DSYSTEM_NOT_SUPPORTING_D_TYPE"
_unix=yes
_need_memalign=yes
_ranlib=m68k-atari-mint-ranlib
_ar="m68k-atari-mint-ar cru"
_seq_midi=no
Expand All @@ -1910,13 +1897,11 @@ if test -n "$_host"; then
mips-sgi*)
LDFLAGS="$LDFLAGS -static-libgcc"
LIBS="$LIBS -laudio"
_need_memalign=yes
;;
motoezx)
DEFINES="$DEFINES -DMOTOEZX"
ASFLAGS="$ASFLAGS -mfpu=vfp"
_unix=yes
_need_memalign=yes
_backend="linuxmoto"
_build_hq_scalers=no
_mt32emu=no
Expand All @@ -1928,7 +1913,6 @@ if test -n "$_host"; then
DEFINES="$DEFINES -DMOTOMAGX"
ASFLAGS="$ASFLAGS -mfpu=vfp"
_unix=yes
_need_memalign=yes
_backend="linuxmoto"
_build_hq_scalers=no
_mt32emu=no
Expand All @@ -1943,7 +1927,6 @@ if test -n "$_host"; then
LDFLAGS="$LDFLAGS -L$N64SDK/hkz-libn64 -L$N64SDK/lib"
LDFLAGS="$LDFLAGS -T n64ld_cpp.x -Xlinker -Map -Xlinker scummvm.map"
_backend="n64"
_need_memalign=yes
_mt32emu=no
_build_scalers=no
_indeo3=no
Expand All @@ -1962,7 +1945,6 @@ if test -n "$_host"; then
neuros)
DEFINES="$DEFINES -DNEUROS"
_unix=yes
_need_memalign=yes
_backend='null'
_build_hq_scalers=no
_mt32emu=no
Expand All @@ -1978,7 +1960,6 @@ if test -n "$_host"; then
CXXFLAGS="$CXXFLAGS -march=armv7-a -mtune=cortex-a8 -mfpu=neon"
ASFLAGS="$ASFLAGS -mfloat-abi=soft"
_unix=yes
_need_memalign=yes
_backend="openpandora"
_build_hq_scalers=yes
_vkeybd=no
Expand All @@ -1987,14 +1968,11 @@ if test -n "$_host"; then
_port_mk="backends/platform/openpandora/op-bundle.mk"
;;
ppc-amigaos)
# AmigaOS exec allocates memory always in an aligned way
_need_memalign=yes
;;
ps2)
# TODO: complete this
DEFINES="$DEFINES -DDISABLE_TEXT_CONSOLE -DDISABLE_COMMAND_LINE -DDISABLE_DOSBOX_OPL"
DEFINES="$DEFINES -DDISABLE_SID -DDISABLE_NES_APU"
_need_memalign=yes
_backend="ps2"
_build_scalers=no
_mt32emu=no
Expand All @@ -2021,7 +1999,6 @@ if test -n "$_host"; then
fi
;;
psp)
_need_memalign=yes
_backend="psp"
_build_scalers=no
_mt32emu=no
Expand All @@ -2032,14 +2009,12 @@ if test -n "$_host"; then
ASFLAGS="$ASFLAGS -mfpu=vfp"
HOSTEXEEXT=".so"
_unix=yes
_need_memalign=yes
_backend="samsungtv"
_mt32emu=no
_vkeybd=yes
;;
webos)
_unix=yes
_need_memalign=yes
_backend="webos"
_port_mk="backends/platform/webos/webos.mk"
_build_scalers=no
Expand All @@ -2050,7 +2025,6 @@ if test -n "$_host"; then
_keymapper=yes
;;
wii)
_need_memalign=yes
_backend="wii"
_build_scalers=no
_port_mk="backends/platform/wii/wii.mk"
Expand All @@ -2065,7 +2039,6 @@ if test -n "$_host"; then
;;
wince)
LDFLAGS="$LDFLAGS -Wl,--stack,65536"
_need_memalign=yes
_tremolo=yes
_backend="wince"
_mt32emu=no
Expand All @@ -2075,33 +2048,42 @@ if test -n "$_host"; then
echo "WARNING: Unknown target, continuing with auto-detected values"
;;
esac
fi

else
#
# Check whether memory alignment is required
#
echo_n "Alignment required... "
case $_host_cpu in
alpha*)
# Hardcode alignment requirements for Alpha processsors
_need_memalign=yes
;;
arm*)
_need_memalign=yes
;;
mips*)
# Hardcode alignment requirements for MIPS processsors.
# While these can emulate unaligned memory access, this
# emulation is rather slow.
_need_memalign=yes
;;
sh*)
# Hardcode alignment requirements for SH processsors.
# While these can emulate unaligned memory access, this
# emulation is rather slow.
_need_memalign=yes
;;
*)
#
# Check whether memory alignment is required
#
# For some CPU types, unaligned memory access is either not supported at
# all (and so leads to a crash), requires a super-slow emulation via an
# exception handler, or just results in incorrect results.
# On the other hand, accessing data in a manner that works regardless of
# alignment can be a lot slower than regular access, so we don't want
# to use it if we don't have to.
#
# So we do the following: First, for CPU families where we know whether
# unaligned access is safe & fast, we enable / disable unaligned access
# accordingly.
# Otherwise, for cross compiled builds we just disable memory alignment.
# For native builds, we run some test code that detects whether unaligned
# access is supported (and is supported without an exception handler).
#
# NOTE: The only kinds of unaligned access we allow are for 2 byte and
# 4 byte loads / stores. No promises are made for bigger sizes, such as
# 8 or 16 byte loads, for which various architectures (e.g. x86 and PowerPC)
# behave differently than for the smaller sizes).
echo_n "Alignment required... "
case $_host_cpu in
alpha* | arm* | bfin* | hp* | mips* | sh* | sparc* | ia64 | nv1*)
# Unaligned access is not supported or extremely slow.
_need_memalign=yes
;;
i[3-6]86 | x86_64 | ppc*)
# Unaligned access should work reasonably well
_need_memalign=no
;;
*)
if test -z "$_host"; then
# NOT in cross-compiling mode:
# Try to auto-detect....
cat > $TMPC << EOF
#include <stdlib.h>
Expand All @@ -2117,13 +2099,14 @@ int main(int argc, char **argv) {
return 0;
}
EOF
_need_memalign=yes
cc_check_no_clean && $TMPO$HOSTEXEEXT && _need_memalign=no
cc_check_clean
;;
esac
echo "$_need_memalign"
fi
fi
;;
esac
echo "$_need_memalign"

define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT'

#
# Backend related stuff
Expand Down Expand Up @@ -2292,9 +2275,6 @@ case $_endian in
;;
esac


define_in_config_h_if_yes $_need_memalign 'SCUMM_NEED_ALIGNMENT'

if test "$_unix" = yes ; then
DEFINES="$DEFINES -DUNIX"
add_line_to_config_mk 'UNIX = 1'
Expand Down

0 comments on commit 63a69b4

Please sign in to comment.