SSE2 anim blitter: fix edge case where medium path was used incorrectly.
This commit is contained in:
@@ -54,9 +54,11 @@ void Blitter_32bppSSE2_Anim::PaletteAnimate(const Palette &palette)
|
||||
__m128i colour_data = _mm_and_si128(data, colour_mask);
|
||||
|
||||
/* test if any colour >= PALETTE_ANIM_START */
|
||||
if (unlikely(_mm_movemask_epi8(_mm_cmpgt_epi16(colour_data, anim_cmp)))) {
|
||||
int colour_cmp_result = _mm_movemask_epi8(_mm_cmpgt_epi16(colour_data, anim_cmp));
|
||||
if (unlikely(colour_cmp_result)) {
|
||||
/* test if any brightness is unexpected */
|
||||
if (unlikely(x < 8 || _mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) {
|
||||
if (unlikely(x < 8 || colour_cmp_result != 0xFFFF ||
|
||||
_mm_movemask_epi8(_mm_cmpeq_epi16(_mm_srli_epi16(data, 8), brightness_cmp)) != 0xFFFF)) {
|
||||
/* slow path: < 8 pixels left or unexpected brightnesses */
|
||||
for (int z = min<int>(x, 8); z != 0 ; z--) {
|
||||
int value = _mm_extract_epi16(data, 0);
|
||||
|
Reference in New Issue
Block a user