1
0
espelhamento de https://git.tukaani.org/xz.git sincronizado 2025-06-30 17:36:36 +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.
Esse commit está contido em:
Lasse Collin 2008-03-24 16:38:40 +02:00
commit 641998c3e1
3 arquivos alterados com 16 adições e 74 exclusões

Ver arquivo

@ -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

Ver arquivo

@ -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
])

Ver arquivo

@ -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)
///////////////////////