template <int B1, int B0, int C0, int A0, int A1, int A2> SIMD_INLINE __m256i _xFilterCore(__m256i s0, __m256i s1, __m256i s2, __m256i s3, __m256i s4, __m256i s5)
{
if(B1 == 1 && B0 == 9 && C0 == 22 && A0 == 22 && A1 == 9 && A2 == 1)
{
s0 = _mm256_add_epi16(s0, s5);
s1 = _mm256_add_epi16(s1, s4);
s1 = _mm256_add_epi16(s1, _mm256_slli_epi16(s1, 3)); // 1 + 8 = 9
s2 = _mm256_add_epi16(s2, s3);
s2 = _mm256_add_epi16(_mm256_slli_epi16(s2, 1), _mm256_add_epi16(_mm256_slli_epi16(s2, 4), _mm256_slli_epi16(s2, 2))); // 2 + 16 + 4 = 22
s0 = _mm256_add_epi16(_mm256_add_epi16(s0, s1), _mm256_add_epi16(s2, _mm256_set1_epi16(32)));
return _mm256_srli_epi16(s0, 6);
}
else if(B1 == 1 && B0 == 5 && C0 == 10 && A0 == 10 && A1 == 5 && A2 == 1)
{
s0 = _mm256_add_epi16(s0, s5); // 1
s1 = _mm256_add_epi16(s1, s4);
s1 = _mm256_add_epi16(s1, _mm256_slli_epi16(s1, 2)); // 1 + 4 = 5
s2 = _mm256_add_epi16(s2, s3);
s2 = _mm256_add_epi16(_mm256_slli_epi16(s2, 1), _mm256_slli_epi16(s2, 3)); // 2 + 8 = 10
s0 = _mm256_add_epi16(_mm256_add_epi16(s0, s1), _mm256_add_epi16(s2, _mm256_set1_epi16(16)));
return _mm256_srli_epi16(s0, 5);
}
else if (B1 == 1 && B0 == -5 && C0 == 20 && A0 == 20 && A1 == -5 && A2 == 1)
{
s0 = _mm256_add_epi16(s0, s5); // 1
s1 = _mm256_add_epi16(s1, s4);
s1 = _mm256_add_epi16(s1, _mm256_slli_epi16(s1, 2)); // 1 + 4 = 5
s2 = _mm256_add_epi16(s2, s3);
s2 = _mm256_add_epi16(_mm256_slli_epi16(s2, 2), _mm256_slli_epi16(s2, 4)); // 4 + 16 = 20
s0 = _mm256_adds_epi16(_mm256_subs_epi16(s2, s1), _mm256_add_epi16(s0, _mm256_set1_epi16(16)));
return Simd::ClipBD(_mm256_srai_epi16(s0, 5));
}
else
{
MCI_ASSERT(0);
return _mm256_setzero_si256();
}
}
지저분한 코드라도 훨씬 보기좋아
4
4는 너무 길어 쓰다보면 느끼게됨
충분히 지저분한데? 템플릿 인자 왤케 많이 들어갔냐, 포인터라던가 벡터같은 자료구조로 축소하면 될듯한데, 바이너리 트린가?
템플릿 안쓰는순간부터 성능 헬게이트 열림