Commit 790a3612 authored by Mathis Rosenhauer's avatar Mathis Rosenhauer Committed by Thomas Jahns
Browse files

Revert "Let compiler decide how to unroll"

This reverts commit fdc6797ea6f3865ca079ebc260814a6f584b1cff.
parent 1ed96518
...@@ -278,6 +278,33 @@ static void preprocess_signed(struct aec_stream *strm) ...@@ -278,6 +278,33 @@ static void preprocess_signed(struct aec_stream *strm)
state->uncomp_len = (strm->block_size - 1) * strm->bits_per_sample; state->uncomp_len = (strm->block_size - 1) * strm->bits_per_sample;
} }
static uint64_t block_fs(struct aec_stream *strm, int k)
{
/**
Sum FS of all samples in block for given splitting position.
*/
int i;
uint64_t fs = 0;
struct internal_state *state = strm->state;
for (i = 0; i < strm->block_size; i += 8)
fs +=
(uint64_t)(state->block[i + 0] >> k)
+ (uint64_t)(state->block[i + 1] >> k)
+ (uint64_t)(state->block[i + 2] >> k)
+ (uint64_t)(state->block[i + 3] >> k)
+ (uint64_t)(state->block[i + 4] >> k)
+ (uint64_t)(state->block[i + 5] >> k)
+ (uint64_t)(state->block[i + 6] >> k)
+ (uint64_t)(state->block[i + 7] >> k);
if (state->ref)
fs -= (uint64_t)(state->block[0] >> k);
return fs;
}
static uint32_t assess_splitting_option(struct aec_stream *strm) static uint32_t assess_splitting_option(struct aec_stream *strm)
{ {
/** /**
...@@ -305,7 +332,7 @@ static uint32_t assess_splitting_option(struct aec_stream *strm) ...@@ -305,7 +332,7 @@ static uint32_t assess_splitting_option(struct aec_stream *strm)
analogue check can be done for decreasing k. analogue check can be done for decreasing k.
*/ */
int i, k; int k;
int k_min; int k_min;
int this_bs; /* Block size of current block */ int this_bs; /* Block size of current block */
int no_turn; /* 1 if we shouldn't reverse */ int no_turn; /* 1 if we shouldn't reverse */
...@@ -323,9 +350,7 @@ static uint32_t assess_splitting_option(struct aec_stream *strm) ...@@ -323,9 +350,7 @@ static uint32_t assess_splitting_option(struct aec_stream *strm)
dir = 1; dir = 1;
for (;;) { for (;;) {
fs_len = 0; fs_len = block_fs(strm, k);
for (i = state->ref; i < strm->block_size; i++)
fs_len += (uint64_t)(state->block[i] >> k);
len = fs_len + this_bs * (k + 1); len = fs_len + this_bs * (k + 1);
if (len < len_min) { if (len < len_min) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment