Drop the sparc assembly bitwise operations; it's less efficient

than the GCC 3.4 compile code and triggers compiler warnings on 
sparc64.  Thanks to Matthias Andree for his analysis and suggestions.
(Addresses Debian Bug #232326)

Remove support for the --enable-old-bitops configure option which 
was only for very old sparc systems.
bitmap-optimize
Theodore Ts'o 2005-02-03 21:56:44 -05:00
parent 07f031fd1d
commit 7004b4af6e
6 changed files with 17 additions and 156 deletions

View File

@ -1,3 +1,8 @@
2005-02-03 Theodore Ts'o <tytso@mit.edu>
* configure.in: Remove support for the (very old) sparc old-bitops
configure option.
2005-01-19 Matthias Andree <matthias.andree@gmx.de>
* configure.in: Clean up checks for dirent.d_reclen, ssize_t,

20
configure vendored
View File

@ -861,7 +861,6 @@ Optional Features:
--enable-dynamic-e2fsck build e2fsck dynamically
--enable-fsck build fsck wrapper program
--enable-e2initrd-helper build e2initrd-helper program
--enable-old-bitops Use old (non-standard but native) bitmask operations
--disable-nls do not use Native Language Support
--disable-rpath do not hardcode runtime library paths
@ -3457,25 +3456,6 @@ fi;
MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
# Check whether --enable-old-bitops or --disable-old-bitops was given.
if test "${enable_old_bitops+set}" = set; then
enableval="$enable_old_bitops"
if test "$enableval" = "no"
then
echo "Using new (standard) bitmask operations"
else
cat >>confdefs.h <<\_ACEOF
#define EXT2_OLD_BITOPS 1
_ACEOF
echo "Using old (native) bitmask operations"
fi
else
echo "Using standard bitmask operations by default"
fi;
GETTEXT_PACKAGE=e2fsprogs
PACKAGE=e2fsprogs
VERSION="$E2FSPROGS_VERSION"

View File

@ -486,21 +486,6 @@ dnl
MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library
AC_SUBST_FILE(MAKEFILE_LIBRARY)
dnl
dnl
AC_ARG_ENABLE([old-bitops],
[ --enable-old-bitops Use old (non-standard but native) bitmask operations],
if test "$enableval" = "no"
then
echo "Using new (standard) bitmask operations"
else
AC_DEFINE(EXT2_OLD_BITOPS)
echo "Using old (native) bitmask operations"
fi
,
echo "Using standard bitmask operations by default"
)
dnl
dnl Add internationalization support, using gettext.
dnl
GETTEXT_PACKAGE=e2fsprogs

View File

@ -1,3 +1,12 @@
2005-02-03 Theodore Ts'o <tytso@mit.edu>
* bitops.c: Make the generic functions more efficient.
* bitops.h: Drop SPARC assembly code. It's less efficient than GCC
3.4 compiled code and also triggers nasty compiler
warnings on sparc64. Thanks to Matthias Andree for his
analysis and suggestion.
2005-01-27 Theodore Ts'o <tytso@mit.edu>
* res_gdt.c (ext2fs_create_resize_inode): Create the resize inode

View File

@ -37,7 +37,7 @@ int ext2fs_set_bit(int nr,void * addr)
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
retval = (mask & *ADDR) != 0;
retval = mask & *ADDR;
*ADDR |= mask;
return retval;
}
@ -49,7 +49,7 @@ int ext2fs_clear_bit(int nr, void * addr)
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
retval = (mask & *ADDR) != 0;
retval = mask & *ADDR;
*ADDR &= ~mask;
return retval;
}
@ -61,7 +61,7 @@ int ext2fs_test_bit(int nr, const void * addr)
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
return ((mask & *ADDR) != 0);
return (mask & *ADDR);
}
#endif /* !_EXT2_HAVE_ASM_BITOPS_ */

View File

@ -300,124 +300,6 @@ _INLINE_ int ext2fs_test_bit(int nr, const void * addr)
#endif /* __mc68000__ */
#ifdef __sparc__
#define _EXT2_HAVE_ASM_BITOPS_
#ifndef EXT2_OLD_BITOPS
/*
* Do the bitops so that we are compatible with the standard i386
* convention.
*/
_INLINE_ int ext2fs_set_bit(int nr,void * addr)
{
#if 1
int mask;
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
__asm__ __volatile__("ldub [%0], %%g6\n\t"
"or %%g6, %2, %%g5\n\t"
"stb %%g5, [%0]\n\t"
"and %%g6, %2, %0\n"
: "=&r" (ADDR)
: "0" (ADDR), "r" (mask)
: "g5", "g6");
return (int) ADDR;
#else
int mask, retval;
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
retval = (mask & *ADDR) != 0;
*ADDR |= mask;
return retval;
#endif
}
_INLINE_ int ext2fs_clear_bit(int nr, void * addr)
{
#if 1
int mask;
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
__asm__ __volatile__("ldub [%0], %%g6\n\t"
"andn %%g6, %2, %%g5\n\t"
"stb %%g5, [%0]\n\t"
"and %%g6, %2, %0\n"
: "=&r" (ADDR)
: "0" (ADDR), "r" (mask)
: "g5", "g6");
return (int) ADDR;
#else
int mask, retval;
unsigned char *ADDR = (unsigned char *) addr;
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
retval = (mask & *ADDR) != 0;
*ADDR &= ~mask;
return retval;
#endif
}
_INLINE_ int ext2fs_test_bit(int nr, const void * addr)
{
int mask;
const unsigned char *ADDR = (const unsigned char *) addr;
ADDR += nr >> 3;
mask = 1 << (nr & 0x07);
return ((mask & *ADDR) != 0);
}
#else
/* Do things the old, unplesant way. */
_INLINE_ int ext2fs_set_bit(int nr, void *addr)
{
int mask, retval;
unsigned long *ADDR = (unsigned long *) addr;
ADDR += nr >> 5;
mask = 1 << (nr & 31);
retval = ((mask & *ADDR) != 0);
*ADDR |= mask;
return retval;
}
_INLINE_ int ext2fs_clear_bit(int nr, void *addr)
{
int mask, retval;
unsigned long *ADDR = (unsigned long *) addr;
ADDR += nr >> 5;
mask = 1 << (nr & 31);
retval = ((mask & *ADDR) != 0);
*ADDR &= ~mask;
return retval;
}
_INLINE_ int ext2fs_test_bit(int nr, const void *addr)
{
int mask;
const unsigned long *ADDR = (const unsigned long *) addr;
ADDR += nr >> 5;
mask = 1 << (nr & 31);
return ((mask & *ADDR) != 0);
}
#endif
#endif /* __sparc__ */
#if !defined(_EXT2_HAVE_ASM_SWAB_) && defined(EXT2FS_ENABLE_SWAPFS)