Fixed LZMA compilation
This commit is contained in:
@@ -1,61 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
/// \file crc32_small.c
|
|
||||||
/// \brief CRC32 calculation (size-optimized)
|
|
||||||
//
|
|
||||||
// Author: Lasse Collin
|
|
||||||
//
|
|
||||||
// This file has been put into the public domain.
|
|
||||||
// You can do whatever you want with this file.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "check.h"
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t lzma_crc32_table[1][256];
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
crc32_init(void)
|
|
||||||
{
|
|
||||||
static const uint32_t poly32 = UINT32_C(0xEDB88320);
|
|
||||||
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
uint32_t r = b;
|
|
||||||
for (size_t i = 0; i < 8; ++i) {
|
|
||||||
if (r & 1)
|
|
||||||
r = (r >> 1) ^ poly32;
|
|
||||||
else
|
|
||||||
r >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
lzma_crc32_table[0][b] = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern void
|
|
||||||
lzma_crc32_init(void)
|
|
||||||
{
|
|
||||||
mythread_once(crc32_init);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern LZMA_API(uint32_t)
|
|
||||||
lzma_crc32(const uint8_t *buf, size_t size, uint32_t crc)
|
|
||||||
{
|
|
||||||
lzma_crc32_init();
|
|
||||||
|
|
||||||
crc = ~crc;
|
|
||||||
|
|
||||||
while (size != 0) {
|
|
||||||
crc = lzma_crc32_table[0][*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
|
|
||||||
--size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ~crc;
|
|
||||||
}
|
|
||||||
@@ -1,117 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
/// \file crc32_tablegen.c
|
|
||||||
/// \brief Generate crc32_table_le.h and crc32_table_be.h
|
|
||||||
///
|
|
||||||
/// Compiling: gcc -std=c99 -o crc32_tablegen crc32_tablegen.c
|
|
||||||
/// Add -DWORDS_BIGENDIAN to generate big endian table.
|
|
||||||
/// Add -DLZ_HASH_TABLE to generate lz_encoder_hash_table.h (little endian).
|
|
||||||
//
|
|
||||||
// Author: Lasse Collin
|
|
||||||
//
|
|
||||||
// This file has been put into the public domain.
|
|
||||||
// You can do whatever you want with this file.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "../../common/tuklib_integer.h"
|
|
||||||
|
|
||||||
|
|
||||||
static uint32_t crc32_table[8][256];
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
init_crc32_table(void)
|
|
||||||
{
|
|
||||||
static const uint32_t poly32 = UINT32_C(0xEDB88320);
|
|
||||||
|
|
||||||
for (size_t s = 0; s < 8; ++s) {
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
uint32_t r = s == 0 ? b : crc32_table[s - 1][b];
|
|
||||||
|
|
||||||
for (size_t i = 0; i < 8; ++i) {
|
|
||||||
if (r & 1)
|
|
||||||
r = (r >> 1) ^ poly32;
|
|
||||||
else
|
|
||||||
r >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
crc32_table[s][b] = r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
for (size_t s = 0; s < 8; ++s)
|
|
||||||
for (size_t b = 0; b < 256; ++b)
|
|
||||||
crc32_table[s][b] = bswap32(crc32_table[s][b]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
print_crc32_table(void)
|
|
||||||
{
|
|
||||||
printf("/* This file has been automatically generated by "
|
|
||||||
"crc32_tablegen.c. */\n\n"
|
|
||||||
"const uint32_t lzma_crc32_table[8][256] = {\n\t{");
|
|
||||||
|
|
||||||
for (size_t s = 0; s < 8; ++s) {
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
if ((b % 4) == 0)
|
|
||||||
printf("\n\t\t");
|
|
||||||
|
|
||||||
printf("0x%08" PRIX32, crc32_table[s][b]);
|
|
||||||
|
|
||||||
if (b != 255)
|
|
||||||
printf(",%s", (b+1) % 4 == 0 ? "" : " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s == 7)
|
|
||||||
printf("\n\t}\n};\n");
|
|
||||||
else
|
|
||||||
printf("\n\t}, {");
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
print_lz_table(void)
|
|
||||||
{
|
|
||||||
printf("/* This file has been automatically generated by "
|
|
||||||
"crc32_tablegen.c. */\n\n"
|
|
||||||
"const uint32_t lzma_lz_hash_table[256] = {");
|
|
||||||
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
if ((b % 4) == 0)
|
|
||||||
printf("\n\t");
|
|
||||||
|
|
||||||
printf("0x%08" PRIX32, crc32_table[0][b]);
|
|
||||||
|
|
||||||
if (b != 255)
|
|
||||||
printf(",%s", (b+1) % 4 == 0 ? "" : " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n};\n");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
init_crc32_table();
|
|
||||||
|
|
||||||
#ifdef LZ_HASH_TABLE
|
|
||||||
print_lz_table();
|
|
||||||
#else
|
|
||||||
print_crc32_table();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
/// \file crc64_small.c
|
|
||||||
/// \brief CRC64 calculation (size-optimized)
|
|
||||||
//
|
|
||||||
// Author: Lasse Collin
|
|
||||||
//
|
|
||||||
// This file has been put into the public domain.
|
|
||||||
// You can do whatever you want with this file.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "check.h"
|
|
||||||
|
|
||||||
|
|
||||||
static uint64_t crc64_table[256];
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
crc64_init(void)
|
|
||||||
{
|
|
||||||
static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42);
|
|
||||||
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
uint64_t r = b;
|
|
||||||
for (size_t i = 0; i < 8; ++i) {
|
|
||||||
if (r & 1)
|
|
||||||
r = (r >> 1) ^ poly64;
|
|
||||||
else
|
|
||||||
r >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
crc64_table[b] = r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern LZMA_API(uint64_t)
|
|
||||||
lzma_crc64(const uint8_t *buf, size_t size, uint64_t crc)
|
|
||||||
{
|
|
||||||
mythread_once(crc64_init);
|
|
||||||
|
|
||||||
crc = ~crc;
|
|
||||||
|
|
||||||
while (size != 0) {
|
|
||||||
crc = crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
|
|
||||||
--size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ~crc;
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
/// \file crc64_tablegen.c
|
|
||||||
/// \brief Generate crc64_table_le.h and crc64_table_be.h
|
|
||||||
///
|
|
||||||
/// Compiling: gcc -std=c99 -o crc64_tablegen crc64_tablegen.c
|
|
||||||
/// Add -DWORDS_BIGENDIAN to generate big endian table.
|
|
||||||
//
|
|
||||||
// Author: Lasse Collin
|
|
||||||
//
|
|
||||||
// This file has been put into the public domain.
|
|
||||||
// You can do whatever you want with this file.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "../../common/tuklib_integer.h"
|
|
||||||
|
|
||||||
|
|
||||||
static uint64_t crc64_table[4][256];
|
|
||||||
|
|
||||||
|
|
||||||
extern void
|
|
||||||
init_crc64_table(void)
|
|
||||||
{
|
|
||||||
static const uint64_t poly64 = UINT64_C(0xC96C5795D7870F42);
|
|
||||||
|
|
||||||
for (size_t s = 0; s < 4; ++s) {
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
uint64_t r = s == 0 ? b : crc64_table[s - 1][b];
|
|
||||||
|
|
||||||
for (size_t i = 0; i < 8; ++i) {
|
|
||||||
if (r & 1)
|
|
||||||
r = (r >> 1) ^ poly64;
|
|
||||||
else
|
|
||||||
r >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
crc64_table[s][b] = r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
for (size_t s = 0; s < 4; ++s)
|
|
||||||
for (size_t b = 0; b < 256; ++b)
|
|
||||||
crc64_table[s][b] = bswap64(crc64_table[s][b]);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
print_crc64_table(void)
|
|
||||||
{
|
|
||||||
printf("/* This file has been automatically generated by "
|
|
||||||
"crc64_tablegen.c. */\n\n"
|
|
||||||
"const uint64_t lzma_crc64_table[4][256] = {\n\t{");
|
|
||||||
|
|
||||||
for (size_t s = 0; s < 4; ++s) {
|
|
||||||
for (size_t b = 0; b < 256; ++b) {
|
|
||||||
if ((b % 2) == 0)
|
|
||||||
printf("\n\t\t");
|
|
||||||
|
|
||||||
printf("UINT64_C(0x%016" PRIX64 ")",
|
|
||||||
crc64_table[s][b]);
|
|
||||||
|
|
||||||
if (b != 255)
|
|
||||||
printf(",%s", (b+1) % 2 == 0 ? "" : " ");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s == 3)
|
|
||||||
printf("\n\t}\n};\n");
|
|
||||||
else
|
|
||||||
printf("\n\t}, {");
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
init_crc64_table();
|
|
||||||
print_crc64_table();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
/// \file fastpos_tablegen.c
|
|
||||||
/// \brief Generates the lzma_fastpos[] lookup table
|
|
||||||
///
|
|
||||||
// Authors: Igor Pavlov
|
|
||||||
// Lasse Collin
|
|
||||||
//
|
|
||||||
// This file has been put into the public domain.
|
|
||||||
// You can do whatever you want with this file.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "fastpos.h"
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
uint8_t fastpos[1 << FASTPOS_BITS];
|
|
||||||
|
|
||||||
const uint8_t fast_slots = 2 * FASTPOS_BITS;
|
|
||||||
uint32_t c = 2;
|
|
||||||
|
|
||||||
fastpos[0] = 0;
|
|
||||||
fastpos[1] = 1;
|
|
||||||
|
|
||||||
for (uint8_t slot_fast = 2; slot_fast < fast_slots; ++slot_fast) {
|
|
||||||
const uint32_t k = 1 << ((slot_fast >> 1) - 1);
|
|
||||||
for (uint32_t j = 0; j < k; ++j, ++c)
|
|
||||||
fastpos[c] = slot_fast;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("/* This file has been automatically generated "
|
|
||||||
"by fastpos_tablegen.c. */\n\n"
|
|
||||||
"#include \"common.h\"\n"
|
|
||||||
"#include \"fastpos.h\"\n\n"
|
|
||||||
"const uint8_t lzma_fastpos[1 << FASTPOS_BITS] = {");
|
|
||||||
|
|
||||||
for (size_t i = 0; i < (1 << FASTPOS_BITS); ++i) {
|
|
||||||
if (i % 16 == 0)
|
|
||||||
printf("\n\t");
|
|
||||||
|
|
||||||
printf("%3u", (unsigned int)(fastpos[i]));
|
|
||||||
|
|
||||||
if (i != (1 << FASTPOS_BITS) - 1)
|
|
||||||
printf(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n};\n");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
/// \file price_tablegen.c
|
|
||||||
/// \brief Probability price table generator
|
|
||||||
///
|
|
||||||
/// Compiling: gcc -std=c99 -o price_tablegen price_tablegen.c
|
|
||||||
///
|
|
||||||
// Authors: Igor Pavlov
|
|
||||||
// Lasse Collin
|
|
||||||
//
|
|
||||||
// This file has been put into the public domain.
|
|
||||||
// You can do whatever you want with this file.
|
|
||||||
//
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "range_common.h"
|
|
||||||
#include "price.h"
|
|
||||||
|
|
||||||
|
|
||||||
static uint32_t rc_prices[RC_PRICE_TABLE_SIZE];
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
init_price_table(void)
|
|
||||||
{
|
|
||||||
for (uint32_t i = (UINT32_C(1) << RC_MOVE_REDUCING_BITS) / 2;
|
|
||||||
i < RC_BIT_MODEL_TOTAL;
|
|
||||||
i += (UINT32_C(1) << RC_MOVE_REDUCING_BITS)) {
|
|
||||||
const uint32_t cycles_bits = RC_BIT_PRICE_SHIFT_BITS;
|
|
||||||
uint32_t w = i;
|
|
||||||
uint32_t bit_count = 0;
|
|
||||||
|
|
||||||
for (uint32_t j = 0; j < cycles_bits; ++j) {
|
|
||||||
w *= w;
|
|
||||||
bit_count <<= 1;
|
|
||||||
|
|
||||||
while (w >= (UINT32_C(1) << 16)) {
|
|
||||||
w >>= 1;
|
|
||||||
++bit_count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
rc_prices[i >> RC_MOVE_REDUCING_BITS]
|
|
||||||
= (RC_BIT_MODEL_TOTAL_BITS << cycles_bits)
|
|
||||||
- 15 - bit_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
print_price_table(void)
|
|
||||||
{
|
|
||||||
printf("/* This file has been automatically generated by "
|
|
||||||
"price_tablegen.c. */\n\n"
|
|
||||||
"#include \"range_encoder.h\"\n\n"
|
|
||||||
"const uint8_t lzma_rc_prices["
|
|
||||||
"RC_PRICE_TABLE_SIZE] = {");
|
|
||||||
|
|
||||||
const size_t array_size = sizeof(lzma_rc_prices)
|
|
||||||
/ sizeof(lzma_rc_prices[0]);
|
|
||||||
for (size_t i = 0; i < array_size; ++i) {
|
|
||||||
if (i % 8 == 0)
|
|
||||||
printf("\n\t");
|
|
||||||
|
|
||||||
printf("%4" PRIu32, rc_prices[i]);
|
|
||||||
|
|
||||||
if (i != array_size - 1)
|
|
||||||
printf(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n};\n");
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
main(void)
|
|
||||||
{
|
|
||||||
init_price_table();
|
|
||||||
print_price_table();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user