19 m_internal_state_name_registry.register_internal_state(
"r",
20 std::shared_ptr<__m256i>(&m_memory_factor, [](
auto*){}));
21 m_internal_state_name_registry.register_internal_state(
"s",
22 std::shared_ptr<__m256i>(&m_scale_factor, [](
auto*){}));
23 m_internal_state_name_registry.register_internal_state(
"rs",
24 std::shared_ptr<__m256i>(&m_running_sum, [](
auto*){}));
26 configure_internal_state_collection(config);
28 int16_t memory_factors[16];
29 int16_t plane_memory_factors[3] = {config[
"memory_factor_plane0"],
30 config[
"memory_factor_plane1"],
31 config[
"memory_factor_plane2"]};
32 int16_t memory_divisors[16];
33 int16_t plane_memory_divisors[3] = {config[
"memory_divisor_plane0"],
34 config[
"memory_divisor_plane1"],
35 config[
"memory_divisor_plane2"]};
36 int16_t scale_factors[16];
37 int16_t plane_scale_factors[3] = {config[
"scale_factor_plane0"],
38 config[
"scale_factor_plane1"],
39 config[
"scale_factor_plane2"]};
40 int16_t scale_divisors[16];
41 int16_t plane_scale_divisors[3] = {config[
"scale_divisor_plane0"],
42 config[
"scale_divisor_plane1"],
43 config[
"scale_divisor_plane2"]};
45 for (
int i = 0; i < 16; i++) {
46 memory_factors[i] = plane_memory_factors[plane_numbers[i]];
47 memory_divisors[i] = 0x7FFF / plane_memory_divisors[plane_numbers[i]];
48 scale_factors[i] = plane_scale_factors[plane_numbers[i]];
49 scale_divisors[i] = 0x7FFF / plane_scale_divisors[plane_numbers[i]];
52 m_memory_factor = _mm256_lddqu_si256(
reinterpret_cast<__m256i*
>(memory_factors));
53 m_memory_divisor = _mm256_lddqu_si256(
reinterpret_cast<__m256i*
>(memory_divisors));
54 m_scale_factor = _mm256_lddqu_si256(
reinterpret_cast<__m256i*
>(scale_factors));
55 m_scale_divisor = _mm256_lddqu_si256(
reinterpret_cast<__m256i*
>(scale_divisors));