Strictly speaking this is not correct, as the value itself can be signed based on the definition of pixman_fixed_t. At the same time we check if vx can be negative in some places, while in others we directly ">> 16" and use the result as an index.
Obviously something isn't right here - should we add more checks, convert to unsigned or there is something which implies that in some codepaths the variable cannot be negative ? --- Noticed while looking at the crashes due to previous commit. --- pixman/pixman-sse2.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c index 8955103..67eed84 100644 --- a/pixman/pixman-sse2.c +++ b/pixman/pixman-sse2.c @@ -5698,8 +5698,8 @@ scaled_bilinear_scanline_sse2_8888_8888_SRC (uint32_t * dst, pixman_fixed_t max_vx, pixman_bool_t zero_src) { - intptr_t vx = vx_; - intptr_t unit_x = unit_x_; + uintptr_t vx = vx_; + uintptr_t unit_x = unit_x_; BILINEAR_DECLARE_VARIABLES; uint32_t pix1, pix2; @@ -5763,8 +5763,8 @@ scaled_bilinear_scanline_sse2_x888_8888_SRC (uint32_t * dst, pixman_fixed_t max_vx, pixman_bool_t zero_src) { - intptr_t vx = vx_; - intptr_t unit_x = unit_x_; + uintptr_t vx = vx_; + uintptr_t unit_x = unit_x_; BILINEAR_DECLARE_VARIABLES; uint32_t pix1, pix2; @@ -5823,8 +5823,8 @@ scaled_bilinear_scanline_sse2_8888_8888_OVER (uint32_t * dst, pixman_fixed_t max_vx, pixman_bool_t zero_src) { - intptr_t vx = vx_; - intptr_t unit_x = unit_x_; + uintptr_t vx = vx_; + uintptr_t unit_x = unit_x_; BILINEAR_DECLARE_VARIABLES; uint32_t pix1, pix2; @@ -5920,8 +5920,8 @@ scaled_bilinear_scanline_sse2_8888_8_8888_OVER (uint32_t * dst, pixman_fixed_t max_vx, pixman_bool_t zero_src) { - intptr_t vx = vx_; - intptr_t unit_x = unit_x_; + uintptr_t vx = vx_; + uintptr_t unit_x = unit_x_; BILINEAR_DECLARE_VARIABLES; uint32_t pix1, pix2; uint32_t m; @@ -6078,8 +6078,8 @@ scaled_bilinear_scanline_sse2_8888_n_8888_OVER (uint32_t * dst, pixman_fixed_t max_vx, pixman_bool_t zero_src) { - intptr_t vx = vx_; - intptr_t unit_x = unit_x_; + uintptr_t vx = vx_; + uintptr_t unit_x = unit_x_; BILINEAR_DECLARE_VARIABLES; uint32_t pix1; __m128i xmm_mask; -- 2.8.0 _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman