pixman: Branch 'master' - 3 commits
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Nov 13 20:07:38 UTC 2019
pixman/pixman-mmx.c | 14 +++++++++-----
pixman/pixman-sse2.c | 33 ++++++++++++++++++---------------
2 files changed, 27 insertions(+), 20 deletions(-)
New commits:
commit 32a55aa8acb4048720e18fbbeaa6c7b398b1a081
Author: Adam Jackson <ajax at redhat.com>
Date: Fri Nov 1 14:49:14 2019 -0400
pixman-sse2: Fix undefined unaligned loads
diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
index 1db9441..2644b0a 100644
--- a/pixman/pixman-sse2.c
+++ b/pixman/pixman-sse2.c
@@ -518,7 +518,8 @@ core_combine_over_u_pixel_sse2 (uint32_t src, uint32_t dst)
static force_inline uint32_t
combine1 (const uint32_t *ps, const uint32_t *pm)
{
- uint32_t s = *ps;
+ uint32_t s;
+ memcpy(&s, ps, sizeof(uint32_t));
if (pm)
{
@@ -3256,7 +3257,7 @@ sse2_composite_over_n_8_8888 (pixman_implementation_t *imp,
while (w >= 4)
{
- m = *((uint32_t*)mask);
+ memcpy(&m, mask, sizeof(uint32_t));
if (srca == 0xff && m == 0xffffffff)
{
@@ -3528,7 +3529,7 @@ sse2_composite_src_n_8_8888 (pixman_implementation_t *imp,
while (w >= 4)
{
- m = *((uint32_t*)mask);
+ memcpy(&m, mask, sizeof(uint32_t));
if (srca == 0xff && m == 0xffffffff)
{
@@ -3650,7 +3651,7 @@ sse2_composite_over_n_8_0565 (pixman_implementation_t *imp,
unpack_565_128_4x128 (xmm_dst,
&xmm_dst0, &xmm_dst1, &xmm_dst2, &xmm_dst3);
- m = *((uint32_t*)mask);
+ memcpy(&m, mask, sizeof(uint32_t));
mask += 4;
if (m)
@@ -3670,7 +3671,7 @@ sse2_composite_over_n_8_0565 (pixman_implementation_t *imp,
&xmm_dst0, &xmm_dst1);
}
- m = *((uint32_t*)mask);
+ memcpy(&m, mask, sizeof(uint32_t));
mask += 4;
if (m)
@@ -4636,7 +4637,9 @@ sse2_composite_add_n_8_8888 (pixman_implementation_t *imp,
while (w >= 4)
{
- uint32_t m = *(uint32_t*)mask;
+ uint32_t m;
+ memcpy(&m, mask, sizeof(uint32_t));
+
if (m)
{
__m128i xmm_mask_lo, xmm_mask_hi;
@@ -4743,7 +4746,7 @@ sse2_blt (pixman_implementation_t *imp,
while (w >= 2 && ((uintptr_t)d & 3))
{
- *(uint16_t *)d = *(uint16_t *)s;
+ memmove(d, s, 2);
w -= 2;
s += 2;
d += 2;
@@ -4751,7 +4754,7 @@ sse2_blt (pixman_implementation_t *imp,
while (w >= 4 && ((uintptr_t)d & 15))
{
- *(uint32_t *)d = *(uint32_t *)s;
+ memmove(d, s, 4);
w -= 4;
s += 4;
@@ -4788,7 +4791,7 @@ sse2_blt (pixman_implementation_t *imp,
while (w >= 4)
{
- *(uint32_t *)d = *(uint32_t *)s;
+ memmove(d, s, 4);
w -= 4;
s += 4;
@@ -4797,7 +4800,7 @@ sse2_blt (pixman_implementation_t *imp,
if (w >= 2)
{
- *(uint16_t *)d = *(uint16_t *)s;
+ memmove(d, s, 2);
w -= 2;
s += 2;
d += 2;
@@ -4859,7 +4862,7 @@ sse2_composite_over_x888_8_8888 (pixman_implementation_t *imp,
while (w && (uintptr_t)dst & 15)
{
s = 0xff000000 | *src++;
- m = (uint32_t) *mask++;
+ memcpy(&m, mask++, sizeof(uint32_t));
d = *dst;
ms = unpack_32_1x128 (s);
@@ -4877,7 +4880,7 @@ sse2_composite_over_x888_8_8888 (pixman_implementation_t *imp,
while (w >= 4)
{
- m = *(uint32_t*) mask;
+ memcpy(&m, mask, sizeof(uint32_t));
xmm_src = _mm_or_si128 (
load_128_unaligned ((__m128i*)src), mask_ff000000);
@@ -4913,7 +4916,7 @@ sse2_composite_over_x888_8_8888 (pixman_implementation_t *imp,
while (w)
{
- m = (uint32_t) *mask++;
+ memcpy(&m, mask++, sizeof(uint32_t));
if (m)
{
@@ -5016,7 +5019,7 @@ sse2_composite_over_8888_8_8888 (pixman_implementation_t *imp,
while (w >= 4)
{
- m = *(uint32_t *) mask;
+ memcpy(&m, mask, sizeof(uint32_t));
if (m)
{
@@ -5970,7 +5973,7 @@ scaled_bilinear_scanline_sse2_8888_8_8888_OVER (uint32_t * dst,
__m128i xmm_dst, xmm_dst_lo, xmm_dst_hi;
__m128i xmm_mask, xmm_mask_lo, xmm_mask_hi;
- m = *(uint32_t*)mask;
+ memcpy(&m, mask, sizeof(uint32_t));
if (m)
{
commit 47bec681d98007aa1303ed847b632f08be0582a1
Author: Adam Jackson <ajax at redhat.com>
Date: Fri Nov 1 14:48:50 2019 -0400
pixman-mmx: Fix undefined unaligned loads
diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index df30581..d7cf265 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -387,8 +387,10 @@ in_over (__m64 src, __m64 srca, __m64 mask, __m64 dest)
static force_inline __m64 ldq_u(__m64 *p)
{
#ifdef USE_X86_MMX
- /* x86's alignment restrictions are very relaxed. */
- return *(__m64 *)p;
+ /* x86's alignment restrictions are very relaxed, but that's no excuse */
+ __m64 r;
+ memcpy(&r, p, sizeof(__m64));
+ return r;
#elif defined USE_ARM_IWMMXT
int align = (uintptr_t)p & 7;
__m64 *aligned_p;
@@ -407,7 +409,9 @@ static force_inline uint32_t ldl_u(const uint32_t *p)
{
#ifdef USE_X86_MMX
/* x86's alignment restrictions are very relaxed. */
- return *p;
+ uint32_t r;
+ memcpy(&r, p, sizeof(uint32_t));
+ return r;
#else
struct __una_u32 { uint32_t x __attribute__((packed)); };
const struct __una_u32 *ptr = (const struct __una_u32 *) p;
commit baed75faa988a39295c79e71932f26de68904eea
Author: Adam Jackson <ajax at redhat.com>
Date: Fri Nov 1 14:47:15 2019 -0400
pixman-mmx: Fix undefined left-shifts
diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
index dec3974..df30581 100644
--- a/pixman/pixman-mmx.c
+++ b/pixman/pixman-mmx.c
@@ -3950,7 +3950,7 @@ mmx_fetch_a8 (pixman_iter_t *iter, const uint32_t *mask)
while (w && (((uintptr_t)dst) & 15))
{
- *dst++ = *(src++) << 24;
+ *dst++ = (uint32_t)*(src++) << 24;
w--;
}
@@ -3977,7 +3977,7 @@ mmx_fetch_a8 (pixman_iter_t *iter, const uint32_t *mask)
while (w)
{
- *dst++ = *(src++) << 24;
+ *dst++ = (uint32_t)*(src++) << 24;
w--;
}
More information about the xorg-commit
mailing list