1
0
Fork 0
mirror of https://git.tukaani.org/xz.git synced 2024-04-04 12:36:23 +02:00

Make fastpos.h use tuklib_integer.h instead of bsr.h

when --enable-small has been specified.
This commit is contained in:
Lasse Collin 2009-11-22 11:55:03 +02:00
parent 7ac3985d89
commit 0733f4c999
3 changed files with 1 additions and 65 deletions

View file

@ -8,7 +8,6 @@
liblzma_la_SOURCES += \ liblzma_la_SOURCES += \
common/common.c \ common/common.c \
common/common.h \ common/common.h \
common/bsr.h \
common/block_util.c \ common/block_util.c \
common/easy_preset.c \ common/easy_preset.c \
common/easy_preset.h \ common/easy_preset.h \

View file

@ -1,60 +0,0 @@
///////////////////////////////////////////////////////////////////////////////
//
/// \file bsr.h
/// \brief Bit scan reverse
//
// Author: Lasse Collin
//
// This file has been put into the public domain.
// You can do whatever you want with this file.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef LZMA_BSR_H
#define LZMA_BSR_H
// NOTE: Both input and output variables for lzma_bsr must be uint32_t.
#if defined(__GNUC__) && (defined (HAVE_ASM_X86) || defined(HAVE_ASM_X86_64))
# define lzma_bsr(dest, n) \
__asm__("bsrl %1, %0" : "=r" (dest) : "rm" (n))
#else
# define lzma_bsr(dest, n) dest = lzma_bsr_helper(n)
static inline uint32_t
lzma_bsr_helper(uint32_t n)
{
assert(n != 0);
uint32_t i = 31;
if ((n & UINT32_C(0xFFFF0000)) == 0) {
n <<= 16;
i = 15;
}
if ((n & UINT32_C(0xFF000000)) == 0) {
n <<= 8;
i -= 8;
}
if ((n & UINT32_C(0xF0000000)) == 0) {
n <<= 4;
i -= 4;
}
if ((n & UINT32_C(0xC0000000)) == 0) {
n <<= 2;
i -= 2;
}
if ((n & UINT32_C(0x80000000)) == 0)
--i;
return i;
}
#endif
#endif

View file

@ -76,15 +76,12 @@
// slightly faster, but sometimes it is a lot slower. // slightly faster, but sometimes it is a lot slower.
#ifdef HAVE_SMALL #ifdef HAVE_SMALL
# include "bsr.h"
# define get_pos_slot(pos) ((pos) <= 4 ? (pos) : get_pos_slot_2(pos)) # define get_pos_slot(pos) ((pos) <= 4 ? (pos) : get_pos_slot_2(pos))
static inline uint32_t static inline uint32_t
get_pos_slot_2(uint32_t pos) get_pos_slot_2(uint32_t pos)
{ {
uint32_t i; const uint32_t i = bsr32(pos);
lzma_bsr(i, pos);
return (i + i) + ((pos >> (i - 1)) & 1); return (i + i) + ((pos >> (i - 1)) & 1);
} }