]> granicus.if.org Git - xz/commitdiff
Replaced the range decoder optimization that used arithmetic
authorLasse Collin <lasse.collin@tukaani.org>
Mon, 24 Mar 2008 14:38:40 +0000 (16:38 +0200)
committerLasse Collin <lasse.collin@tukaani.org>
Mon, 24 Mar 2008 14:38:40 +0000 (16:38 +0200)
right shift with as fast version that doesn't need
arithmetic right shift. Removed the related check from
configure.ac.

configure.ac
m4/ax_c_arithmetic_rshift.m4 [deleted file]
src/liblzma/rangecoder/range_decoder.h

index 472a7d16ff06ace554493f9a488da9e390751e6c..dbafd73c1027dc8548cca19abb76895efa70796d 100644 (file)
@@ -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
 
diff --git a/m4/ax_c_arithmetic_rshift.m4 b/m4/ax_c_arithmetic_rshift.m4
deleted file mode 100644 (file)
index 3c18344..0000000
+++ /dev/null
@@ -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
-])
index a6a92b0b792eb32af6b74821d99622e87239a617..621624487bf40f5573384931c8a242f8f9ccdc24 100644 (file)
@@ -121,26 +121,15 @@ do { \
 } while (0)
 
 
-#ifdef HAVE_ARITHMETIC_RSHIFT
-#      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.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
+#define rc_decode_direct(dest, count) \
+do { \
+       rc_normalize(); \
+       rc.range >>= 1; \
+       rc.code -= rc.range; \
+       rc_bound = UINT32_C(0) - (rc.code >> 31); \
+       rc.code += rc.range & rc_bound; \
+       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 { \
-               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
+#define rc_decode_direct_dummy(count) \
+do { \
+       rc_normalize(); \
+       rc.range >>= 1; \
+       rc.code -= rc.range; \
+       rc.code += rc.range & (UINT32_C(0) - (rc.code >> 31)); \
+} while (--count > 0)
 
 
 ///////////////////////