SSE2 anim blitter: fix edge case where medium path was used incorrectly.

This commit is contained in:
Jonathan G Rennison
2015-12-20 23:13:03 +00:00
parent e4ccfcf926
commit 897744ab47

View File

@@ -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);