19 m_internal_state_name_registry.register_internal_state(
"pedestal",
20 std::shared_ptr<__m256i>(&m_pedestal, [](
auto*){}));
21 m_internal_state_name_registry.register_internal_state(
"accum",
22 std::shared_ptr<__m256i>(&m_accum, [](
auto*){}));
24 configure_internal_state_collection(config);
26 m_accum_limit = config[
"accum_limit"];
37 __m256i is_gt = _mm256_cmpgt_epi16(signal,
m_pedestal);
38 __m256i is_lt = _mm256_cmpgt_epi16(
m_pedestal, signal);
41 __m256i to_add = _mm256_setzero_si256();
42 to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(1), is_gt);
43 to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(-1), is_lt);
51 to_add = _mm256_setzero_si256();
52 to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(1), is_gt);
53 to_add = _mm256_blendv_epi8(to_add, _mm256_set1_epi16(-1), is_lt);
59 __m256i need_reset = _mm256_or_si256(is_lt, is_gt);
60 m_accum = _mm256_blendv_epi8(
m_accum, _mm256_setzero_si256(), need_reset);