template<bool avx, bool aligned> void ALWAYSINLINE storeColors(__m_auto_i* dest, const __m_auto_i p) { static const __m_auto_i classNone = _mmauto_set1_epi32(FieldColors::Color::none); static const __m_auto_i classWhite = _mmauto_set1_epi32(FieldColors::Color::white); static const __m_auto_i classBlack = _mmauto_set1_epi32(FieldColors::Color::black); static const __m_auto_i classGreen = _mmauto_set1_epi32(FieldColors::Color::green); static const __m_auto_i colorNone = _mmauto_set1_epi32(0xFF7F7F7F); static const __m_auto_i colorWhite = _mmauto_set1_epi32(0xFFFFFFFF); static const __m_auto_i colorBlack = _mmauto_set1_epi32(0xFF000000); static const __m_auto_i colorGreen = _mmauto_set1_epi32(0xFF00FF00); _mmauto_storet_si_all<aligned>(dest, _mmauto_or_si_all( _mmauto_or_si_all( _mmauto_or_si_all( _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classNone), colorNone), _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classWhite), colorWhite) ), _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classBlack), colorBlack) ), _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classGreen), colorGreen) ) ); }
template<bool avx> void ALWAYSINLINE storeColors(__m_auto_i* dest, const __m_auto_i p) { alignas(avx ? 32 : 16)static __m_auto_i colors[FieldColors::numOfColors] = { _mmauto_set1_epi32(0xff7f7f7f), //none _mmauto_set1_epi32(0xffffffff), //white _mmauto_set1_epi32(0xff000000), //black _mmauto_set1_epi32(0xff00ff00), //green _mmauto_set1_epi32(0xff0000ff), //own team color _mmauto_set1_epi32(0xffff0000) //opponent team color }; __m_auto_i result = _mmauto_setzero_si_all(); FOREACH_ENUM((FieldColors) Color, i) result = _mmauto_or_si_all(result, _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, _mmauto_set1_epi32(i)), colors[i])); _mmauto_storet_si_all<true>(dest, result); }