MdeModulePkg BrotliLib: Fix the regression logic issue in loop
In V2, change logic to avoid use mtf[-1] style to get value.
Roll back to previous logic, and use point + offset to get byte value.
Cc: Bell Song <binx.song@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Bell Song <binx.song@intel.com>
(cherry picked from commit 2c8d2545f5
)
This commit is contained in:
@ -855,6 +855,7 @@ static BROTLI_NOINLINE void InverseMoveToFrontTransform(
|
|||||||
uint32_t i = 4;
|
uint32_t i = 4;
|
||||||
uint32_t upper_bound = state->mtf_upper_bound;
|
uint32_t upper_bound = state->mtf_upper_bound;
|
||||||
uint8_t* mtf = &state->mtf[4]; /* Make mtf[-1] addressable. */
|
uint8_t* mtf = &state->mtf[4]; /* Make mtf[-1] addressable. */
|
||||||
|
uint8_t* mtft = &state->mtf[3];
|
||||||
/* Load endian-aware constant. */
|
/* Load endian-aware constant. */
|
||||||
const uint8_t b0123[4] = {0, 1, 2, 3};
|
const uint8_t b0123[4] = {0, 1, 2, 3};
|
||||||
uint32_t pattern;
|
uint32_t pattern;
|
||||||
@ -875,10 +876,10 @@ static BROTLI_NOINLINE void InverseMoveToFrontTransform(
|
|||||||
uint8_t value = mtf[index];
|
uint8_t value = mtf[index];
|
||||||
upper_bound |= (uint32_t)v[i];
|
upper_bound |= (uint32_t)v[i];
|
||||||
v[i] = value;
|
v[i] = value;
|
||||||
mtf[-1] = value;
|
mtft[0] = value;
|
||||||
while (index > 0) {
|
while (index >= 0) {
|
||||||
|
mtft[index + 1] = mtft[index];
|
||||||
index--;
|
index--;
|
||||||
mtf[index + 1] = mtf[index];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Remember amount of elements to be reinitialized. */
|
/* Remember amount of elements to be reinitialized. */
|
||||||
|
Reference in New Issue
Block a user