1
0
spegling av https://git.tukaani.org/xz.git synced 2025-10-16 22:23:28 +00:00

Replaced the range decoder optimization that used arithmetic

right shift with as fast version that doesn't need
arithmetic right shift. Removed the related check from
configure.ac.
This commit is contained in:
Lasse Collin 2008-03-24 16:38:40 +02:00
förälder ad999efd27
incheckning 641998c3e1
3 ändrade filer med 16 tillägg och 74 borttagningar

Visa fil

@ -407,7 +407,6 @@ AC_CHECK_HEADERS([assert.h errno.h byteswap.h sys/param.h sys/sysctl.h],
AC_C_INLINE
AC_C_RESTRICT
AX_C_ARITHMETIC_RSHIFT
AC_HEADER_STDBOOL

Visa fil

@ -1,36 +0,0 @@
##### http://autoconf-archive.cryp.to/ax_c_arithmetic_rshift.html
#
# SYNOPSIS
#
# AX_C_ARITHMETIC_RSHIFT
#
# DESCRIPTION
#
# Checks if the right shift operation is arithmetic.
#
# This macro uses compile-time detection and so is cross-compile
# ready.
#
# LAST MODIFICATION
#
# 2006-12-12
#
# COPYLEFT
#
# Copyright (c) 2006 YAMAMOTO Kengo <yamaken AT bp.iij4u.or.jp>
#
# Copying and distribution of this file, with or without
# modification, are permitted in any medium without royalty provided
# the copyright notice and this notice are preserved.
AC_DEFUN([AX_C_ARITHMETIC_RSHIFT], [
AC_CACHE_CHECK([whether right shift operation is arithmetic],
[ax_cv_c_arithmetic_rshift],
[AC_COMPILE_IFELSE([[int dummy[((-1 >> 1) < 0) ? 1 : -1];]],
[ax_cv_c_arithmetic_rshift=yes],
[ax_cv_c_arithmetic_rshift=no])])
if test "x$ax_cv_c_arithmetic_rshift" = xyes; then
AC_DEFINE([HAVE_ARITHMETIC_RSHIFT], [1],
[Define to 1 if the right shift operation is arithmetic.])
fi
])

Visa fil

@ -121,26 +121,15 @@ do { \
} while (0)
#ifdef HAVE_ARITHMETIC_RSHIFT
# define rc_decode_direct(dest, count) \
do { \
#define rc_decode_direct(dest, count) \
do { \
rc_normalize(); \
rc.range >>= 1; \
rc.code -= rc.range; \
rc_bound = (uint32_t)((int32_t)(rc.code) >> 31); \
dest = (dest << 1) + (rc_bound + 1); \
rc_bound = UINT32_C(0) - (rc.code >> 31); \
rc.code += rc.range & rc_bound; \
} while (--count > 0)
#else
# define rc_decode_direct(dest, count) \
do { \
rc_normalize(); \
rc.range >>= 1; \
rc_bound = (rc.code - rc.range) >> 31; \
rc.code -= rc.range & (rc_bound - 1); \
dest = ((dest) << 1) | (1 - rc_bound);\
} while (--count > 0)
#endif
dest = (dest << 1) + (rc_bound + 1); \
} while (--count > 0)
// Dummy versions don't update prob or dest.
@ -155,23 +144,13 @@ do { \
} while (0)
#ifdef HAVE_ARITHMETIC_RSHIFT
# define rc_decode_direct_dummy(count) \
do { \
#define rc_decode_direct_dummy(count) \
do { \
rc_normalize(); \
rc.range >>= 1; \
rc.code -= rc.range; \
rc.code += rc.range & ((uint32_t)((int32_t)(rc.code) >> 31)); \
} while (--count > 0)
#else
# define rc_decode_direct_dummy(count) \
do { \
rc_normalize(); \
rc.range >>= 1; \
rc_bound = (rc.code - rc.range) >> 31; \
rc.code -= rc.range & (rc_bound - 1); \
} while (--count > 0)
#endif
rc.code += rc.range & (UINT32_C(0) - (rc.code >> 31)); \
} while (--count > 0)
///////////////////////